3935| 0
|
[教程] 第五章 用树莓派通过I2C调试传感器 |
现在我们已经逐渐熟悉了树莓派,我们就可以用它来做一些简单的实验了 在数字传感器中,我们最常用的就是I2C通信的传感器,I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。 下面是树莓派的引脚图,我们先只用了解I2C引脚就行了 在使用树莓派的I2C引脚之前,我们需要先使能I2C引脚 [mw_shl_code=applescript,false]sudo raspi-config[/mw_shl_code] 按动图中的步骤就可以完成使能 使能I2C后,不需要重启树莓派就可以使用一般来说,I2C传感器有VCC,GND,SDA,SCL这4个接口,我们需要将这4个接口接在上图树莓派的3,4,5,6引脚上 现在我们开始在树莓派上调试 首先,我们应先安装I2C库和工具 [mw_shl_code=applescript,false]sudo apt-get install i2c-tools[/mw_shl_code] 安装成功后,我们输入下面的指令 [mw_shl_code=applescript,false]sudo i2cdetect -y -a 1[/mw_shl_code] 这个指令的目的有两个,首先是为了确认I2C使能成功,能与传感器正常通信,其次是为了扫描I2C设备的地址,方便我们下一步操作 读取I2C设备的数据 [mw_shl_code=applescript,false]sudo i2cdump -y 1 0x68[/mw_shl_code] -y 代表取消用户交互过程,直接执行命令 1 代表I2C设备号 0x68 代表I2C设备地址 读出的是0x68这个地址的设备各个寄存器的数据 写入数据 [mw_shl_code=applescript,false]sudo i2cset -y 1 0x68 0x1a 0x55[/mw_shl_code] 1 代表I2C设备号 0x68 代表I2C设备地址 0x1a 代表寄存器地址 0x55 代表向寄存器写入的数据 读取寄存器数据 [mw_shl_code=applescript,false]sudo i2cget -y 1 0x68 0x1a[/mw_shl_code] 1 代表I2C设备号 0x68 代表I2C设备地址 0x1a 代表寄存器地址 I2C编程 上述方法是在指令层面的I2C通信,现在我们进入编程环节 在本教程中,我们主要学习Python作为树莓派的编程语言,因此我们也只为大家介绍Python的I2C编程 首先我们要安装smbus库 [mw_shl_code=applescript,false]sudo pip install smbus[/mw_shl_code] 接下来我们来学习使用smbus库 下面的代码用了最常用的四个smbus库的方法 [mw_shl_code=applescript,false]import smbus import time i2cbus= smbus.SMBus(1) data=bus.read_byte_data(addr,reg) print(data) bus.write_byte_data(addr,reg,0x99) #对16位数据的读写 data=bus.read_word_data(addr,reg) print(data) bus.write_word_data(addr,reg,0x01d6) #读写列表 data=bus.read_i2c_block_data(addr,reg) print(data[0]) buffer=[0x24,0x26] bus.write_i2c_block_data(addr,reg,buffer)[/mw_shl_code] 打开python环境,将上述代码逐行输入,每输入一行都可以看到运行结果(#后面的可以不用输入) 也可以将代码输入后缀为.py的Python脚本中,运行脚本就能看到I2C读取结果了 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed