Skip to main content

Dva senzora

Što ovaj primjer prikazuje​

Primjer modula electrochemical-twoSensors.py stvara dva objekta senzora na jednoj I2C sabirnici, svaki sa svojom adresom i pinom, pokreće oba i ispisuje obje koncentracije u ppb svakih 2,5 s. Senzor 1 stvara se s adc_addr=0x4A i config_pin=25, a senzor 2 s adc_addr=0x49 i config_pin=32.

Oba senzora koriste SENSOR_O3, predložak za ćeliju za ozon. Modul izračunava svako očitanje iz postavki osjetljivosti i pojačanja tog predloška; predložak za ćeliju za klor na ovoj pločici je SENSOR_CL2.

Primjer otvara I2C sabirnicu 0 sa SCL na pinu 22 i SDA na pinu 21. Promijenite ih prema svojoj pločici.

Kôd primjera​

# FILE: electrochemical-twoSensors.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Two O3 sensor PPB reading example using two breakouts on one I2C bus.
# LAST UPDATED: 2026-05-21

# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>25 (GPIO pin, required for I2C configuration)
#
# Qwiic------------------------>Qwiic (same bus)
# LMPEN------------------------>32 (GPIO pin, required for I2C configuration)
#
# Set different ADC I2C addresses on each breakout using the address jumpers.
# Both LMP91000 chips share address 0x48 — the LMPEN pin selects which one
# is active during configuration, so a GPIO pin is required for each sensor.

from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3

# Initialize shared I2C bus
i2c = I2C(0, scl=Pin(22), sda=Pin(21))

# Sensor 1: ADC address 0x4A, LMPEN on pin 25
sensor1 = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x4A, config_pin=25)

# Sensor 2: ADC address 0x49, LMPEN on pin 32
sensor2 = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x49, config_pin=32)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Two Sensors Example")

if not sensor1.begin():
print("ERROR: Can't init sensor 1! Check connections!")
while True:
time.sleep_ms(100)

print("Sensor 1 initialized successfully!")

if not sensor2.begin():
print("ERROR: Can't init sensor 2! Check connections!")
while True:
time.sleep_ms(100)

print("Sensor 2 initialized successfully!")

# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading1 = sensor1.getPPB()
reading2 = sensor2.getPPB()

print("Sensor 1 reading: {:.5f} PPB".format(reading1))
print("Sensor 2 reading: {:.5f} PPB".format(reading2))

time.sleep_ms(2500)

🔗Otvorite cjeloviti primjer

Examples/electrochemical-twoSensors.py u commitu 623e1e6

→

Komentari u primjeru povezuju LMPEN svake pločice na jedan GPIO i postavljaju obje adrese pomoću adresnih jumpera. Na ovoj pločici otpornik od 10 kΩ drži LMPEN na niskoj razini i spojen je na ATtiny404, pa ga ostavite nespojenim, a adresa same pločice postavlja se sklopkom ADDRESS (pogledajte Detalje o hardveru).

Očekivani rezultat:

ShellMicroPython
Electrochemical Gas Sensor - Two Sensors Example
Sensor 1 initialized successfully!
Sensor 2 initialized successfully!

Zatim svakih 2,5 s dva retka: Sensor 1 reading: i Sensor 2 reading: , a iza svakog koncentracija tog senzora u ppb s pet decimala i PPB. Ako begin() nekog senzora ne uspije, skripta ispisuje ERROR: Can't init sensor 1! Check connections! (ili sensor 2) i zaustavlja se.

Korištene funkcije​

ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensor

Stvara objekt senzora. Preko I2C-a ništa se ne šalje do poziva begin(). Primjer stvara dva objekta, oba na istom I2C objektu.

ReturnsObjekt senzora.

Parametri

TipNazivOpis
SensorConfigsensor_typePredložak ćelije. Primjer za oba senzora prosljeđuje SENSOR_O3; ćelija SGX-4CL2 na ovoj pločici ima predložak SENSOR_CL2.
I2Ci2cGotov objekt machine.I2C; primjer isti objekt prosljeđuje objema. Ako se izostavi, modul stvara I2C(0, scl=Pin(22), sda=Pin(21)) na portu esp32 i na jednoj drugoj pločici koju prepoznaje po nazivu (i ondje su pinovi 22 i 21); na esp8266 stvara I2C(scl=Pin(5), sda=Pin(4)); na bilo kojoj drugoj pločici javlja grešku Board not recognized, please pass an I2C object manually.
intadc_addrI2C adresa, 0x49 ako se izostavi; primjer prosljeđuje 0x4A i 0x49. Za adresu od 0x30 do 0x37, raspon sklopke ADDRESS na ovoj pločici, begin() komunicira s ATtiny404 na pločici; za svaku drugu adresu traži ADS1115 na toj adresi i LMP91000 na 0x48 na sabirnici koju proslijedite.
intconfig_pinGPIO za ulaz MENB čipa LMP91000: modul ga postavlja na nisku razinu dok izravno konfigurira LMP91000, a inače na visoku; primjer prosljeđuje 25 i 32. None ako se izostavi. Ne koristi se za adrese od 0x30 do 0x37.
sensor.begin()returns bool

Provjerava odgovara li pločica, postavlja ADC pojačanje i brzinu podataka iz predloška te konfigurira LMP91000 postavkama iz predloška. Primjer ga poziva jednom za svaki senzor prije očitavanja.

ReturnsTrue ako su svi koraci uspjeli, inače False.

sensor.getPPB()returns float

Izvodi jedno očitavanje i pretvara ga u ppb: getPPM() puta 1000. getPPM() oduzima unutarnji nulti napon, dodaje nultu kalibraciju, dijeli s pojačanjem pojačala i osjetljivošću predloška te za rezultat ispod nule vraća 0.0.

ReturnsKoncentracija plina u ppb.

Ovaj primjer koristi i I2C i Pin iz MicroPythonova modula machine te time.sleep_ms(), koji nisu dio ove biblioteke, nego dolaze uz sam MicroPython.

Sve zajedno​

Svaki objekt senzora čuva vlastiti predložak, adresu i pin, pa petlja očitava jedan za drugim istom funkcijom.