查看: 372|回复: 0

[教程] 第五章 用树莓派通过I2C调试传感器

[复制链接]
现在我们已经逐渐熟悉了树莓派,我们就可以用它来做一些简单的实验了

在数字传感器中,我们最常用的就是I2C通信的传感器,I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。
下面是树莓派的引脚图,我们先只用了解I2C引脚就行了
rpi-pins-40-0.png
在使用树莓派的I2C引脚之前,我们需要先使能I2C引脚
[mw_shl_code=applescript,false]sudo raspi-config[/mw_shl_code]
按动图中的步骤就可以完成使能
使能I2C.gif
使能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地址.png
这个指令的目的有两个,首先是为了确认I2C使能成功,能与传感器正常通信,其次是为了扫描I2C设备的地址,方便我们下一步操作


读取I2C设备的数据
[mw_shl_code=applescript,false]sudo i2cdump -y 1 0x68[/mw_shl_code]
-y 代表取消用户交互过程,直接执行命令
1 代表I2C设备号
0x68 代表I2C设备地址

I2C读取.png
读出的是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 代表寄存器地址

读取寄存器.png


I2C编程
上述方法是在指令层面的I2C通信,现在我们进入编程环节
在本教程中,我们主要学习Python作为树莓派的编程语言,因此我们也只为大家介绍Python的I2C编程

首先我们要安装smbus库

[mw_shl_code=applescript,false]sudo pip install smbus[/mw_shl_code]
安装smbus.png
接下来我们来学习使用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读取结果了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail