Zum Hauptinhalt springen

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.

ShellMicroPython
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 BMM350

Konstruktor. 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

TypNameBeschreibung
I2Ci2cEin initialisiertes machine.I2C-Objekt. Nur auf den Boards optional, die das Modul erkennt (siehe den Konstruktor oben).
intaddressI2C-Adresse. BMM350_I2C_ADSEL_SET_LOW (0x14, Standard) oder BMM350_I2C_ADSEL_SET_HIGH (0x15).
get_sensor_data()returns int

Liest 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 str

Beschreibt 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.