I²C
bibo.i2c 模块通过 I²C 总线与外接设备通信。总线上可连接多个从设备,每个设备有唯一 7 位地址(固定或可配置)。micro:bit 作为 I²C 主机。
本实现使用 7 位寻址,部分其他 micro:bit 资料可能不同。
具体应发送哪些字节、如何解析响应,取决于设备本身,请参阅该设备的说明书。
函数
init(freq=100000, sda=pin20, scl=pin19)
以指定时钟频率 freq 在 sda、scl 引脚上重新初始化 I²C。
motion 传感器(加速度计、指南针)使用独立的内部 I²C 线路,修改边缘连接器上的 I²C 引脚不会影响它们。
参数
freq:时钟频率(Hz),默认 100000。sda:数据线引脚,默认pin20。scl:时钟线引脚,默认pin19。
scan()
扫描总线上的设备。
返回值:响应扫描的 7 位地址列表。
read(addr, n, repeat=False)
从 7 位地址 addr 的设备读取 n 字节。
参数
addr:设备 7 位地址。n:读取字节数。repeat:True时不发送停止位。
write(addr, buf, repeat=False)
向地址 addr 的设备写入 buf 中的字节。
参数
addr:设备 7 位地址。buf:待写入字节序列。repeat:True时不发送停止位。
接线
将设备的 SCL 接到 micro:bit pin19,SDA 接到 pin20,设备 GND 接 micro:bit GND。部分设备需外接电源或由 micro:bit 供电。
板载 I²C 线已有上拉电阻;线缆较长或从设备较多时,可能需要额外上拉以保证通信稳定。
示例
扫描并读取设备(地址与寄存器以你的传感器为准):
from bibo import *
devices = i2c.scan()
if devices:
display.scroll(str(len(devices)))
addr = devices[0]
i2c.write(addr, bytes([0x00]))
data = i2c.read(addr, 2)
else:
display.scroll("No I2C")
可在比卜创造 Python 编辑器中烧录,连接 I²C 传感器后观察扫描结果。