Skip to main content

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:

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

Stvara 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

ParametarTipOpis
sensor_typeSensorConfigPredložak ćelije. SENSOR_NH3 je predložak za ćeliju ove pločice.
i2cI2CVaš I2C objekt. Oba senzora dijele isti.
adc_addrintAdresa 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_pinint ili NoneBroj 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 bool

S 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 float

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