Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python i2c写入总线数据使用_Python_I2c - Fatal编程技术网

Python i2c写入总线数据使用

Python i2c写入总线数据使用,python,i2c,Python,I2c,8我有很多4位数的七段显示器,我正试图用Beaglebone Black(运行Ubuntu)和i2c控制这些显示器 SSD为Byvac BV4614和完整的数据表 我已使用Beaglebone上的插脚P9_19和P9_20正确连接电路。我已经包括上拉电阻,并使用了一个额外的安全 我已经用i2cdetect验证了设备(正确的是0x31),设备很好地通电并进入i2c模式 但是,我不理解如何使用Python SMBbus向设备读取或写入数据。SSD手册上说 此设备使用的格式包括一个命令,这是一个 数字

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

SSD为Byvac BV4614和完整的数据表

我已使用Beaglebone上的插脚P9_19和P9_20正确连接电路。我已经包括上拉电阻,并使用了一个额外的安全

我已经用i2cdetect验证了设备(正确的是0x31),设备很好地通电并进入i2c模式

但是,我不理解如何使用Python SMBbus向设备读取或写入数据。SSD手册上说

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

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

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

命令5-名称:将数字发送到数字- 格式:

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

import smbus
b = smbus.SMBus(1)
b.write_byte_data(0x31, 0x35, 0x30, 0x38)
我的意思是“发送命令5(0x35)到设备0x31,数字0(0x30)并显示数字8(0x38)”,但write_byte_data不接受该数量的参数。我还尝试过使用write_i2c_block_data(),这看起来更有希望,但我仍然无法正确使用函数

我觉得我在这里面临着BCK问题,但任何帮助都将不胜感激

编辑 好的,我试过了

b、 写入块数据(0x31,5[8,0x38])

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

b、 写入块数据(0x31,5,[2])

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

b、 写入块数据(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
根据函数write_block_数据不是很好

写入块数据(int addr、char cmd、long vals[])

最多可向设备写入32个字节。此函数用于添加初始字节 指示vals数组之前vals数组的长度。使用 改为写入i2c块数据

为我解决了这个问题!规范中的所有其他命令现在都按预期运行


位于的页面通知我,我使用的函数不理想。

只是一条注释:数字必须在0-3范围内。
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