Gaskonzentration auslesen
Was dieses Beispiel zeigt
Das Beispiel electrochemical-bridgeBoard.py des Moduls startet das Breakout über seine ATtiny404-Bridge und gibt alle 2,5 Sekunden die Gaskonzentration in ppm aus. Es erstellt den Sensor mit der Adresse 0x30, auf der dieses Board antwortet, bis Sie den ADDRESS-Schalter verstellen.
Das Beispiel verwendet das Ozon-Preset des Moduls, SENSOR_O3. SENSOR_NH3 ist das Preset des Moduls für die Zelle SGX-4NH3 mit 40 nA pro ppm, einer Verstärkung des Verstärkers von 35 kΩ und dem 4,096-V-Bereich des ADC. Die Umrechnung in ppm verwendet die Empfindlichkeit des Presets: -1000 nA/ppm für SENSOR_O3, 40 nA/ppm für SENSOR_NH3. In der ausgelieferten Fassung sind die Messwerte des Beispiels daher keine Ammoniak-ppm. Um Ammoniak zu messen, ändern Sie SENSOR_O3 in der Import-Zeile und in der Zeile, die den Sensor erstellt, in SENSOR_NH3. Das Beispiel öffnet I2C-Bus 0 an Pin 22 (SCL) und Pin 21 (SDA); ändern Sie die Pins, wenn Ihr Board andere verwendet.
Die Kommentare des Beispiels sagen, dass die Adresse mit Jumpern auf der Rückseite des Boards eingestellt wird. Auf diesem Board wird die Adresse mit dem dreistufigen ADDRESS-Schalter eingestellt. Die in den Kommentaren genannten Adressen 0x49/0x4A/0x4B sind ADS1115-Adressen, keine Adressen, auf denen dieses Board antwortet. Wo die Kommentare sagen, LMPEN sei fest mit GND verbunden, wird es auf diesem Board durch einen 10-kΩ-Widerstand auf GND gezogen: Lassen Sie es unverbunden.
Der Beispielcode
# FILE: electrochemical-bridgeBoard.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Single sensor PPM reading example for the ATtiny404 bridge board revision,
# which allows daisy-chaining multiple boards on one I2C bus.
# LAST UPDATED: 2026-07-23
# Connecting diagram:
#
# Qwiic------------------------>Qwiic
#
# Note: on this board revision, LMPEN is hardwired to GND, so there's no
# config_pin to set - it's ignored whenever adc_addr falls in the bridge
# range (0x30-0x37). Set the desired address using the jumpers on the back
# of the board before powering it on.
from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3
# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# (address = 0x30 + jumper offset, giving a range of 0x30-0x37).
# Any additional boards on the same bus just need a different jumper
# setting, same as twoSensors.py does for legacy boards with 0x49/0x4A/0x4B.
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x30)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - ATtiny Bridge Board Example")
if not sensor.begin():
print("ERROR: Can't init the sensor! Check connections and jumper address!")
while True:
time.sleep_ms(100)
print("Sensor initialized successfully!")
# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPM()
# If PPB is more relevant for your sensor, use:
# reading = sensor.getPPB()
print("Sensor reading: {:.5f} PPM".format(reading))
time.sleep_ms(2500)
🔗Vollständiges Beispiel öffnen
electrochemical-bridgeBoard.py im Commit 623e1e6
Erwartetes Ergebnis:
Electrochemical Gas Sensor - ATtiny Bridge Board Example
Sensor initialized successfully!
Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der Konzentration in ppm auf fünf Nachkommastellen.
Verwendete Funktionen
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorErstellt das Sensorobjekt. adc_addr legt fest, wie begin() mit dem Board kommuniziert: von 0x30 bis 0x37 wird das ATtiny-Bridge-Protokoll verwendet; jeder andere Wert wird als eigene I2C-Adresse des ADC verwendet.
ReturnsDas Sensorobjekt.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
sensor_type | SensorConfig | Das Zellen-Preset. SENSOR_NH3 ist das Preset für die Zelle dieses Boards. |
i2c | I2C | Ihr I2C-Objekt. Mit None wählt das Modul die Pins nur auf den wenigen Boards selbst, die es erkennt, zum Beispiel I2C(0, scl=Pin(22), sda=Pin(21)) beim ESP32 und I2C(scl=Pin(5), sda=Pin(4)) beim ESP8266. Auf einem Board, das es nicht erkennt, löst es eine Ausnahme aus, übergeben Sie also Ihr eigenes I2C-Objekt. |
adc_addr | int | Die Adresse, auf der das Modul kommuniziert. Standard 0x49. Das Beispiel übergibt 0x30, die Adresse des Boards im Auslieferungszustand; der ADDRESS-Schalter stellt sie von 0x30 bis 0x37 ein. |
config_pin | int oder None | Eine GPIO-Pin-Nummer, die das Modul während der Konfiguration des LMP91000 auf Low und danach auf High setzt, wenn adc_addr außerhalb von 0x30 bis 0x37 liegt. Standard None. Von 0x30 bis 0x37 nicht verwendet. |
begin()returns boolBei einer Adresse von 0x30 bis 0x37 wird geprüft, ob die Bridge antwortet, und ihr werden die Einstellungen für den ADC und das analoge Frontend aus dem Preset gesendet. Bei jeder anderen Adresse wird der ADS1115 direkt auf dieser Adresse gestartet und der LMP91000 konfiguriert. Rufen Sie sie einmal vor jeder Messung auf.
ReturnsTrue, wenn jeder Schritt erfolgreich war. False, wenn die Bridge nicht innerhalb von 500 ms mit OK geantwortet oder einen Fehler gemeldet hat, wenn das Starten des ADS1115 fehlgeschlagen ist oder wenn die Konfiguration des analogen Frontends fehlgeschlagen ist.
getPPM()returns floatNimmt einen ADC-Messwert auf, entfernt den internen Nullpunkt des Frontends, addiert die Nullpunktkalibrierung und rechnet den Zellenstrom in ppm um. Ein Ergebnis unter null wird als 0.0 zurückgegeben.
ReturnsDie Gaskonzentration in ppm.
getPPB()returns floatDerselbe Messwert wie bei getPPM(), in Parts per Billion. Das Beispiel zeigt ihn als Alternative in einem Kommentar.
ReturnsgetPPM() multipliziert mit 1000.
Zusammenfassung
Erstellen Sie den Sensor mit einem Preset und der Adresse des Schalters, rufen Sie einmal begin() auf und danach getPPM(), wann immer Sie einen Messwert möchten. Wenn begin() False zurückgibt, prüfen Sie zuerst das Kabel und die Adresse.