Grundlegende Messwerte
Was dieses Beispiel zeigt
Es liest das kompensierte Magnetfeld auf allen drei Achsen in µT sowie die Temperatur des Sensors in °C, in einer Schleife etwa alle 100 ms. Dies ist das einfachste Beispiel des Moduls und dasjenige, das die Kurzanleitung verwendet.
Das Beispiel erstellt den I2C-Bus 0 mit SCL an GPIO 9 und SDA an GPIO 8. Ändern Sie diese Pins auf diejenigen, die Sie verdrahtet haben.
Der Beispielcode
# FILE: bmm350-basicReadings.py
# AUTHOR: Soldered Electronics
# BRIEF: Reads compensated magnetometer and temperature data from the BMM350
# sensor over I2C
# WORKS WITH: BMM350 Geomagnetic Sensor breakout: www.solde.red/333359
# LAST UPDATED: 2026-09-22
from bmm350 import BMM350, BMM350_OK
from machine import I2C, Pin
import time
# Change these to match how your board wires I2C
i2c = I2C(0, scl=Pin(9), sda=Pin(8))
sensor = BMM350(i2c)
if sensor.status != BMM350_OK:
raise Exception("Failed to initialize BMM350: " + sensor.status_string())
print("BMM350 connected!")
while True:
if sensor.get_sensor_data() == BMM350_OK:
print(
"X: {:.2f} uT\tY: {:.2f} uT\tZ: {:.2f} uT\tTemperature: {:.2f} degC".format(
sensor.data.mag_x, sensor.data.mag_y, sensor.data.mag_z, sensor.data.temperature
)
)
else:
print("Failed to read sensor data:", sensor.status_string())
time.sleep_ms(100)
🔗Vollständiges Beispiel öffnen
bmm350-basicReadings.py im Commit 0995e8d
Dieses Beispiel verwendet außerdem machine.I2C
(MicroPython-Referenz),
machine.Pin
(MicroPython-Referenz)
und time.sleep_ms()
(MicroPython-Referenz),
die zur MicroPython-Firmware gehören und nicht Teil des Moduls bmm350
sind. time.sleep_ms() hält das Programm für die angegebene Anzahl von
Millisekunden an: time.sleep_ms(100) am Ende der Schleife bestimmt den Takt
von etwa einer Messung alle 100 ms.
Erwartetes Ergebnis: BMM350 connected!, dann eine Zeile pro Messung, etwa alle
100 ms: X:, Y: und Z:, jeweils in uT mit zwei Nachkommastellen, danach
Temperature: in degC, durch Tabulatoren getrennt.
BMM350 connected!
X: 12.84 uT Y: -23.51 uT Z: -38.27 uT Temperature: 24.62 degC
X: 12.91 uT Y: -23.47 uT Z: -38.32 uT Temperature: 24.62 degC
X: 12.79 uT Y: -23.56 uT Z: -38.21 uT Temperature: 24.64 degC
X: 12.88 uT Y: -23.49 uT Z: -38.30 uT Temperature: 24.64 degC
Schlägt ein Lesevorgang fehl, lautet die Zeile Failed to read sensor data:
und danach der Grund.
Verwendete Funktionen
BMM350(i2c=None, address=BMM350_I2C_ADSEL_SET_LOW)returns BMM350Konstruktor. Setzt den Sensor zurück, prüft seine Chip-ID, lädt seine Kalibrierdaten, stellt 100 Hz mit 4-fach-Mittelung ein, aktiviert alle Achsen und startet den Normalbetrieb. Löst eine Ausnahme aus, wenn der Sensor nicht antwortet oder ein anderer Chip antwortet. Ohne i2c-Objekt verwendet er I2C(0, scl=Pin(22), sda=Pin(21)), wenn sich die Firmware als esp32, esp8266 oder als der eigene Firmware-Name eines Soldered-Boards meldet, und löst auf jedem anderen Board eine Ausnahme aus.
ReturnsDas Sensorobjekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Ein initialisiertes machine.I2C-Objekt. Nur auf den Boards optional, die das Modul erkennt (siehe den Konstruktor oben). |
int | address | I2C-Adresse. BMM350_I2C_ADSEL_SET_LOW (0x14, Standard) oder BMM350_I2C_ADSEL_SET_HIGH (0x15). |
get_sensor_data()returns intLiest eine neue kompensierte Messung in sensor.data.mag_x, sensor.data.mag_y und sensor.data.mag_z (µT) sowie sensor.data.temperature (°C) ein.
ReturnsBMM350_OK (0) bei Erfolg, andernfalls ein Fehlercode.
status_string()returns strBeschreibt den aktuellen Code von sensor.status.
ReturnsDie Beschreibung oder ein leerer String, wenn der Status BMM350_OK ist.
Zusammengefügt
Der Konstruktor löst bereits eine Ausnahme aus, wenn der Sensor nicht erreichbar ist,
daher ist die Prüfung von sensor.status danach eine zweite Absicherung. Jeder Durchlauf der Schleife
ruft get_sensor_data() auf und gibt die drei Achsen und die Temperatur aus
sensor.data aus, wenn die Funktion BMM350_OK zurückgibt.
Für ein Board, bei dem JP5 auf 0x15 umgesetzt wurde, erstellen Sie den Sensor mit
BMM350(i2c, address=BMM350_I2C_ADSEL_SET_HIGH) und importieren diese Konstante aus
bmm350.