Chlor auslesen
Was dieses Beispiel zeigt
Das Beispiel electrochemical-bridgeBoard.py des Moduls startet das Board mit seiner
Standardadresse 0x30 und gibt die Gaskonzentration alle 2,5 s in ppm aus. Es
ist dasselbe Beispiel wie im Quick Start.
Das Beispiel verwendet SENSOR_O3, die Voreinstellung für die Ozonzelle. Das Modul
berechnet ppm 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
Die Kommentare im Beispiel besagen, dass die Adresse über Jumper auf der Rückseite des
Boards eingestellt wird und dass LMPEN fest mit GND verbunden ist. Bei diesem Board stellt der ADDRESS-Schalter auf der Oberseite die Adresse ein (standardmäßig 0x30). Ein 10-kΩ-Widerstand hält LMPEN
auf Low und ist mit dem ATtiny404 verbunden, daher lassen Sie ihn unbeschaltet (siehe
Hardware-Details).
# 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
Examples/electrochemical-bridgeBoard.py im Commit 623e1e6
Erwartetes Ergebnis:
Electrochemical Gas Sensor - ATtiny Bridge Board Example
Sensor initialized successfully!
Danach folgt alle 2,5 s eine Zeile: Sensor reading: , die Konzentration in ppm mit fünf
Nachkommastellen und PPM. Antwortet das Board nicht, gibt das Skript
ERROR: Can't init the sensor! Check connections and jumper address! aus und stoppt.
Verwendete Funktionen
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorErstellt das Sensorobjekt. Bis zum Aufruf von begin() wird nichts an das Board gesendet.
ReturnsDas Sensorobjekt.
Parameter
| Type | Name | Description |
|---|---|---|
SensorConfig | sensor_type | Die Voreinstellung der Zelle. 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)) beim Port esp32 und bei dem einen weiteren Board, das es anhand seines Namens erkennt (dort ebenfalls Pin 22 und 21); bei esp8266 I2C(scl=Pin(5), sda=Pin(4)); bei jedem anderen Board wird Board not recognized, please pass an I2C object manually ausgelöst. |
int | adc_addr | Die I2C-Adresse, 0x49, wenn weggelassen. Bei einer Adresse von 0x30 bis 0x37, dem Bereich des ADDRESS-Schalters dieses Boards, kommuniziert begin() mit dem ATtiny404 des Boards; das Beispiel übergibt 0x30, die Standardadresse des Boards. Bei jeder anderen Adresse sucht begin() 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 legt ihn auf Low, solange es den LMP91000 direkt konfiguriert, sonst auf High. None, wenn weggelassen. Bei Adressen von 0x30 bis 0x37 ungenutzt. |
sensor.begin()returns boolPrüft, ob das Board antwortet, sendet ihm die ADC-Verstärkung und die Datenrate der Voreinstellung und konfiguriert den LMP91000 mit den Einstellungen der Voreinstellung. Rufen Sie die Funktion einmal vor dem Lesen auf. Jeder Austausch mit dem Board wird bis zu 500 ms lang wiederholt.
ReturnsTrue, wenn das Board geantwortet hat und beide Konfigurationsschritte erfolgreich waren, sonst False.
sensor.getPPM()returns floatNimmt eine Messung vor und rechnet sie in ppm um: Sie zieht die interne Nullspannung ab (die 2,5-V-Referenz mal den internen Nullprozentwert der Voreinstellung), addiert die Nullpunktkalibrierung, teilt durch die Verstärkung des Verstärkers und durch die Empfindlichkeit der Voreinstellung in nA pro ppm. Ein Ergebnis unter null wird als 0.0 zurückgegeben.
ReturnsDie Gaskonzentration in ppm.
sensor.getPPB()returns floatDieselbe Messung wie getPPM(), mal 1000. Das Beispiel zeigt sie als Alternative in einem Kommentar.
ReturnsDie Gaskonzentration in ppb.
Dieses Beispiel verwendet außerdem
I2C und
Pin aus dem
machine-Modul von MicroPython sowie
time.sleep_ms(),
die nicht Teil dieser Bibliothek sind, sondern zu MicroPython selbst gehören.
Zusammenfügen
begin() übernimmt die gesamte Einrichtung, daher ruft die Schleife nur getPPM() auf und gibt das
Ergebnis aus. Um in ppb zu lesen, tauschen Sie die Zeile getPPB() aus dem Kommentar ein.