Raspberrypi Python bus.read_byte

时间:2013-04-20 09:09:37

标签: python raspberry-pi i2c

是否有一个Python函数会像arduino中的Wire.available函数一样响应,以获取线上的所有数据而不必指定要抓取多少字节?

这就是我现在所拥有的,并且它运行良好,但我必须知道有多少数据在线上,或者它会提供意想不到的结果。

for i in range(0, 13):
 data += chr(bus.read_byte(address));

谢谢!

2 个答案:

答案 0 :(得分:1)

不是一个完美的解决方案,但我找到了一种方法可以确切知道路上有多少字节。

在Arduino上,我指定了缓冲区的最大大小,(128),添加我的数据,然后将剩余的数据归零,然后发送整个内容。在Pi上,我收到整个缓冲区,然后发生的第一件事就是过滤\x00个字符。它并不完美,但它现在有效。

for i in range(0, 128):
    data += chr(bus.read_byte(address))

print repr(data) 
    #prints the whole string as it is received

data = filter(lambda a: a != '\x00')

print repr(data)
    #prints the string without any '\x00' characters.

答案 1 :(得分:-1)

我在raspberrypi上使用PIGPIO库来执行i2c命令,它的功能更接近线路。

http://abyz.co.uk/rpi/pigpio/python.html#i2c_read_device

我认为这是你正在寻找的功能。