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:
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 ElectrochemicalGasSensorStvara 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
| Tip | Naziv | Opis |
|---|---|---|
SensorConfig | sensor_type | Predložak ćelije. Primjer za oba senzora prosljeđuje SENSOR_O3; ćelija SGX-4CL2 na ovoj pločici ima predložak SENSOR_CL2. |
I2C | i2c | Gotov 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. |
int | adc_addr | I2C 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. |
int | config_pin | GPIO 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 boolProvjerava 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 floatIzvodi 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.