bmm150 --- BMM150 3-axis magnetometer

ไดรเวอร์สำหรับ sensor วัดสนามแม่เหล็ก 3 แกน Bosch BMM150 ผ่าน I2C เมื่อสร้างอินสแตนซ์ ไดรเวอร์จะ soft-reset อุปกรณ์, สลับเข้าสู่โหมดการทำงานปกติที่อัตรา ODR ที่กำหนด และอ่านรีจิสเตอร์ trim ที่ใช้โดยสมการการชดเชยของ Bosch เพื่อแปลงค่าดิบให้เป็นค่าสนามแม่เหล็กที่ผ่านการสอบเทียบแล้ว

Note

โหมด SPI ไม่ได้รับการสนับสนุนโดยไดรเวอร์นี้ การส่ง bus ที่ไม่ใช่ 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, soft-reset ชิป, ตรวจสอบรหัสชิป, กำหนดค่าให้ทำงานในโหมดปกติที่ magnet_odr Hz และอ่านรีจิสเตอร์ trim จากโรงงาน

bus

bus machine.I2C ที่กำหนดค่าแล้วซึ่ง sensor เชื่อมต่ออยู่

cs

สงวนไว้สำหรับโหมด SPI ต้องเป็น None; SPI ยังไม่ได้รับการรองรับในปัจจุบัน และการส่ง bus ที่ไม่ใช่ I2C จะเกิด ValueError

address

ที่อยู่ I2C 7 บิตของอุปกรณ์ ค่าเริ่มต้นคือ 0x10

magnet_odr

อัตราข้อมูลเอาต์พุตของ magnetometer ในหน่วย Hz ต้องเป็นหนึ่งในค่าต่อไปนี้: 2, 6, 8, 10, 15, 20, 25 หรือ 30; ค่าอื่น ๆ จะเกิด ValueError

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

ตรวจสอบ flag ความพร้อมของข้อมูลและคืนค่าการอ่าน (x, y, z, hall) แบบ signed ดิบในรูปแบบจำนวนเต็ม โดยบิตย่อยถูก shift ออกแล้ว จะเกิด OSError("Data not ready") หากไม่มีตัวอย่างพร้อมภายในสิบครั้งที่พยายาม

magnet() tuple[float, float, float]

อ่านตัวอย่างใหม่ผ่าน magnet_raw() และคืนค่าเวกเตอร์สนามแม่เหล็กที่ผ่านการชดเชยแล้ว (x, y, z) การชดเชยใช้ค่า trim ที่อ่านขณะสร้างอินสแตนซ์และตรงกับไดรเวอร์ C อ้างอิงที่จัดทำโดย Bosch