用于与SMBus兼容的i2c设备交互的Python框架
项目描述
i2cdevice
i2cdevice是一个旨在处理常见的SMBus/i2c设备交互模式的Python框架。
本项目旨在使Python库的i2c设备组合实现变得更加容易、简单且自然具有文档性。
它通过将硬件寄存器的详细描述及其操作方式分离到一个结构化定义语言中来实现这一点。
本项目并不旨在帮助您为Python设备创建公共API-这应该在下面展示的基本之上构建。
使用此库
您通常应旨在在您正在实现的设备中实现硬件寄存器的1:1表示,即使您不打算使用所有功能。实现完整的寄存器集允许在未来轻松添加新功能。
查看以下列出的库,了解现实世界的示例。
功能
- 描述设备、寄存器和寄存器内单个位域的类,其方式与数据表紧密映射
- 将现实世界中的数字(如
512ms
)转换为寄存器值(如0b111
)及其反向转换 - 使用
get
将寄存器读入字段命名的元组 - 使用带关键字参数的
set
在事务中写入多个寄存器字段 - 支持将多字节视为单个值,或将单个寄存器视为多个值
使用 i2cdevice 构建
- bme280 - https://github.com/pimoroni/bme280-python
- bmp280 - https://github.com/pimoroni/bmp280-python
- bh1745 - https://github.com/pimoroni/bh1745-python
- as7262 - https://github.com/pimoroni/as7262-python
- lsm303d - https://github.com/pimoroni/lsm303d-python
- ltr559 - https://github.com/pimoroni/ltr559-python
- ads1015 - https://github.com/pimoroni/ads1015-python
示例
以下示例在 ltr559 上定义了 ALS_CONTROL
寄存器,寄存器地址为 0x80
。
它有 3 个字段;增益,映射到现实世界值,以及 sw_reset/mode,它们是单比特标志。
ALS_CONTROL = Register('ALS_CONTROL', 0x80, fields=(
BitField('gain', 0b00011100, values_map={1: 0b000, 2: 0b001, 4: 0b011, 8:0b011, 48:0b110, 96:0b111}),
BitField('sw_reset', 0b00000010),
BitField('mode', 0b00000001)
))
对于值,不需要查找表,但是可以使用一个函数将值从转换为设备理解的格式。
以下示例使用 i2cdevice._byte_swap
在存储/检索之前更改两个 16 位值的字节序。
# This will address 0x88, 0x89, 0x8A and 0x8B as a continuous 32bit register
ALS_DATA = Register('ALS_DATA', 0x88, fields=(
BitField('ch1', 0xFFFF0000, bitwidth=16, values_in=_byte_swap, values_out=_byte_swap),
BitField('ch0', 0x0000FFFF, bitwidth=16, values_in=_byte_swap, values_out=_byte_swap)
), read_only=True, bitwidth=32)
“寄存器”及其“位域”定义了一组规则和逻辑,用于处理由设备类解释的硬件寄存器。寄存器使用 registers=()
关键字参数在设备上声明
I2C_ADDR = 0x23
ltr559 = Device(I2C_ADDR, bit_width=8, registers=(
ALS_CONTROL,
ALS_DATA
))
读取寄存器
可以配置将寄存器的字段读入一个命名元组,使用 get
方法
register_values = ltr559.get('ALS_CONTROL')
gain = register_values.gain
sw_reset = register_values.sw_reset
mode = register_values.mode
写入寄存器
从 get
返回的命名元组是不可变的,并且不会尝试将值映射回硬件,为了将一个或多个字段写入寄存器,您必须使用带有每个字段的关键字参数的 set
ltr559.set('ALS_CONTROL',
gain=4,
sw_reset=1)
这将从设备读取寄存器状态,相应地更新位域,并将结果写回。
1.0.0
- 增强:重新打包为 pyproject.toml/hatchling
- 将 i2c_dev 降级从 smbus 更改为 smbus2
0.0.7
- 修复错误:防止 .get 多次读取(感谢 @dkao)
- 增强:更好的错误输出(感谢 Kamil Klimek)
0.0.6
- 新 API 方法 set 和 get
0.0.5
- 升级到稳定版本
0.0.4
- 修复错误
0.0.3
- 添加许可证
0.0.2
- 主要重构
0.0.1
- 初始发布
项目详情
下载文件
下载您平台上的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源代码分发
i2cdevice-1.0.0.tar.gz (17.0 kB 查看哈希值)
构建版本
i2cdevice-1.0.0-py3-none-any.whl (10.8 kB 查看哈希值)
关闭
i2cdevice-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9a5d1666a11b6733d16c73f148fc85cba767dd1b976e5bcc56ad970986c96c4 |
|
MD5 | d4fec70430699cf8342e08094f1e39f9 |
|
BLAKE2b-256 | c39f017fbfac4f1c69be128b59f432a16d5d9559794c1975c926bd549596bbfe |
关闭
i2cdevice-1.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 595cfa3815aab4d8a4bbe1cbd4a4e1271d56cf7c1de367eab6a94dd80566f0c1 |
|
MD5 | 51412b8214796b74cece454b0ebfefe0 |
|
BLAKE2b-256 | 250c38c1b44e9233378fad579ce89040d934d12c53ed8536982ad26a6a3bab7f |