Prekid spremnosti podataka
Što ovaj primjer prikazuje
Očitavanje polja tek kada BMM350 javi da je nova izmjera spremna. Senzor
pošalje impuls na svoj INT pin za svako novo očitanje, a vaša pločica čita
podatke kada primijeti impuls.
Primjer stvara I2C sabirnicu 0 sa SCL na GPIO 9 i SDA na GPIO 8, a očekuje
INT pin pločice na GPIO 5 (INT_PIN). Promijenite ove pinove prema onima koje
ste povezali.
INT je signal od 1,8 V izravno sa senzora. Pin na vašoj pločici mora
očitati 1,8 V kao logičku jedinicu.
Kod primjera
# FILE: bmm350-dataReadyInterrupt.py
# AUTHOR: Soldered Electronics
# BRIEF: Uses the BMM350's physical interrupt pin to know when a new
# magnetometer reading is ready, instead of polling the interrupt
# status register
# WORKS WITH: BMM350 Geomagnetic Sensor breakout: www.solde.red/333359
# LAST UPDATED: 2026-09-22
from bmm350 import BMM350, BMM350_OK, BMM350_PULSED, BMM350_ACTIVE_HIGH, BMM350_INTR_PUSH_PULL
from machine import I2C, Pin
# Hardware setup: connect the breakout board's INT pin to INT_PIN below
INT_PIN = 5
data_ready = False
def int_callback(pin):
global data_ready
data_ready = True
# 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!")
# Configure the interrupt pin as push/pull, active high, pulsed and mapped
# to the physical pin
sensor.configure_interrupt(BMM350_PULSED, BMM350_ACTIVE_HIGH, BMM350_INTR_PUSH_PULL, True)
# Enable the data-ready interrupt
sensor.enable_interrupt(True)
interrupt_pin = Pin(INT_PIN, Pin.IN)
interrupt_pin.irq(trigger=Pin.IRQ_RISING, handler=int_callback)
while True:
if data_ready:
data_ready = False
status = sensor.get_interrupt_status()
if status:
if sensor.get_sensor_data() == BMM350_OK:
print(
"X: {:.2f} uT\tY: {:.2f} uT\tZ: {:.2f} uT".format(
sensor.data.mag_x, sensor.data.mag_y, sensor.data.mag_z
)
)
else:
print("Failed to read sensor data:", sensor.status_string())
🔗Otvorite cijeli primjer
bmm350-dataReadyInterrupt.py na commitu 0995e8d
Ovaj primjer koristi i machine.I2C
(MicroPython referenca)
te machine.Pin s Pin.irq()
(MicroPython referenca),
koji dolaze s MicroPython firmwareom i nisu dio modula bmm350.
Očekivani rezultat: BMM350 connected!, zatim jedan redak za svaki prekid: X:,
Y: i Z:, svaki u uT s dvije decimale, odvojeni tabulatorima.
BMM350 connected!
X: 12.47 uT Y: -23.81 uT Z: -38.92 uT
X: 12.52 uT Y: -23.74 uT Z: -38.85 uT
X: 12.39 uT Y: -23.90 uT Z: -39.03 uT
X: 12.58 uT Y: -23.69 uT Z: -38.88 uT
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, uključuje sve osi i pokreće normalni način rada. Baca iznimku kada senzor ne odgovori ili odgovori drugi čip. Bez objekta i2c koristi I2C(0, scl=Pin(22), sda=Pin(21)) kada firmware javlja esp32, esp8266 ili naziv firmwarea jedne Soldered pločice, a na svakoj drugoj pločici baca iznimku.
ReturnsObjekt senzora.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
I2C | i2c | Inicijalizirani objekt machine.I2C. Neobavezan samo na pločicama koje modul prepoznaje (vidi konstruktor iznad). |
int | address | I2C adresa. BMM350_I2C_ADSEL_SET_LOW (0x14, zadano) ili BMM350_I2C_ADSEL_SET_HIGH (0x15). |
configure_interrupt(latching, polarity, drive, map_to_pin)returns NoneKonfigurira ponašanje INT pina senzora. Ne uključuje sam prekid; za to pozovite enable_interrupt().
ReturnsRezultat se sprema u sensor.status.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | latching | BMM350_PULSED ili BMM350_LATCHED. |
int | polarity | BMM350_ACTIVE_LOW ili BMM350_ACTIVE_HIGH. |
int | drive | BMM350_INTR_OPEN_DRAIN ili BMM350_INTR_PUSH_PULL. |
bool | map_to_pin | True za usmjeravanje prekida spremnosti podataka na INT pin, False za njegovo uklanjanje. |
enable_interrupt(enable)returns NoneUključuje ili isključuje prekid spremnosti podataka.
ReturnsRezultat se sprema u sensor.status.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
bool | enable | True za uključivanje, False za isključivanje. |
get_interrupt_status()returns intČita status prekida spremnosti podataka.
Returns1 kada su novi podaci spremni, 0 kada nisu, None kod I2C pogreške.
get_sensor_data()returns intČita novu kompenziranu izmjeru u sensor.data.mag_x, sensor.data.mag_y i sensor.data.mag_z (µT) te sensor.data.temperature (°C).
ReturnsBMM350_OK (0) kod uspjeha, inače kôd pogreške.
status_string()returns strOpisuje trenutni kôd sensor.status.
ReturnsOpis ili prazan niz kada je status BMM350_OK.
Sve zajedno
configure_interrupt() postavlja INT kao impulsni izlaz, aktivan u visokom stanju, push-pull
i usmjerava prekid spremnosti podataka na njega, a enable_interrupt(True) uključuje
prekid. Pin.irq() poziva int_callback() pri svakom rastućem bridu
INT-a, a povratna funkcija samo postavlja zastavicu. Petlja uoči zastavicu, provjeri
get_interrupt_status() i pročita podatke pomoću get_sensor_data().