Gemittelte Messung
Was dieses Beispiel zeigt
Das Beispiel electrochemical-averagedMeasurement.py des Moduls nimmt fünf
Messwerte im Abstand von drei Sekunden auf, mittelt sie mit einem einzigen Funktionsaufruf und gibt
das Ergebnis in ppb aus.
Das Beispiel erzeugt den Sensor mit SENSOR_O3, der Voreinstellung für die Ozonzelle.
Das Modul berechnet jeden Messwert aus den Empfindlichkeits- und Verstärkungseinstellungen der Voreinstellung;
die Voreinstellung 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. Passen Sie
die Pins an Ihr Board an.
Der Beispielcode
# FILE: electrochemical-averagedMeasurement.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Averaged PPM reading example using the built-in averaging function.
# 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
# How many readings to average and how many seconds to wait between them
NUM_READINGS = 5
SECS_BETWEEN_READINGS = 3
# 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)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Averaged Measurement 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:
# getAveragedPPM is a blocking call — it waits between each reading
reading = sensor.getAveragedPPB(NUM_READINGS, SECS_BETWEEN_READINGS)
# If PPM is more relevant for your sensor, use:
# reading = sensor.getAveragedPPM(NUM_READINGS, SECS_BETWEEN_READINGS)
print("Sensor reading: {:.5f} PPB".format(reading))
time.sleep_ms(2500)
🔗Vollständiges Beispiel öffnen
Examples/electrochemical-averagedMeasurement.py im Commit 623e1e6
Das Anschlussschema im Beispiel verbindet LMPEN mit GND oder einem GPIO. Auf diesem
Board hält ein 10-kΩ-Widerstand LMPEN auf Low und der Pin ist mit dem ATtiny404 verbunden, sodass
Sie ihn unverbunden lassen (siehe die Pin-Tabelle unter
Hardware-Details).
Erwartetes Ergebnis:
Electrochemical Gas Sensor - Averaged Measurement Example
Sensor initialized successfully!
Jeder Mittelwert besteht aus fünf Messungen mit je 3 s Wartezeit danach, daher erscheint die erste
Zeile Sensor reading: (der Mittelwert in ppb mit fünf Nachkommastellen, dann PPB)
nach etwa 15 s, die folgenden etwa alle 17,5 s, einschließlich der
2,5 s Pause am Ende der Schleife. Schlägt begin() fehl, gibt das Skript
ERROR: Can't init the sensor! Check connections! aus und hält an.
Verwendete Funktionen
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorErzeugt das Sensorobjekt. Bis zum Aufruf von begin() wird nichts an das Board gesendet.
ReturnsDas Sensorobjekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
SensorConfig | sensor_type | Die Zellen-Voreinstellung. Das Beispiel übergibt SENSOR_O3; die SGX-4CL2-Zelle dieses Boards hat die Voreinstellung SENSOR_CL2. |
I2C | i2c | Ein 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 (auch dort Pins 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. |
int | adc_addr | Die 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 an dieser Adresse nach einem ADS1115 und am übergebenen Bus nach dem LMP91000 bei 0x48. |
int | config_pin | Ein GPIO für den MENB-Eingang des LMP91000: Das Modul setzt ihn auf Low, solange es den LMP91000 direkt konfiguriert, und sonst auf High. Bei Weglassen None, wie im Beispiel. Bei den Adressen 0x30 bis 0x37 ungenutzt. |
sensor.begin()returns boolPrüft, ob das Board antwortet, stellt Verstärkung und Datenrate des ADC der Voreinstellung ein und konfiguriert den LMP91000 mit den Einstellungen der Voreinstellung. Rufen Sie sie einmal vor dem Lesen auf.
ReturnsTrue, wenn das Board geantwortet hat und beide Konfigurationsschritte erfolgreich waren, sonst False.
sensor.getAveragedPPB(num_measurements=5, seconds_delay=2)returns floatgetAveragedPPM() mal 1000. Die Funktion blockiert, bis alle Messungen abgeschlossen sind.
ReturnsDie gemittelte Gaskonzentration in ppb.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | num_measurements | Wie viele Messwerte gemittelt werden. Standardmäßig 5; das Beispiel übergibt NUM_READINGS (5). |
int | seconds_delay | Sekunden Wartezeit nach jedem Messwert. Standardmäßig 2; das Beispiel übergibt SECS_BETWEEN_READINGS (3). |
sensor.getAveragedPPM(num_measurements=5, seconds_delay=2)returns floatNimmt num_measurements Messwerte mit getPPM() auf, wartet nach jedem seconds_delay Sekunden und gibt ihren Mittelwert zurück. Das Beispiel zeigt sie als Alternative in einem Kommentar.
ReturnsDie gemittelte Gaskonzentration in ppm.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | num_measurements | Wie viele Messwerte gemittelt werden. Standardmäßig 5. |
int | seconds_delay | Sekunden Wartezeit nach jedem Messwert. Standardmäßig 2. |
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.
Zusammenfassung
Ändern Sie NUM_READINGS und SECS_BETWEEN_READINGS, um Ansprechzeit gegen einen
stabileren Wert abzuwägen. Während der Mittelwert berechnet wird, wartet der Rest der Schleife.