bmi270 — IMU de 6 ejes BMI270

Controlador para la unidad de medición inercial de 6 ejes de bajo consumo Bosch BMI270 (acelerómetro de 3 ejes más giroscopio de 3 ejes) a través de I2C. El controlador realiza la secuencia completa de inicialización del BMI270 durante la construcción — reinicio por software, desactivación del ahorro de energía, carga del blob de configuración y verificación de estado — antes de configurar las tasas de datos de salida y los rangos de escala completa solicitados.

La clase puede vincularse opcionalmente a una instancia externa del magnetómetro bmm150.BMM150, de modo que quien la utilice pueda tratar un par BMI270 + BMM150 como un único dispositivo de 9 ejes mediante el método magnet().

Nota

Este controlador no admite el modo SPI; pasar un bus que no sea I2C genera un ValueError.

Ejemplo:

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)

Clases

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)

Construye una instancia de BMI270 y ejecuta la secuencia completa de inicialización con carga de configuración. Genera un OSError si el ID del chip no coincide o si la secuencia de carga falla.

bus

Un bus machine.I2C configurado al que está conectado el sensor.

cs

Reservado para el modo SPI. Debe dejarse como None; SPI no está implementado actualmente y proporcionar un bus que no sea I2C genera un ValueError.

address

Dirección I2C de 7 bits del dispositivo. El valor predeterminado es 0x68; algunas placas conectan el pin SDO a nivel alto, lo que selecciona 0x69.

gyro_odr

Tasa de datos de salida del giroscopio en Hz. Debe ser uno de los siguientes valores: 0.78, 1.5, 3.1, 6.25, 12.5, 25, 50, 100, 200, 400, 800 o 1200.

gyro_scale

Rango de escala completa del giroscopio en grados por segundo. Debe ser uno de los siguientes valores: 125, 250, 500, 1000 o 2000.

accel_odr

Tasa de datos de salida del acelerómetro en Hz. El mismo conjunto de valores que gyro_odr.

accel_scale

Rango de escala completa del acelerómetro en g. Debe ser uno de los siguientes valores: 2, 4, 8 o 16.

bmm_magnet

Instancia opcional de bmm150.BMM150. Cuando se proporciona, el método magnet() delega en ella; de lo contrario, magnet() devuelve ceros.

reset() None

Emite el comando de reinicio por software del BMI270. Después de llamarlo, el dispositivo debe reinicializarse antes de seguir usándolo.

gyro() tuple[float, float, float]

Devuelve el vector del giroscopio (x, y, z) en grados por segundo, escalado según gyro_scale.

accel() tuple[float, float, float]

Devuelve el vector de aceleración (x, y, z) en unidades de gravedad estándar (1 g = 9.81 m/s²), escalado según accel_scale.

magnet() tuple[float, float, float]

Si se proporcionó un bmm_magnet durante la construcción, devuelve la última lectura del magnetómetro de ese dispositivo. De lo contrario, devuelve (0.0, 0.0, 0.0).