bmi270 — BMI270 IMU de 6 eixos

Driver para a unidade de medição inercial de baixo consumo BMI270 da Bosch, com 6 eixos (acelerómetro de 3 eixos e giroscópio de 3 eixos), via I2C. O driver executa a sequência de inicialização completa do BMI270 na construção — reset por software, desativação do modo de poupança de energia, carregamento do blob de configuração e verificação de estado — antes de configurar as taxas de dados de saída e os intervalos de escala total solicitados.

A classe pode ser opcionalmente ligada a uma instância externa do magnetómetro bmm150.BMM150, para que os utilizadores possam tratar um par BMI270 + BMM150 como um único dispositivo de 9 eixos através do método magnet().

Nota

O modo SPI não é suportado por este driver; passar um bus que não seja I2C gera ValueError.

Exemplo:

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)

Classes

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)

Constrói uma instância BMI270 e executa a sequência completa de inicialização de carregamento de configuração. Gera OSError se o ID do chip não corresponder ou se a sequência de carregamento falhar.

bus

Um bus machine.I2C configurado ao qual o sensor está ligado.

cs

Reservado para o modo SPI. Deve ser deixado como None; o SPI não está atualmente implementado e fornecer um bus que não seja I2C gera ValueError.

address

Endereço I2C de 7 bits do dispositivo. Por defeito é 0x68; algumas placas ligam o pino SDO a nível alto, o que seleciona 0x69.

gyro_odr

Taxa de dados de saída do giroscópio em Hz. Deve ser um de 0.78, 1.5, 3.1, 6.25, 12.5, 25, 50, 100, 200, 400, 800 ou 1200.

gyro_scale

Intervalo de escala total do giroscópio em graus por segundo. Deve ser um de 125, 250, 500, 1000 ou 2000.

accel_odr

Taxa de dados de saída do acelerómetro em Hz. Mesmo conjunto de valores que gyro_odr.

accel_scale

Intervalo de escala total do acelerómetro em g. Deve ser um de 2, 4, 8 ou 16.

bmm_magnet

Instância opcional de bmm150.BMM150. Quando fornecida, o método magnet() delega para ela; caso contrário, magnet() retorna zeros.

reset() None

Emite o comando de reset por software do BMI270. Após chamar este método, o dispositivo deve ser reinicializado antes de ser utilizado novamente.

gyro() tuple[float, float, float]

Retorna o vetor do giroscópio (x, y, z) em graus por segundo, escalado de acordo com gyro_scale.

accel() tuple[float, float, float]

Retorna o vetor de aceleração (x, y, z) em unidades de gravidade padrão (1 g = 9,81 m/s²), escalado de acordo com accel_scale.

magnet() tuple[float, float, float]

Se um bmm_magnet foi fornecido na construção, retorna a leitura mais recente do magnetómetro desse dispositivo. Caso contrário, retorna (0.0, 0.0, 0.0).