Samotestiranje
Što ovaj primjer prikazuje
Provjera rade li X i Y kanali senzora pomoću ugrađenog samotestiranja senzora BMM350. Senzor generira interno polje od oko 130 µT na jednoj osi istodobno i mjeri razliku. Kanal prolazi test kada je razlika najmanje 130 µT. Skripta izvodi test jednom.
Primjer stvara I2C sabirnicu 0 sa SCL-om na GPIO 9 i SDA-om na GPIO 8. Promijenite ove pinove u one koje ste povezali.
Kôd primjera
# 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())
🔗Otvorite cjeloviti primjer
bmm350-selfTest.py u commitu 0995e8d
Ovaj primjer koristi i machine.I2C
(MicroPython referenca)
i machine.Pin
(MicroPython referenca),
koji dolaze s MicroPython firmwareom i nisu dio modula bmm350.
Očekivani rezultat: BMM350 connected!, zatim dva retka s rezultatom, X axis field:
i Y axis field:, svaki s razlikom polja u uT i oznakom PASS ili
FAIL.
BMM350 connected!
X axis field: 146.83 uT -> PASS
Y axis field: 148.27 uT -> PASS
Ako se test ne može izvesti, skripta umjesto toga ispisuje Self-test failed to run: i
razlog.
Korištene funkcije
BMM350(i2c=None, address=BMM350_I2C_ADSEL_SET_LOW)returns BMM350Konstruktor. Resetira senzor, provjerava njegov ID čipa, učitava njegove kalibracijske podatke, postavlja 100 Hz s usrednjavanjem 4 uzorka, omogućuje sve osi i pokreće normalni način rada. Podiže iznimku kada senzor ne odgovori ili odgovori drugi čip. Bez objekta i2c koristi I2C(0, scl=Pin(22), sda=Pin(21)) kada firmware javlja da je esp32, esp8266 ili naziv vlastitog firmwarea jedne Soldered pločice, a na svakoj drugoj pločici podiže iznimku.
ReturnsObjekt senzora.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
I2C | i2c | Inicijalizirani objekt machine.I2C. Neobavezan samo na pločicama koje modul prepoznaje (pogledajte konstruktor gore). |
int | address | I2C adresa. BMM350_I2C_ADSEL_SET_LOW (0x14, zadano) ili BMM350_I2C_ADSEL_SET_HIGH (0x15). |
perform_self_test()returns dictIzvodi ugrađeno samotestiranje senzora na X i Y osi. Ako je senzor prije bio u normalnom načinu rada, nakon toga se vraća u normalni način rada.
ReturnsRječnik (dict) s out_ust_x i out_ust_y, razlikom polja na svakoj osi u µT (130,0 ili više znači da je test prošao), ili None kod I2C pogreške.
status_string()returns strOpisuje trenutni kôd sensor.status.
ReturnsOpis ili prazan niz kada je status BMM350_OK.
Sve zajedno
Konstruktor ostavlja senzor u normalnom načinu rada, pa ga perform_self_test()
vraća u normalni način rada kada test završi. Skripta uspoređuje
out_ust_x i out_ust_y s SELF_TEST_THRESHOLD_UT (130.0) i ispisuje
PASS ili FAIL za svaku os.