Skip to main content

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.

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

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

TipNazivOpis
I2Ci2cInicijalizirani objekt machine.I2C. Neobavezan samo na pločicama koje modul prepoznaje (vidi konstruktor iznad).
intaddressI2C adresa. BMM350_I2C_ADSEL_SET_LOW (0x14, zadano) ili BMM350_I2C_ADSEL_SET_HIGH (0x15).
configure_interrupt(latching, polarity, drive, map_to_pin)returns None

Konfigurira ponašanje INT pina senzora. Ne uključuje sam prekid; za to pozovite enable_interrupt().

ReturnsRezultat se sprema u sensor.status.

Parametri

TipNazivOpis
intlatchingBMM350_PULSED ili BMM350_LATCHED.
intpolarityBMM350_ACTIVE_LOW ili BMM350_ACTIVE_HIGH.
intdriveBMM350_INTR_OPEN_DRAIN ili BMM350_INTR_PUSH_PULL.
boolmap_to_pinTrue za usmjeravanje prekida spremnosti podataka na INT pin, False za njegovo uklanjanje.
enable_interrupt(enable)returns None

Uključuje ili isključuje prekid spremnosti podataka.

ReturnsRezultat se sprema u sensor.status.

Parametri

TipNazivOpis
boolenableTrue 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 str

Opisuje 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().