红联Linux门户
Linux帮助

ubuntu下使用quick2wire控制RespberryPi2的I2C

发布时间:2016-01-06 10:01:13来源:linux网站作者:闻冥

首先,开启树莓派的I2C驱动:

查看I2C驱动是否已经被加载:ls /dev -l | grep i2c,如果有形如 i2c-x 的显示结果表明驱动已经加载,否则驱动没有加载,需要进行如下操作:

修改配置文件:/etc/modprobe.d/raspi-blacklist.conf(如果存在的话)

去掉 “#blacklist i2c-bcm2708” 前的注释符号#

重启树莓派,可以使用命令(sudo reboot)

加载驱动: sudo modprobe i2c-dev

设置读写属性:sudo chmod o+rw /dev/i2c*

 
安装python2.7:

quick2wire本身支持python3,但因为很多程序写在python2.7下,所以我添加了quick2wire对python2.7的支持

sudo apt-get install python


获取quick2wire代码:

创建一个本地目录,假设名字是q2w:

进入该目录 cd q2w


获取quick2wire-gpio-admin

git clone https://github.com/quick2wire/quick2wire-gpio-admin.git

cd quick2wire-gpio-admin

make && make install


获取quick2wire-python-api

原始版本(只支持python3):https://github.com/quick2wire/quick2wire-python-api.git

支持python2.7的版本:https://github.com/freason/quick2wire-python-api.git

这里使用支持python2.7的版本:

git clone https://github.com/freason/quick2wire-python-api.git

cd quick2wire-python-api

python setup.py


使用:

请参见:

https://github.com/quick2wire/quick2wire-python-api/blob/master/README.md

https://github.com/quick2wire/quick2wire-python-api/blob/master/doc/getting-started-with-i2c.md


首先用i2cdetect确定slave设备的地址:

i2cdetect x(其中x为/dev/i2c-x中的x),这条命令会返回类似如下的数据:
 
   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                      

1e为slave设备的地址,我使用的设备是HMC5883,三轴陀螺仪


简单的python代码:

import quick2wire.i2c as i2c
addr = 0x1e
regConf = 0x02
regRd = 0x03
bus = i2c.I2CMaster()
bus.transaction(i2c.writing_bytes(addr, regConf, 0x00))
read_results = bus.transaction(i2c.writing_bytes(addr, regRd), i2c.reading(address, 6))
for i in r[0]:                                                         
print(ord(i))


该代码会有如下输出: 
254
168
255
109
255
73


i2c--2.6.34文档:如何枚举产生i2c_client:http://www.linuxdiyf.com/linux/5310.html

Linux kernel 2.6.34:i2c驱动如何编写:http://www.linuxdiyf.com/linux/5307.html