Zwei Sensoren auslesen
Was dieses Beispiel zeigt
Das Beispiel electrochemical-twoSensors.py erstellt zwei Sensorobjekte an einem
I2C-Bus, jeweils mit eigener ADC-Adresse und eigenem Konfigurationspin, und gibt beide
Messwerte alle 2,5 Sekunden in PPB aus. Es erstellt Sensor 1 mit adc_addr=0x4A und
config_pin=25 sowie Sensor 2 mit adc_addr=0x49 und config_pin=32.
Bevor Sie es ausführen:
- Das Beispiel ist mit
SENSOR_O3geschrieben, dem Ozon-Preset des Moduls, daher sind seine Werte keine H2S-Werte. Stellen Sie es nicht unverändert aufSENSOR_H2Sum: Dieses Preset ist für die Zelle SGX-4H2S-100 ausgelegt (1200 nA pro ppm). Das Datenblatt der Zelle SGX-4H2S-300 dieses Boards gibt ein Ausgangssignal von 460 ± 140 nA pro ppm an, daher fallen die Messwerte mit diesem Preset etwa 2,6-mal zu niedrig aus. Übergeben Sie stattdessen beiden Sensoren eine benutzerdefinierteSensorConfigmit den Einstellungen vonSENSOR_H2Sund 460 nA pro ppm, wie der Schnellstart zeigt. - Ändern Sie
Pin(22)undPin(21)auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen.
Der Beispielcode
# FILE: electrochemical-twoSensors.py
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)
Das vollständige Beispiel öffnen
Erwartetes Ergebnis:
Electrochemical Gas Sensor - Two Sensors Example
Sensor 1 initialized successfully!
Sensor 2 initialized successfully!
Danach folgen alle 2,5 Sekunden eine Zeile Sensor 1 reading: und eine Zeile Sensor 2 reading:, jeweils mit der Konzentration in PPB auf fünf Nachkommastellen. Antwortet ein Sensor
nicht, gibt das Skript ERROR: Can't init sensor 1! Check connections!
(bzw. sensor 2) aus und wartet.
Verwendete Funktionen
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorErstellt pro Gaszelle ein Sensorobjekt, jeweils mit eigener Adresse und eigenem Konfigurationspin. Die Adresse bestimmt, wie begin() mit dem Board kommuniziert: Eine Adresse von 0x30 bis 0x37 läuft über den ATtiny404 des Boards; jede andere Adresse, etwa die Standardadresse 0x49, geht an einen ADS1115 unter dieser Adresse und direkt an den LMP91000. Ein angegebener config_pin wird als Ausgang gesetzt und auf High gelegt.
ReturnsDas Sensorobjekt.
Parameter
| Name | Type | Description |
|---|---|---|
sensor_type | SensorConfig | Preset aus dem Modul (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) oder eine benutzerdefinierte SensorConfig. Für die Zelle dieses Boards übergeben Sie eine benutzerdefinierte mit 460 nA pro ppm. |
i2c | machine.I2C | Der I2C-Bus, über den kommuniziert wird. Beide Objekte teilen sich denselben Bus. |
adc_addr | int | Die Adresse, mit der begin() kommuniziert. Dieses Beispiel übergibt 0x4A für Sensor 1 und 0x49 für Sensor 2. |
config_pin | int | Ein GPIO, den das Modul auf High hält und auf Low zieht, während es den LMP91000 dieses Sensors direkt konfiguriert. Bei Adressen von 0x30 bis 0x37 ungenutzt. Dieses Beispiel übergibt 25 für Sensor 1 und 32 für Sensor 2. |
begin()returns boolBei einer Adresse von 0x30 bis 0x37 wird geprüft, ob der ATtiny404 des Boards unter dieser Adresse antwortet; anschließend werden ihm die ADC-Verstärkung aus dem Sensortyp und die langsamste Datenrate gesendet, danach lässt man ihn das LMP91000-Frontend konfigurieren; jeder Befehl wird bis zu 500 ms lang wiederholt. Bei jeder anderen Adresse wird geprüft, ob unter dieser Adresse ein ADS1115 antwortet, seine Verstärkung und die langsamste Datenrate werden gesetzt, dann wird der LMP91000 direkt konfiguriert, wobei config_pin während der Schreibvorgänge auf Low gezogen wird. Rufen Sie es einmal für jedes Sensorobjekt auf.
ReturnsTrue, wenn alle Schritte erfolgreich waren, sonst False.
getPPB()returns floatNimmt mit getPPM() einen Messwert für dieses Sensorobjekt auf und multipliziert ihn mit 1000.
ReturnsGaskonzentration in PPB.
Dieses Beispiel verwendet außerdem I2C und Pin aus dem
machine-Modul von MicroPython,
das nicht Teil des Soldered-Moduls ElectrochemicalGasSensor ist.
Zusammengefasst
Öffnen Sie einen I2C-Bus, erstellen Sie pro Gaszelle ein ElectrochemicalGasSensor-Objekt, jeweils mit eigener Adresse und eigenem Konfigurationspin, rufen Sie bei jedem begin() auf und lesen Sie dann jeden mit getPPB() aus.