bmm150 — Magnetômetro de 3 eixos BMM150

Driver para o sensor geomagnético de 3 eixos BMM150 da Bosch via I2C. Na construção, o driver faz um reset por software do dispositivo, coloca-o em modo de operação normal na ODR solicitada e lê os registradores de trim usados pelas equações de compensação da Bosch para converter leituras brutas em valores de campo magnético calibrados.

Nota

O modo SPI não é suportado por este driver; passar um barramento não-I2C gera ValueError.

Exemplo:

import time
from machine import Pin, I2C
from bmm150 import BMM150

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

while True:
    print("magnetometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.magnet()))
    time.sleep_ms(100)

Classes

class bmm150.BMM150(bus: machine.I2C, cs: machine.Pin | None = None, address: int = 0x10, magnet_odr: int = 30)

Constrói uma instância de BMM150, faz um reset por software do chip, verifica seu ID, configura-o para modo normal a magnet_odr Hz e lê os registradores de trim de fábrica.

bus

Um barramento machine.I2C configurado ao qual o sensor está conectado.

cs

Reservado para o modo SPI. Deve permanecer como None; o SPI não está atualmente implementado e fornecer um barramento não-I2C gera ValueError.

address

Endereço I2C de 7 bits do dispositivo. O padrão é 0x10.

magnet_odr

Taxa de dados de saída do magnetômetro em Hz. Deve ser um dos valores 2, 6, 8, 10, 15, 20, 25 ou 30; qualquer outro valor gera ValueError.

magnet_raw() tuple[int, int, int, int]

Consulta a flag de dados prontos e retorna as leituras brutas com sinal (x, y, z, hall) como inteiros, com os bits sub-LSB já deslocados para fora. Gera OSError("Data not ready") se nenhuma amostra ficar disponível dentro de dez tentativas.

magnet() tuple[float, float, float]

Lê uma nova amostra via magnet_raw() e retorna o vetor de campo magnético compensado (x, y, z). A compensação usa os valores de trim lidos na construção e corresponde ao driver de referência em C fornecido pela Bosch.