CO2 Sensor basierend auf TTGO with MQTT
Dieses Projekt dient zur Messung der CO2 Konzentration sowie der Feuchtigkeit und der Temperatur.
Vierschiedene Anzeigen stehen zur Verfügung.
Der Source Code ist auf github zu finden: https://github.com/ThomasH-W/CO2-TTGO-MQTT
Um die Anzahl der Kabel und dazugehörigen Lötpunkten zu minimieren, wurde das TTGO-Modul gewählt.
Das Modul ist über MQTT and openHAB und NodeRED angebunden. NodeRED bietet eine einfache und schnelle Möglichkeit eine Web-Oberfläche zur Verfügung zu stellen. Weiterhin läßt sich das Modul über MQTT steuern.
Anzeige
GUI 1 – Alle Sensoren
Settings for this GUI: mode = 1
GUI 2: CO2 + Temperatur
Settings for this GUI: mode = 2
GUI 3: nur CO2 – Farbe abhängig vom Messwert
Settings for this GUI: mode = 3
GUI 4: CO2 Grafik
Settings for this GUI: mode = 4
GUI 5: Messverlauf
Settings for this GUI: mode = 5
GUI 6: Admin Seite
Settings for this GUI: mode = 6
GUI 0: Boot
Settings for this GUI: mode = 0
NodeRED
CO2 Sensor / MHZ19B
Zwei sehr gute Seiten,, die mir geholfen haben, das Thema überhaupt zu verstehen:
- https://unsinnsbasis.de/co2-sensor-mhz19b/
- http://steinlaus.de/stinkt-das-hier-teil-2-mit-dem-winsen-mh-z19b/#comment-18510
Feuchtigkeits- und Temperatursensor
Der DHT22 misst beides und braucht aber nur eine Datenleitung. Alternativ kann auch ein BME280 eingesetzt werden.
Pin-Belegung
CO2 Sensor / MHZ19B
ESP PIN | ESP Name | MHZ19B Name |
---|---|---|
26 | RX | TX |
27 | TX | RX |
GND | GND | GND |
5V | V | Vin |
Temp/Humidity Sensor / DHT22
ESP PIN | ESP Name | DHT22 Name |
---|---|---|
25 | GPIO25 | DATA |
GND | GND | GND |
3V3 | Vcc | Vcc |
MQTT
The name des Moduls wird hier definiert: include/myMqttClient.h. Der name wird als client-ID für MQTT verwendet. Zu beachten ist, dass der Name / die client-ID eindeutig im lokalem Netzwerk sein muss. Default name: “TTGO-1”
Topics
- tele/<name>/… ?
- tele/TTGO-1/CO2
- tele/TTGO-1/info
- tele/TTGO-1/temp
- tele/TTGO-1/humi
- stat/TTGO/result
- cmnd/TTGO
Commands – Message format
- {“name”:”mode”,”value”:3}
Command | Value | Reason |
---|---|---|
mode | 0…6 | Select GUI |
calibration | 1 | Start calibration |
Configuration
Copy the files from
Settings | From | To | Reason |
---|---|---|---|
TFT Driver | README\TFT_eSPI | .pio\libdeps\TTGO-MQTT-lora32-v1\TFT_eSPI | You need to select the correct TFT driver in the library, otherwise the screen will just be black |
WLAN + MQTT Credentials | include\user_config_override_sample.h | included\user_config_override.h | Modify this to match your credentials. |
ToDo
- Calibration
Ist bereits eingebaut, aber noch nicht getestet.
Hallo Thomas,
ein wirklich tolles Projekt hast du da umgesetzt. Ich bin so frei gewesen und habe mir ebenfalls die Bauteile besorgt und den CO2-Senesor nachgebaut. Ich bschäftige mich noch nicht ganz so lange mit Mikrocontrollern und bin jetzt leider an meine Grenzen gestoßen und hoffe, dass du mir weiter helfen kannst. Ich bekomme die MEssung nicht komplett zum laufen. Ich habe alle notwendigen Schritte gemäß der Readme durchgeführt und alle Dateien entsprechend angepaßt. Im Serial Monitor erhalte ich folgende Fehlermeldung:
setup complete.
Attempting MQTT connection…failed, rc=-2 try again in 5 seconds
Das Dispaly bleib dunkel und es werden keine Daten angezeigt.
In der user_config_override.h habe ich alle notwendigen Einträge angepaßt. Ich habe auch alle Möglichkeiten bezüglich MQTT ausprobiert, leider ohne Erfolg. Der MQTT-Broker läuft unter openHAB und andere Topics werden vom Broker bearbeitet.
Wenn ich in der mani.cpp die Zeilen myMqttClient2.loop(); und mqttcmd_loop(); auskommentiere, werden alle Messwerte auf dem TTGO abgezeigt.
Kannst du mir einen Tipp geben, was ich machen muss, damit die MQTT-Connection funktioniert? Würde die Messwerte gerne auf openHAB haben.
Eine Anregung habe ich noch. Wenn kein WLAN zur Verfügung steht, bleibt er beim Setup in der Schleife hängen. Wenn man den TTGO vielleicht irgendwo als mobile Messung nutzen, erhält man dann keine Anzeige. Kann man die WLAN-Anmeldung nicht unabhängig von den Messungen laufen lassen?
Würde mich sehr über eine Rückmeldung freuen!
Vielen Dank im Voraus
Hans
Hallo Hans,
ich habe das Projekt lokal gelöscht, von github geholt und bewusst einen falschen MQTT Broker angegeben.
Da waren ein paar schlimmer Fehler im Code. Peinlich, peinlich.
Die Verbindung sollte jetzt funktionieren mit einem aber: zur Zeit ignoriere ich user/password für den MQTT Broker (siehe Zeile 195 in mqttClient.cpp).
Die Bibliothek für die Buttons habe ich nun ausgetauscht, da mit der Alten die Tasten nicht sicher erkannt wurden.
Jetzt kann man aber die Tasten neben dem USB-C Anschluss die GUI umschalten.
Über deine Anregung bzgl. WLAN hatte ich schon nachgedacht. Für eine TTGO-Internet Radio habe ich nun einen Async-WifFi Manager verwendet.
Damit kann man so etwas besser realisieren, nur fehlt mir gerade die Zeit das in diesem Projekt auch noch zu ändern.
Bitte melde Dich, falls das mit dem mqtt-Broker immer noch nicht funktionieren sollte.
Viele Grüße,
Thomas