Dva senzora na jednoj sabirnici
Što ovaj primjer prikazuje
Primjer modula electrochemical-twoSensors.py čita dvije pločice na istoj I2C sabirnici. Stvara po jedan objekt senzora za svaku pločicu, pokreće oba i ispisuje oba očitanja u ppb svakih 2,5 sekunde.
Primjer stvara sensor1 s adc_addr=0x4A i config_pin=25 te sensor2 s adc_addr=0x49 i config_pin=32, oba s predloškom modula za ozon, SENSOR_O3. SENSOR_NH3 je predložak za ćeliju ove pločice, a pretvorba u ppm koristi osjetljivost predloška (-1000 nA/ppm za SENSOR_O3, 40 nA/ppm za SENSOR_NH3). Zbog toga očitanja iz primjera u isporučenom obliku nisu vrijednosti amonijaka. Za očitavanje amonijaka promijenite SENSOR_O3 u SENSOR_NH3 u retku s uvozom i u dva retka u kojima se stvaraju senzori. Primjer otvara I2C sabirnicu 0 na pinu 22 (SCL) i pinu 21 (SDA).
Modul komunicira s ATtiny404 mostom na pločici kada je adc_addr od 0x30 do 0x37; s bilo kojom drugom vrijednošću, poput 0x4A i 0x49 iz primjera, komunicira izravno s ADS1115 na toj adresi. Na ovoj pločici ADS1115 je na pinovima SDA2/SCL2 headera, do kojih Qwiic konektori ne dopiru, pa se ovaj primjer ne izvodi preko Qwiic kabela. Umjesto toga spojite kontroler na header svake pločice: 3,3 V na 3V3, GND na GND, SDA pin primjera (21) na SDA2 i njegov SCL pin (22) na SCL2. JP2 do JP4 postavljaju adresu ADS1115 svake pločice, kako opisuje Pojedinosti o hardveru. Primjer se tada izvodi onako kako je napisan, bez promjene adresa.
Dijagram spajanja u komentarima primjera spaja LMPEN svake pločice na GPIO pin (25 i 32), jer dva LMP91000 čipa na jednoj sabirnici dijele jednu adresu. Na ovoj pločici LMPEN ostavite nespojenim: otpornik od 10 kΩ već povlači LMPEN na GND, a na njega je spojen i ATtiny404.
Kod 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 cijeli primjer
electrochemical-twoSensors.py u commitu 623e1e6
Thonny shell prikazuje:
Electrochemical Gas Sensor - Two Sensors Example
Sensor 1 initialized successfully!
Sensor 2 initialized successfully!
Zatim svake 2,5 sekunde slijede dva retka, Sensor 1 reading: i Sensor 2 reading:, svaki u ppb s pet decimala.
Ako poziv begin() vrati False, primjer umjesto toga 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 jedan objekt senzora. Stvorite po jedan za svaku pločicu, svaki s vlastitim adc_addr. adc_addr određuje kako begin() komunicira s pločicom: od 0x30 do 0x37 koristi protokol ATtiny mosta; svaka druga vrijednost koristi se kao vlastita I2C adresa ADC-a.
ReturnsObjekt senzora.
Parametri
| Parametar | Tip | Opis |
|---|---|---|
sensor_type | SensorConfig | Predložak ćelije. SENSOR_NH3 je predložak za ćeliju ove pločice. |
i2c | I2C | Vaš I2C objekt. Oba senzora dijele isti. |
adc_addr | int | Adresa na kojoj modul komunicira s tom pločicom: adresa mosta od 0x30 do 0x37 ili, u suprotnom, adresa ADS1115. Zadano 0x49. Primjer prosljeđuje ADS1115 adrese 0x4A za senzor 1 i 0x49 za senzor 2. Vlastita adresa ove pločice je adresa njezina mosta, koja se prekidačem ADDRESS postavlja od 0x30 do 0x37. |
config_pin | int ili None | Broj GPIO pina koji modul postavlja u nisko stanje dok konfigurira LMP91000 te pločice, a nakon toga u visoko, kada je adc_addr izvan raspona od 0x30 do 0x37. Primjer prosljeđuje 25 i 32. Zadano None. Ne koristi se od 0x30 do 0x37. |
begin()returns boolS adresom od 0x30 do 0x37 provjerava odgovara li most te pločice i šalje mu postavke ADC-a i analognog ulaznog stupnja iz predloška. S bilo kojom drugom adresom izravno pokreće ADS1115 na toj adresi i konfigurira LMP91000. Pozovite ga jednom za svaki senzor prije bilo kojeg očitanja.
ReturnsTrue kada su svi koraci uspjeli. False kada most nije odgovorio s OK unutar 500 ms ili je prijavio pogrešku, kada nije uspjelo pokretanje ADS1115 ili kada nije uspjela konfiguracija analognog ulaznog stupnja.
getPPB()returns floatUzima jedno očitanje s tog senzora i vraća ga u dijelovima na milijardu (ppb). Rezultat manji od nule vraća se kao 0.
ReturnsgetPPM() pomnoženo s 1000.
Sastavljanje cjeline
Svakoj pločici dodijelite njezinu adresu, stvorite po jedan objekt senzora za svaku pločicu na zajedničkom I2C objektu i pozovite begin() na svakom. Ako jedan begin() vrati False, primjer imenuje taj senzor i zaustavlja se.