bmi270 — 6-осевой IMU BMI270

Драйвер для маломощного 6-осевого инерциального измерительного модуля Bosch BMI270 (3-осевой акселерометр плюс 3-осевой гироскоп) через I2C. При создании драйвер выполняет полную последовательность инициализации BMI270 — программный сброс, отключение режима энергосбережения, загрузку конфигурационного блока и проверку статуса — перед настройкой запрошенных частот выходных данных и диапазонов полной шкалы.

Класс может быть опционально связан с внешним экземпляром магнитометра bmm150.BMM150, чтобы вызывающий код мог рассматривать пару BMI270 + BMM150 как единое 9-осевое устройство через метод magnet().

Примечание

Режим 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 и выполняет полную последовательность инициализации с загрузкой конфигурации. Вызывает OSError, если идентификатор чипа не совпадает или если последовательность загрузки завершается с ошибкой.

bus

Настроенная шина machine.I2C, к которой подключён датчик.

cs

Зарезервировано для режима SPI. Должно оставаться равным None; SPI в настоящее время не реализован, а передача шины, отличной от I2C, вызывает ValueError.

address

7-битный I2C-адрес устройства. По умолчанию 0x68; на некоторых платах вывод SDO подтянут к высокому уровню, что выбирает 0x69.

gyro_odr

Частота выходных данных гироскопа в Гц. Должна быть одним из значений: 0.78, 1.5, 3.1, 6.25, 12.5, 25, 50, 100, 200, 400, 800 или 1200.

gyro_scale

Диапазон полной шкалы гироскопа в градусах в секунду. Должен быть одним из значений: 125, 250, 500, 1000 или 2000.

accel_odr

Частота выходных данных акселерометра в Гц. Тот же набор значений, что и для gyro_odr.

accel_scale

Диапазон полной шкалы акселерометра в g. Должен быть одним из значений: 2, 4, 8 или 16.

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 м/с²), масштабированный в соответствии с accel_scale.

magnet() tuple[float, float, float]

Если при создании был указан bmm_magnet, возвращает последнее показание магнитометра с этого устройства. В противном случае возвращает (0.0, 0.0, 0.0).