smbus2是纯python中smbus cffi/smbus python的替代品

smbus2的Python项目详细描述


smbus2

替换纯python中的smbus cffi/smbus python

travisDocumentation Status

简介

smbus2是python-smbus包的纯python实现。

它是从头开始设计的,有两个目标:

  1. 它应该是SMBus的替代品。语法应相同。
  2. 与其他纯Python实现(如pysmbus)相比,在更大程度上使用固有的i2c结构和联合通过这样做,它将更完整,更容易扩展

当前支持的功能有:

  • 获取I2C功能(I2C功能)
  • 读取字节
  • 写入字节
  • 读取字节数据
  • 写入字节数据
  • 读取单词数据
  • 写入单词数据
  • 读取块数据
  • 写入块数据
  • 快速写作
  • I2c_rdwr-具有重复启动的组合写入/读取事务

它是在Python2.7上开发的,但在Python3.x中也没有任何修改。

smbus代码示例

smbus2作为包安装在smbus旁边,因此它并不是100%的替代品。必须更改模块名称

示例1a:读取字节

fromsmbus2importSMBus# Open i2c bus 1 and read one byte from address 80, offset 0bus=SMBus(1)b=bus.read_byte_data(80,0)print(b)bus.close()

示例1b:使用“with”

读取字节

这是同一个例子,但使用起来更安全,因为SMBus在退出带块时会自动关闭。

fromsmbus2importSMBusWrapperwithSMBusWrapper(1)asbus:b=bus.read_byte_data(80,0)print(b)

示例2:读取数据块

一次最多可以读取32个字节。

fromsmbus2importSMBusWrapperwithSMBusWrapper(1)asbus:# Read a block of 16 bytes from address 80, offset 0block=bus.read_i2c_block_data(80,0,16)# Returned value is a list of 16 bytesprint(block)

例3:写入一个字节

fromsmbus2importSMBusWrapperwithSMBusWrapper(1)asbus:# Write a byte to address 80, offset 0data=45bus.write_byte_data(80,0,data)

例4:写一个数据块

当时可以写入32个字节,但我发现这很容易出错。写得少一点,如果你遇到麻烦的话,在两者之间加上一个延迟。

fromsmbus2importSMBusWrapperwithSMBusWrapper(1)asbus:# Write a block of 8 bytes to address 80 from offset 0data=[1,2,3,4,5,6,7,8]bus.write_i2c_block_data(80,0,data)

I2C

从v0.2开始,smbus2库还支持组合读写事务。i2c\u rdwr并不是一个真正的smbus功能,但是在主服务器需要时可以使用:

  1. 读取或写入大于smbus的32字节限制的大量数据。
  2. 写一些数据,然后从从机上读取,中间有一个重复的开始位和无停止位。

每个操作都由一个i2c_msg消息对象表示。

示例5:单个I2C rDWR

fromsmbus2importSMBus,ic_msgwithSMBusWrapper(1)asbus:# Read 64 bytes from address 80msg=i2c_msg.read(80,64)bus.i2c_rdwr(msg)# Write some bytes to address 80msg=i2c_msg.write(80,[65,66,67,68])bus.i2c_rdwr(msg)

例6:双I2C rDWR

要执行双重操作,只需在总线调用中添加更多i2c_msg实例:

fromsmbus2importSMBus,ic_msg# Single transaction writing two bytes then read two at address 80write=i2c_msg.write(80,[40,50])read=i2c_msg.read(80,2)withSMBusWrapper(1)asbus:bus.i2c_rdwr(write,read)

例7:访问I2C消息数据

所有数据都包含在i2c_msg实例中。以下是一些数据访问替代方案。

# 1: Convert message content to listmsg=i2c.write(60,[1,2,3,4,5,6,7,8,9,10])data=list(msg)# data = [1, 2, 3, ...]print(len(data))# => 10# 2: i2c_msg is iterableforvalueinmsg:print(value)# 3: Through i2c_msg propertiesforkinrange(msg.len):print(msg.buf[k])

安装说明

smbus2是纯python代码,不需要编译。安装简单:

python setup.py install

或者只使用pip

pip install smbus2

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ArrayList中实体对象上的JAVA泛型   带Redis的爪哇芹菜vs单用Redis   java在设备面向横向时隐藏标题栏/通知栏   java JXTreeTable:如何使用ComponentProvider为一列设置渲染器   java创建异常的成本与记录异常的成本相比   java在方法参数中使用setter传递新对象   java在一个类中的方法与另一个类中的方法交互时遇到问题   java如何迭代2个大小相等的ArrayList   Java getDesktop()。open在Windows中工作,但在Mac中不工作   从tomcat切换到jetty后的java“无法启动嵌入式容器”,Spring引导   java如何使用void方法   java如何在解组时在JAXB的ValidationEventHandler中获取节点值?   如何使用Akka Java API创建不响应的TCP接收器   JavaScriptjQuery在java中将记录上传到数据库时的进度条   如何在重新绘制时在java小程序中显示上一个图像