1. 文档中心
  2. 比卜创造 Micro:bit
  3. API 参考
  4. I²C

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 传感器后观察扫描结果。