Benutzerdefinierte Konfiguration
Was dieses Beispiel zeigt
Das Beispiel electrochemical-customConfig.py des Moduls erstellt eine eigene
SensorConfig: die Empfindlichkeit der Zelle, den Nullpunkt-Offset, den ADC-Bereich und jede
Einstellung des LMP91000. begin() sendet dann diese Konfiguration an das Board, statt
eine integrierte Voreinstellung zu verwenden.
Die Werte im Beispiel gehören nicht zu diesem Board. Um die Zelle dieses Boards abzustimmen,
gehen Sie von der Voreinstellung SENSOR_CL2 des Moduls aus und ändern Sie jeweils nur einen Wert.
Importieren Sie die Konstanten, die Sie verwenden, wie im Beispiel: den Gain aus ads1115, den
Rest aus ElectrochemicalGasSensor.
| Argument | Wert von SENSOR_CL2 |
|---|---|
nano_amperes_per_ppm | 600.0 |
internal_zero_calibration | 0 |
ads_gain | ADS_GAIN_4_096V |
tia_gain | TIA_GAIN_120_KOHM |
rload | RLOAD_33_OHM |
ref_source | REF_EXTERNAL |
internal_zero | INTERNAL_ZERO_20_PERCENT |
bias_sign | BIAS_SIGN_POSITIVE |
bias | BIAS_0_PERCENT |
fet_short | FET_SHORT_DISABLED |
op_mode | OP_MODE_3LEAD_AMP_CELL |
Lassen Sie ref_source auf REF_EXTERNAL: Das Board hat eine 2,5-V-Referenz für das
Front-End, und das Modul berechnet ppm mit 2,5 V.
Das Beispiel öffnet den I2C-Bus 0 mit SCL an Pin 22 und SDA an Pin 21. Passen Sie
sie an Ihr Board an.
Der Beispielcode
# FILE: electrochemical-customConfig.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Custom LMP91000 configuration example for any electrochemical sensor.
# LAST UPDATED: 2026-05-21
# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>GPIO pin (see config_pin parameter below)
from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import (
ElectrochemicalGasSensor, SensorConfig,
TIA_GAIN_35_KOHM, RLOAD_10_OHM, REF_EXTERNAL,
INTERNAL_ZERO_67_PERCENT, BIAS_SIGN_NEGATIVE, BIAS_0_PERCENT,
FET_SHORT_DISABLED, OP_MODE_3LEAD_AMP_CELL,
)
from ads1115 import ADS_GAIN_2_048V
# Custom sensor configuration — edit these values to match your sensor's datasheet.
#
# nanoAmperesPerPPM: Sensitivity from the sensor datasheet (nA/PPM)
# internalZeroCalibration: Voltage offset added to zero the reading in clean air
# adsGain: ADS1115 full-scale range (ADS_GAIN_6_144V .. ADS_GAIN_0_256V)
# tia_gain: TIA feedback resistor (TIA_GAIN_2_75_KOHM .. TIA_GAIN_350_KOHM)
# rload: Load resistor (RLOAD_10_OHM .. RLOAD_100_OHM)
# ref_source: Reference voltage source (REF_INTERNAL / REF_EXTERNAL)
# internal_zero: Internal zero percentage (INTERNAL_ZERO_20/50/67_PERCENT or _BYPASSED)
# bias_sign: Bias polarity (BIAS_SIGN_NEGATIVE / BIAS_SIGN_POSITIVE)
# bias: Bias percentage of Vref (BIAS_0_PERCENT .. BIAS_24_PERCENT)
# fet_short: FET short (FET_SHORT_DISABLED / FET_SHORT_ENABLED)
# op_mode: Operating mode (OP_MODE_3LEAD_AMP_CELL for normal operation)
SENSOR_CUSTOM = SensorConfig(
nano_amperes_per_ppm=-1000.0,
internal_zero_calibration=-0.0012,
ads_gain=ADS_GAIN_2_048V,
tia_gain=TIA_GAIN_35_KOHM,
rload=RLOAD_10_OHM,
ref_source=REF_EXTERNAL,
internal_zero=INTERNAL_ZERO_67_PERCENT,
bias_sign=BIAS_SIGN_NEGATIVE,
bias=BIAS_0_PERCENT,
fet_short=FET_SHORT_DISABLED,
op_mode=OP_MODE_3LEAD_AMP_CELL,
)
# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
sensor = ElectrochemicalGasSensor(SENSOR_CUSTOM, i2c)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Custom Config 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()
print("Sensor reading: {:.5f} PPB".format(reading))
time.sleep_ms(2500)
🔗Vollständiges Beispiel öffnen
Examples/electrochemical-customConfig.py im Commit 623e1e6
Das Anschlussschema im Beispiel verbindet LMPEN mit einem GPIO. Bei diesem Board hält ein
10-kΩ-Widerstand LMPEN auf Low, und der Pin ist mit dem ATtiny404 verbunden, daher lassen Sie ihn
unverbunden (siehe die Pin-Tabelle unter
Hardware-Details).
Erwartetes Ergebnis:
Electrochemical Gas Sensor - Custom Config Example
Sensor initialized successfully!
Danach 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 hält an.
Verwendete Funktionen
SensorConfig(nano_amperes_per_ppm, internal_zero_calibration, ads_gain, tia_gain, rload, ref_source, internal_zero, bias_sign, bias, fet_short, op_mode)returns SensorConfigEnthält die Konfiguration einer Zelle. Auch die integrierten Voreinstellungen, darunter SENSOR_CL2, sind SensorConfig-Objekte.
ReturnsDas Konfigurationsobjekt, das an ElectrochemicalGasSensor() übergeben wird.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
float | nano_amperes_per_ppm | Die Empfindlichkeit der Zelle in nA pro ppm, die bei der ppm-Berechnung verwendet wird. |
float | internal_zero_calibration | Spannungs-Offset, der zu jeder Messung addiert wird. |
int | ads_gain | Messbereich des ADS1115, ADS_GAIN_6_144V bis ADS_GAIN_0_256V. |
int | tia_gain | Verstärkung des LMP91000, TIA_GAIN_EXTERNAL oder TIA_GAIN_2_75_KOHM bis TIA_GAIN_350_KOHM. |
int | rload | Lastwiderstand, RLOAD_10_OHM, RLOAD_33_OHM, RLOAD_50_OHM oder RLOAD_100_OHM. |
int | ref_source | REF_INTERNAL oder REF_EXTERNAL. |
int | internal_zero | INTERNAL_ZERO_20_PERCENT, _50_PERCENT, _67_PERCENT oder INTERNAL_ZERO_BYPASSED. |
int | bias_sign | BIAS_SIGN_NEGATIVE oder BIAS_SIGN_POSITIVE. |
int | bias | Bias als Anteil der Referenz, BIAS_0_PERCENT bis BIAS_24_PERCENT. |
int | fet_short | FET_SHORT_DISABLED oder FET_SHORT_ENABLED. |
int | op_mode | Betriebsmodus, OP_MODE_3LEAD_AMP_CELL für normale Messung. |
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
| Typ | Name | Beschreibung |
|---|---|---|
SensorConfig | sensor_type | Die Konfiguration, hier das SENSOR_CUSTOM des Beispiels. |
I2C | i2c | Ein fertiges machine.I2C-Objekt; das Beispiel übergibt eines. Wird es weggelassen, erstellt das Modul I2C(0, scl=Pin(22), sda=Pin(21)) beim Port esp32 und bei dem einen weiteren Board, das es am Namen erkennt (dort ebenfalls Pins 22 und 21); bei esp8266 I2C(scl=Pin(5), sda=Pin(4)); bei jedem anderen Board löst es Board not recognized, please pass an I2C object manually aus. |
int | adc_addr | Die I2C-Adresse, 0x49, wenn sie weggelassen wird, 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 übergebenen Bus. |
int | config_pin | Ein GPIO für den MENB-Eingang des LMP91000: Das Modul setzt ihn auf Low, während es den LMP91000 direkt konfiguriert, und sonst auf High. None, wenn er weggelassen wird, wie im Beispiel. Bei Adressen von 0x30 bis 0x37 ungenutzt. |
sensor.begin()returns boolPrüft, ob das Board antwortet, stellt Verstärkung und Datenrate des ADC der Konfiguration ein und schreibt Verstärkung und Last des Verstärkers, Referenz, internen Nullpunkt, Bias und Betriebsmodus in den LMP91000. Rufen Sie sie einmal vor dem Lesen auf.
ReturnsTrue, wenn das Board geantwortet hat und beide Konfigurationsschritte erfolgreich waren, sonst False.
sensor.getPPB()returns floatFührt eine Messung durch und rechnet sie mit den Werten der Konfiguration in ppb um: getPPM() mal 1000. Ein Ergebnis unter null wird als 0.0 zurückgegeben.
ReturnsDie Gaskonzentration in ppb.
Dieses Beispiel verwendet außerdem
I2C und
Pin aus dem
machine-Modul von MicroPython sowie
time.sleep_ms();
diese gehören nicht zu dieser Bibliothek, sondern sind Teil von MicroPython selbst.
Zusammenfassung
begin() schreibt die Einstellungen von LMP91000 und ADC auf das Board, und getPPB() verwendet
nano_amperes_per_ppm, internal_zero_calibration, die Verstärkung des Verstärkers und den
internen Nullpunkt für die Berechnung. Führen Sie das Skript nach jeder Änderung erneut aus.