bmi270 — BMI270 6-осьовий IMU

Драйвер для Bosch BMI270 — малопотужного 6-осьового інерціального вимірювального блоку (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 підтягнутий до рівня High, що вибирає 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).