×

DIY - Messung von Temperatur, Luftfeuchtigkeit und Feinstaubbelastung in Bernau am Chiemsee mit ESP8266 (NodeMCU), SDS011 und DHT22

Aktuelle Messwerte von 23.6.2018 0:42


13.9 °C

57.4 %

PM10: 2.5 µg/m³

PM2.5: 1.42 µg/m³

Graph Tagesansicht

Zu den Graphen

Am Ende des Tutorials können diese Werte abgefragt und wie oben dargestellt werden - viel Spaß beim nachbauen

Problemstellung und Lösung

Messung der Luftverschmutzung (Feinstaub), Temperatur- und Luftfeuchtigkeit in Bernau am Chiemsee. Da ich an der Haupteinkaufsstraße von Bernau am Chiemsee, der Chiemseestraße, wohne und der Verkehr durch unsere Ortschaft immer mehr wird, wollte ich wissen wie weit wir von den "bedenklichen" Grenzwerten entfernt sind. Für die Erfassung der Feinstaubbelastung habe ich den Luftpartikelsensor SDS011 benutzt. Da ich schon mal dabei war dachte ich mir ich nehme gleich noch die Wetterdaten (Temperatur- und Luftfeuchtigkeit) mit dem DHT22 auf. Die Abfrage der Sensoren und die Weitergabe der Daten erfolgt durch einen ESP8266 (NodeMCU). Kurz das Web durchforscht und geschaut obs schon was "fertiges" gibt und ich bin auf die Seite von luftdaten.info gestoßen. Die Verwendung der Software liefert uns folgende Vorteile:

  • Software muss nicht selbst erstellt werden (tja, das habt ihr euch wahrscheinlich gedacht)
  • Unterstützung von Luftdaten.info durch Versorgung mit unseren Luft- und Wetterdaten (Damit vervollständigen wir das bestehende Netzwerk und helfen jedem der sich dafür interessiert die Luftverschmutzung örtlich im Detail zu beobachten
  • Wir erhalten unsere persönlichen Sensordaten mit Zeitstempel im Jason-Format (nachdem wir den Sensor gemeldet haben)
Somit brauchen wir uns um den Softwareteil des ESP8266 nicht selbst kümmern, müssen ihn nur noch per PC oder Smartphone mit unserem Netzwerk verknüpfen und wir können uns gleich um die Datenauswertung kümmern.

Die komponenten

  • Unser Gehirn: ESP8266 - NodeMCU
  • Feinstaubsensor: SDS011
  • Temp. und Luftfeuchtigkeitssensor: DHT22
  • Klemmbrett und ein paar Kabel
  • Optional: Lochrasterplatine und Klemmen auf der wir alles miteinander für den Praxistest verbinden

Verdrahtung

Die Software

Der Part ist ein bisschen trickie. Keine Angst ich glaube an euch und das bekommt auch jeder hin der sich noch nicht zu weit mit der Programmierung von Microcontrollern beschäftigt hat. Wir verwenden die Arduino IDE und erweitern unsere Bibliothek um den ESP8266

Arduino IDE einrichten, Software für Messung runterladen

Hier gibts eine Schritt für Schritt Anleitung wie wir die Arduino IDE (kostenlos) mit dem ESP8266 zum laufen bekommen. Macht die beschreibenen Schritte inklusive des Downloads der Firmware. Beim Aufspielen auf den ESP8266 wirds dann haken, deswegen danach wieder hier weiter machen.

Software auf ESP8266 übertragen (mit windows)

Als erstes schauen wir mal wo denn unsere Datei "esptool.exe" rumliegt. Einfach mal folgenden Schritte durchziehen

  1. Startpunkt ist unser Benutzerprofil: C:\Users\Dein_User_Name\Documents\ArduinoData\packages\esp8266\tools\esptool öffnen
  2. Nun den sich hier befindenden Ordner öffnen. Bei mir wars damals der Ordner "0.4.9".
  3. Hier sollte sich unsere Datei esptool.exe befinden. Nun sind wir bereit zum übertragen. Kopiert nun den gesamten Pfad in dem wir uns gerade befinden
  4. Nun noch schnell den Port checken: (ESP8266 anstecken!) Arduino IDE öffnen und Port unter "Werkzeuge->Port" raussfinden.
  5. Jetzt cmd.exe öffnen (einfach cmd im Suchfenster eingeben und ausführen)
  6. Nun fügen wir unseren Pfad von Schritt 3 ein und hängen noch folgendes dran : \esptool.exe -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp COM6 -cf Pfad_zur_heruntergeladenen_Firmwaredatei
  7. Port nach Schritt 4 anpassen und mit "Pfad_zur_heruntergeladenen_Firmwaredatei" ist der Ordner gemeint wo ihr die Datei "latest_de.bin" (von luftdaten.info heruntergeladen) gespeichert habt.
  8. Enter drücken. Puh das Schwerste habt ihr damit mal hinter euch gebracht. Ich bin stolz auf euch (vorausgesetzt es hat geklappt)

Test und Montage

Nach Verdrahtung und erfolgreichem Aufspielen der Software gehts jetzt zum Testen. Hier steht Schritt für Schritt erklärt wie wir unsere Messstation ins Netzwerk bekommen. Merkt euch die Chip-ID die bei der ersten Konfiguration angezeigt wird, die brauchen wir später noch.

Nach der Konfiguration hängt unsere Messstation nun im Netzwerk und wir können mit ihr arbeiten. Jetzt können wir unsere Daten auch lokal abfragen:

  • Funktioniert immer: Über die IP-Addresse des Sensors (Die können wir durch unseren Router rausfinden, dabei einfach auf den Router zugreifen und schauen welche neue IP-Adresse vorhanden ist und unserer Messstation zugeordnet werden kann).
  • Linux, MacOS und Win10: http://feinstaubsensor-sensorid.local/, sensorid durch eure Chip-ID ersetzen und ihr solltet Zugriff haben.

Wenn unsere Messstation jetzt im Netzwerk hängt und online ist, können wir nach ca. 10 Minuten auf Graphen von Tages-, Wochen-, Monats- und Jahreswert unseres Sensors hier zugreifen. Einfach nach eurer Chip-ID suchen und ihr bekommt die Daten geliefert. Hier wird die Signalqualität unseres Sensors angezeigt.

Datenauswertung per api

Die Datenauswertung habe ich durch Abfrage der Daten im Jason-Format durchgeführt. Damit wir die Daten unseres Sensors per Jason-Format erhalten können, müssen wir unseren Sensor noch bei Luftdaten.info registrieren. Dazu schreiben wir folgende Daten an rajko@codefor.de:

  • Chip-ID des Feinstaubsensors (Entweder vom vorherigen Schritt gemerkt oder per Zugriff auf die Konfigurationsseite des Sensor auslesbar
  • Adressdaten: Straße + Hausnummer, PLZ und Ort (Die werden benötigt um Koordinaten für die Karte zu erstellen)
  • Stationsumgebung (Höher über Grund, Strassenseite)
  • Eure e-mail Adresse, wird nur benötigt um euch zu antworten und euch die weitern Daten für die Abfrage eurer Jason-Daten zu übermitteln
  • Wenn möglich, könnt ihr noch ein Bild von der fertig montierten Station machen und mitschicken

Nachdem wir unsere Messstation damit offiziel angemeldet haben, wird diese in der Karte eingetragen. Bei mir hat die Anmeldung ca. 2h gedauert (das war noch an einem Feiertag). Wenn die Anmeldung erfolgte, bekommt ihr eine Persönliche ID mit der ihr eure Sensordaten unter http://api.luftdaten.info/v1/sensor/ID/ im Jason-Format bereitgestellt bekommt. ID durch euere Persönliche ID ersetzen (Nicht die Chip-ID sondern die per e-mail erhaltene). Wenn der Sensor online ist und Daten aufzeichnet bekommt ihr ein Array mit Jason-Daten geliefert, dass 2 Elemente besitzt (aktueller und letzter Messwert) und wie folgt aussieht:

[{"location":{"id":4097,"altitude":"531.7","longitude":"12.375","country":"DE","latitude":"47.813"},"sampling_rate":null,"sensor":{"pin":"1","id":xxxx,"sensor_type":{"manufacturer":"Nova Fitness","id":14,"name":"SDS011"}},"id":726715233,"timestamp":"2018-01-27 18:18:09","sensordatavalues":[{"value_type":"P1","value":"63.67","id":1578733221},{"value_type":"P2","value":"43.10","id":1578733222}]},{"location":{"id":4097,"altitude":"531.7","longitude":"12.375","country":"DE","latitude":"47.813"},"sampling_rate":null,"sensor":{"pin":"1","id":xxxx,"sensor_type":{"manufacturer":"Nova Fitness","id":14,"name":"SDS011"}},"id":726721697,"timestamp":"2018-01-27 18:20:35","sensordatavalues":[{"value_type":"P1","value":"61.55","id":1578746871},{"value_type":"P2","value":"41.65","id":1578746872}]}]

Diese Daten können wir jetzt per PHP auslesen und für unsere Zwecke weiter verarbeiten. Im nächsten Schritt erstellen wir eine Mysql-Tabelle, in die wir unsere Sensordaten eintragen und so für unsere eigene Datenauswertung bereitstellen. Wenn die Datenauswertung abgeschlossen ist können wir uns folgende Graphen selbst erzeugen: