bmm150 — BMM150 3축 자력계

I2C를 통해 동작하는 Bosch BMM150 3축 지자기 센서용 드라이버입니다. 객체 생성 시 드라이버는 장치를 소프트 리셋하고, 요청된 ODR로 정상 동작 모드로 전환한 뒤, 원시 측정값을 보정된 자기장 값으로 변환하는 Bosch 보정 방정식에서 사용하는 트림 레지스터를 읽습니다.

참고

이 드라이버는 SPI 모드를 지원하지 않습니다. I2C가 아닌 버스를 전달하면 ValueError가 발생합니다.

예제:

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)

클래스

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

BMM150 인스턴스를 생성하고, 칩을 소프트 리셋하고, 칩 ID를 검증하고, magnet_odr Hz의 정상 모드로 구성한 뒤 공장 트림 레지스터를 읽습니다.

bus

센서가 연결된, 구성이 완료된 machine.I2C 버스입니다.

cs

SPI 모드용으로 예약되어 있습니다. None으로 두어야 합니다. SPI는 현재 구현되어 있지 않으며 I2C가 아닌 버스를 전달하면 ValueError가 발생합니다.

address

장치의 7비트 I2C 주소입니다. 기본값은 0x10입니다.

magnet_odr

자력계 출력 데이터 레이트(Hz)입니다. 2, 6, 8, 10, 15, 20, 25, 30 중 하나여야 하며, 그 외의 값은 ValueError를 발생시킵니다.

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

데이터 준비 플래그를 폴링하고 원시 부호 있는 (x, y, z, hall) 측정값을 정수로 반환하며, 서브 LSB 비트는 이미 시프트되어 제거되어 있습니다. 10번의 재시도 내에 샘플을 사용할 수 없으면 OSError("Data not ready")를 발생시킵니다.

magnet() tuple[float, float, float]

magnet_raw()를 통해 새 샘플을 읽고 보정된 자기장 벡터 (x, y, z)를 반환합니다. 보정에는 객체 생성 시 읽은 트림 값을 사용하며, Bosch에서 제공하는 참조 C 드라이버와 일치합니다.