bmm150 --- BMM150 三轴磁力计

用于通过 I2C 操作 Bosch BMM150 三轴地磁传感器的驱动程序。在构造时,该驱动会对设备执行软复位,将其切换至所请求 ODR 下的正常工作模式,并读取 Bosch 补偿公式所用的微调(trim)寄存器,以将原始读数转换为已校准的磁场值。

备注

本驱动不支持 SPI 模式;传入非 I2C 总线会引发 ValueError

示例:

import time
from machine import Pin, I2C
from bmm150 import BMM150

imu = BMM150(I2C(1, scl=Pin("P15"), sda=Pin("P14")))

while True:
    print("magnetometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.magnet()))
    time.sleep_ms(100)

class bmm150.BMM150(bus: machine.I2C, cs: machine.Pin | None = None, address: int = 0x10, magnet_odr: int = 30)

构造一个 BMM150 实例,对芯片执行软复位,校验其芯片 ID,将其配置为 magnet_odr Hz 下的正常模式,并读取出厂微调寄存器。

bus

传感器所连接的、已配置好的 machine.I2C 总线。

cs

为 SPI 模式预留。必须保持为 None;当前尚未实现 SPI,传入非 I2C 总线会引发 ValueError

address

设备的 7 位 I2C 地址。默认为 0x10

magnet_odr

磁力计输出数据速率,单位为 Hz。必须为 2681015202530 之一;其他取值会引发 ValueError

magnet_raw() tuple[int, int, int, int]

轮询数据就绪标志,并以整数形式返回原始有符号读数 (x, y, z, hall),其中亚 LSB 位已被移出。如果在十次重试内仍无可用采样,则引发 OSError("Data not ready")

magnet() tuple[float, float, float]

通过 magnet_raw() 读取一个新采样,并返回补偿后的磁场向量 (x, y, z)。该补偿使用构造时读取的微调值,并与 Bosch 提供的参考 C 驱动程序保持一致。