Zum Hauptinhalt springen

Zwei Sensoren

Was dieses Beispiel zeigt​

Das Beispiel electrochemical-twoSensors.py des Moduls erstellt zwei Sensorobjekte an einem I2C-Bus, jedes mit eigener Adresse und eigenem Pin, startet beide und gibt beide Konzentrationen alle 2,5 s in ppb aus. Sensor 1 wird mit adc_addr=0x4A und config_pin=25 erstellt, Sensor 2 mit adc_addr=0x49 und config_pin=32.

Beide Sensoren verwenden SENSOR_O3, das Preset für die Ozonzelle. Das Modul berechnet jeden Messwert aus den Empfindlichkeits- und Verstärkungseinstellungen des Presets; das Preset für die Chlorzelle dieses Boards ist SENSOR_CL2.

Das Beispiel öffnet I2C-Bus 0 mit SCL an Pin 22 und SDA an Pin 21. Ändern Sie diese Pins passend zu Ihrem Board.

Der Beispielcode​

# 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)

🔗Vollständiges Beispiel öffnen

Examples/electrochemical-twoSensors.py im Commit 623e1e6

→

Die Kommentare im Beispiel verbinden das LMPEN jedes Boards mit einem GPIO und legen die beiden Adressen mit Adress-Jumpern fest. Bei diesem Board hält ein 10-kΩ-Widerstand LMPEN auf Low und es ist mit dem ATtiny404 verbunden, sodass Sie es unverbunden lassen, und die eigene Adresse des Boards wird mit dem ADDRESS-Schalter festgelegt (siehe Hardware-Details).

Erwartetes Ergebnis:

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

Danach alle 2,5 s zwei Zeilen: Sensor 1 reading: und Sensor 2 reading: , jeweils gefolgt von der Konzentration dieses Sensors in ppb mit fünf Nachkommastellen und PPB. Schlägt das begin() eines Sensors fehl, gibt das Skript ERROR: Can't init sensor 1! Check connections! (oder sensor 2) aus und stoppt.

Verwendete Funktionen​

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

Erstellt ein Sensorobjekt. Über I2C wird nichts gesendet, bis begin() aufgerufen wird. Das Beispiel erstellt zwei, beide am selben I2C-Objekt.

ReturnsDas Sensorobjekt.

Parameter

TypNameBeschreibung
SensorConfigsensor_typeDas Zellen-Preset. Das Beispiel übergibt für beide SENSOR_O3; die SGX-4CL2-Zelle dieses Boards hat das Preset SENSOR_CL2.
I2Ci2cEin fertiges machine.I2C-Objekt; das Beispiel übergibt beiden dasselbe. Wird es weggelassen, erstellt das Modul I2C(0, scl=Pin(22), sda=Pin(21)) beim Port esp32 und bei dem einen weiteren Board, das es an seinem Namen erkennt (dort ebenfalls Pins 22 und 21); bei esp8266 I2C(scl=Pin(5), sda=Pin(4)); bei jedem anderen Board löst es Board not recognized, please pass an I2C object manually aus.
intadc_addrDie I2C-Adresse, 0x49, wenn weggelassen; das Beispiel übergibt 0x4A und 0x49. Bei einer Adresse von 0x30 bis 0x37, dem Bereich des ADDRESS-Schalters dieses Boards, spricht begin() den ATtiny404 des Boards an; bei jeder anderen Adresse sucht es an dieser Adresse einen ADS1115 und den LMP91000 unter 0x48 an dem übergebenen Bus.
intconfig_pinEin GPIO für den MENB-Eingang des LMP91000: Das Modul setzt ihn auf Low, solange es den LMP91000 direkt konfiguriert, sonst auf High; das Beispiel übergibt 25 und 32. None, wenn weggelassen. Bei den Adressen 0x30 bis 0x37 ungenutzt.
sensor.begin()returns bool

Prüft, ob das Board antwortet, stellt Gain und Datenrate des ADC gemäß Preset ein und konfiguriert den LMP91000 mit den Einstellungen des Presets. Das Beispiel ruft sie vor dem Lesen einmal für jeden Sensor auf.

ReturnsTrue, wenn jeder Schritt erfolgreich war, sonst False.

sensor.getPPB()returns float

Nimmt einen Messwert auf und rechnet ihn in ppb um: getPPM() mal 1000. getPPM() zieht die interne Nullspannung ab, addiert die Nullpunktkalibrierung, teilt durch die Verstärkung des Verstärkers und die Empfindlichkeit des Presets und gibt für ein Ergebnis unter null 0.0 zurück.

ReturnsDie Gaskonzentration in ppb.

Dieses Beispiel verwendet außerdem I2C und Pin aus dem machine-Modul von MicroPython sowie time.sleep_ms(); diese gehören nicht zu dieser Bibliothek, sondern sind Teil von MicroPython selbst.

Alles zusammen​

Jedes Sensorobjekt behält sein eigenes Preset, seine eigene Adresse und seinen eigenen Pin, daher liest die Schleife sie nacheinander mit derselben Funktion aus.