首页 文章

Python i2c write_bus_data用法

提问于
浏览
4

8我有一些4位数的七段显示器,我试图用Beaglebone Black(运行Ubuntu)和i2c来控制 .

SSD 's are Byvac BV4614' s和完整的数据表is available here .

我已经使用Beaglebone上的引脚P9_19和P9_20正确连接了电路 . 我已经包含了上拉电阻,我正在使用i2c logic converter以增加安全性 .

我已经使用i2cdetect(它的0x31是正确的)验证了设备,并且设备很好地启动并进入它的i2c模式 .

但是我不明白如何使用Python SMBbus读取或写入数据到设备 . SSD手册说

此设备使用的格式包含一个命令,这是一个数字,后跟其他字节,具体取决于该命令 . 使用I2C协议写入器件的方法遵循一致的格式,通常是:其中S-Addr是起始条件,后跟器件地址(0x62) . 命令是表中给出的命令之一 . 数据是一个或多个字节,Stop是停止条件 .

(在7位寻址设备处于0x31,这就是我正在使用的) .

因此,如果我想让SSD在数字1上显示一个数字,手册说我必须这样做

命令5 - 名称:将数字发送到数字 - 格式:<S-addr> <5> <数字> <字节> <停止>

我的问题是,如何使用Python编写该命令?我想我正在寻找这样的东西

import smbus
b = smbus.SMBus(1)
b.write_byte_data(0x31, 0x35, 0x30, 0x38)

我想说的是“将命令5(0x35)发送到设备0x31,数字0(0x30)并显示数字8(0x38)”但wrrite_byte_data不接受该数量的参数 . 我也尝试过使用write_i2c_block_data()看起来更有希望,但我再也无法弄清楚如何正确使用这些函数 .

我觉得我在这里遇到了BCK的问题,但是任何帮助都会受到赞赏 .

编辑好的,我试过了

b.write_block_data(0x31,5,[8,0x38])

这使得数字8出现在数字3上

b.write_block_data(0x31,5,[2])

使2出现在数字2上 . 我还没有弄清楚如何在数字1或4上放置任何东西 .

b.write_block_data(0x31,4,[44])#现在正在输入随机内容

增加亮度,然后使SSD无响应 .

所以我越走越近了

编辑并解决

最后它非常简单 .

b.write_i2c_block_data(0x31, 5, [0, 8]) # write number 8 to digit 0
b.write_i2c_block_data(0x31, 5, [4, 5]) # write number 5 to digit 4 etc etc

根据http://www.raspberry-projects.com/pi/programming-in-python/i2c-programming-in-python/using-the-i2c-interface-2函数write_block_data不是很好 .

write_block_data(int addr,char cmd,long vals [])最多可写入32个字节到设备 . 此函数添加一个初始字节,指示valls数组之前的vals数组的长度 . 请改用write_i2c_block_data!

1 回答

相关问题