Selbsttest
Was dieses Beispiel zeigt
Prüfung, ob die X- und Y-Kanäle des Sensors funktionieren, mit dem integrierten Selbsttest des BMM350. Der Sensor erzeugt intern nacheinander auf jeweils einer Achse ein Feld von etwa 130 µT und misst die Differenz. Ein Kanal besteht den Test, wenn die Differenz mindestens 130 µT beträgt. Das Skript führt den Test einmal aus.
Das Beispiel erstellt den I2C-Bus 0 mit SCL an GPIO 9 und SDA an GPIO 8. Ändern Sie diese Pins auf die Pins, die Sie verdrahtet haben.
Der Beispielcode
# FILE: bmm350-selfTest.py
# AUTHOR: Soldered Electronics
# BRIEF: Runs the BMM350's built-in self-test. The self-test generates an
# internal ~130 uT magnetic field on the X and Y channels and reports
# the resulting field difference; per the datasheet (section 5.1.6),
# a channel is considered working if its reported value is >= 130 uT.
# 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
# Minimum self-test field difference to consider a channel passing,
# per the datasheet's self-test section
SELF_TEST_THRESHOLD_UT = 130.0
# 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!")
# Run the self-test. The sensor automatically returns to normal mode
# afterwards since the constructor already left it there.
result = sensor.perform_self_test()
if result is not None:
x_pass = result["out_ust_x"] >= SELF_TEST_THRESHOLD_UT
y_pass = result["out_ust_y"] >= SELF_TEST_THRESHOLD_UT
print("X axis field: {:.2f} uT -> {}".format(result["out_ust_x"], "PASS" if x_pass else "FAIL"))
print("Y axis field: {:.2f} uT -> {}".format(result["out_ust_y"], "PASS" if y_pass else "FAIL"))
else:
print("Self-test failed to run:", sensor.status_string())
🔗Vollständiges Beispiel öffnen
bmm350-selfTest.py im Commit 0995e8d
Dieses Beispiel verwendet außerdem machine.I2C
(MicroPython-Referenz)
und machine.Pin
(MicroPython-Referenz),
die zur MicroPython-Firmware gehören und nicht Teil des Moduls bmm350 sind.
Erwartetes Ergebnis: BMM350 connected!, danach zwei Ergebniszeilen, X axis field:
und Y axis field:, jeweils mit der Felddifferenz in uT und PASS oder
FAIL.
BMM350 connected!
X axis field: 146.83 uT -> PASS
Y axis field: 148.27 uT -> PASS
Wenn der Test nicht ausgeführt werden kann, gibt das Skript stattdessen Self-test failed to run: und den Grund aus.
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 Normalmodus. Löst eine Exception aus, wenn der Sensor nicht antwortet oder ein anderer Chip antwortet. Ohne ein i2c-Objekt verwendet er I2C(0, scl=Pin(22), sda=Pin(21)), wenn sich die Firmware als esp32, esp8266 oder mit dem Firmware-Namen eines Soldered-Boards meldet, und löst auf jedem anderen Board eine Exception aus.
ReturnsDas Sensorobjekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Ein initialisiertes machine.I2C-Objekt. Nur auf den Boards optional, die das Modul erkennt (siehe Konstruktor oben). |
int | address | I2C-Adresse. BMM350_I2C_ADSEL_SET_LOW (0x14, Standard) oder BMM350_I2C_ADSEL_SET_HIGH (0x15). |
perform_self_test()returns dictFührt den integrierten Selbsttest des Sensors auf der X- und Y-Achse aus. War der Sensor zuvor im Normalmodus, kehrt er danach in den Normalmodus zurück.
ReturnsEin dict mit out_ust_x und out_ust_y, der Felddifferenz auf jeder Achse in µT (130,0 oder mehr gilt als bestanden), oder None bei einem I2C-Fehler.
status_string()returns strBeschreibt den aktuellen Statuscode sensor.status.
ReturnsDie Beschreibung oder ein leerer String, wenn der Status BMM350_OK ist.
Zusammenfassung
Der Konstruktor versetzt den Sensor in den Normalmodus, daher
setzt perform_self_test() ihn am Ende des Tests wieder in den Normalmodus zurück. Das Skript vergleicht
out_ust_x und out_ust_y mit SELF_TEST_THRESHOLD_UT (130.0) und gibt
für jede Achse PASS oder FAIL aus.