Zum Hauptinhalt springen

Single sensor

Was dieses Beispiel zeigt​

Das Beispiel electrochemical-singleSensor.py des Moduls erzeugt einen Sensor mit einem Preset und einem I2C-Objekt, sodass Adresse und Pin ihre Standardwerte behalten, und gibt die Konzentration in ppb alle 2,5 s aus. Ein Kommentar im Beispiel listet alle Presets des Moduls auf, darunter SENSOR_CL2.

Das Beispiel erzeugt den Sensor mit SENSOR_O3, dem 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 den 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-singleSensor.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Single sensor PPM reading example.
# LAST UPDATED: 2026-05-21

# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>GND or GPIO pin (see config_pin parameter below)

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

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

# Create sensor object - change SENSOR_O3 to match your sensor type
# Available types: SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3,
# SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c)

# If using a custom ADC address or a GPIO pin for LMP91000 MENB:
# sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x4B, config_pin=5)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Single Sensor Example")

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

print("Sensor initialized successfully!")

# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPB()

# If PPM is more relevant for your sensor, use:
# reading = sensor.getPPM()

print("Sensor reading: {:.5f} PPB".format(reading))

time.sleep_ms(2500)

🔗Vollständiges Beispiel öffnen

Examples/electrochemical-singleSensor.py im Commit 623e1e6

→

Der Anschlussplan im Beispiel verbindet LMPEN mit GND oder einem GPIO. Auf diesem Board hält ein 10-kΩ-Widerstand LMPEN auf Low und ist mit dem ATtiny404 verbunden, sodass Sie ihn unverbunden lassen (siehe die Pin-Tabelle unter Hardware-Details).

Erwartetes Ergebnis:

ShellMicroPython
Electrochemical Gas Sensor - Single Sensor Example
Sensor initialized successfully!

Danach folgt alle 2,5 s eine Zeile: Sensor reading: , die Konzentration in ppb mit fünf Nachkommastellen und PPB. Schlägt begin() fehl, gibt das Skript ERROR: Can't init the sensor! Check connections! aus und stoppt.

Verwendete Funktionen​

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

Erzeugt das Sensorobjekt. Bis begin() wird nichts an das Board gesendet.

ReturnsDas Sensorobjekt.

Parameter

TypNameBeschreibung
SensorConfigsensor_typeDas Zellen-Preset. Das Beispiel übergibt SENSOR_O3; die SGX-4CL2-Zelle dieses Boards hat das Preset SENSOR_CL2.
I2Ci2cEin fertiges machine.I2C-Objekt; das Beispiel übergibt eines. Wird es weggelassen, erzeugt das Modul I2C(0, scl=Pin(22), sda=Pin(21)) auf dem esp32-Port und auf dem einen anderen Board, das es anhand seines Namens erkennt (dort ebenfalls Pin 22 und 21); auf esp8266 I2C(scl=Pin(5), sda=Pin(4)); auf jedem anderen Board löst es Board not recognized, please pass an I2C object manually aus.
intadc_addrDie I2C-Adresse, bei Weglassen 0x49, wie im Beispiel. Bei einer Adresse von 0x30 bis 0x37, dem Bereich des ADDRESS-Schalters dieses Boards, kommuniziert begin() mit dem ATtiny404 des Boards; bei jeder anderen Adresse sucht es einen ADS1115 unter dieser Adresse und den LMP91000 unter 0x48 an dem von Ihnen ü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. Bei Weglassen None, wie im Beispiel. Bei den Adressen 0x30 bis 0x37 ungenutzt.
sensor.begin()returns bool

Prüft, ob das Board antwortet, stellt Verstärkung und Datenrate des ADC gemäß dem Preset ein und konfiguriert den LMP91000 mit den Einstellungen des Presets. Rufen Sie sie einmal vor dem Messen auf.

ReturnsTrue, wenn das Board geantwortet hat und beide Konfigurationsschritte erfolgreich waren, sonst False.

sensor.getPPB()returns float

Nimmt einen Messwert auf und rechnet ihn in ppb um: getPPM() mal 1000.

ReturnsDie Gaskonzentration in ppb.

sensor.getPPM()returns float

Nimmt einen Messwert auf und rechnet ihn in ppm um: Sie zieht die interne Nullspannung ab, addiert die Nullpunktkalibrierung, teilt durch die Verstärkung des Verstärkers und die Empfindlichkeit des Presets und gibt bei einem Ergebnis unter null 0,0 zurück. Das Beispiel zeigt sie als Alternative in einem Kommentar.

ReturnsDie Gaskonzentration in ppm.

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

Zusammenfügen​

begin() übernimmt die gesamte Einrichtung, daher ruft die Schleife nur getPPB() auf und gibt das Ergebnis aus. Um in ppm zu messen, tauschen Sie die Zeile getPPM() aus dem Kommentar ein.