bmi270 --- BMI270 六轴 IMU

用于通过 I2C 操作 Bosch BMI270 低功耗六轴惯性测量单元(三轴加速度计加三轴陀螺仪)的驱动程序。该驱动在构造时执行完整的 BMI270 初始化序列——软复位、关闭省电模式、上传配置数据块(configuration blob)以及状态校验——随后再配置所请求的输出数据速率和满量程范围。

该类可选择性地与一个外部的 bmm150.BMM150 磁力计实例关联起来,从而使调用方能够通过 magnet() 方法将 BMI270 + BMM150 这一组合视为单个九轴设备。

备注

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

示例:

import time
from machine import Pin, I2C
from bmi270 import BMI270

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

while True:
    print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.accel()))
    print("Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.gyro()))
    time.sleep_ms(100)

class bmi270.BMI270(bus: machine.I2C, cs: machine.Pin | None = None, address: int = 0x68, gyro_odr: float = 100, gyro_scale: int = 2000, accel_odr: float = 100, accel_scale: int = 4, bmm_magnet: BMM150 | None = None)

构造一个 BMI270 实例并运行完整的配置加载初始化序列。如果芯片 ID 不匹配或加载序列失败,则引发 OSError

bus

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

cs

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

address

设备的 7 位 I2C 地址。默认为 0x68;某些电路板会将 SDO 引脚拉高,从而选择 0x69

gyro_odr

陀螺仪输出数据速率,单位为 Hz。必须为 0.781.53.16.2512.525501002004008001200 之一。

gyro_scale

陀螺仪满量程范围,单位为度每秒。必须为 12525050010002000 之一。

accel_odr

加速度计输出数据速率,单位为 Hz。取值范围与 gyro_odr 相同。

accel_scale

加速度计满量程范围,单位为 g。必须为 24816 之一。

bmm_magnet

可选的 bmm150.BMM150 实例。提供该实例时,magnet() 方法会委托给它;否则 magnet() 返回全零值。

reset() None

发出 BMI270 软复位命令。调用此命令后,设备必须重新初始化才能继续使用。

gyro() tuple[float, float, float]

返回陀螺仪向量 (x, y, z),单位为度每秒,并按照 gyro_scale 进行缩放。

accel() tuple[float, float, float]

返回加速度向量 (x, y, z),单位为标准重力加速度(1 g = 9.81 m/s²),并按照 accel_scale 进行缩放。

magnet() tuple[float, float, float]

如果在构造时提供了 bmm_magnet,则返回该设备的最新磁力计读数。否则返回 (0.0, 0.0, 0.0)