Wie finden Sie diesen Artikel? Helfen Sie uns, bessere Inhalte für Sie bereitzustellen.
Vielen Dank! Ihr Feedback ist eingegangen.
There was a problem submitting your feedback, please try again later.
Was denken Sie über diesen Artikel?
Bauteile und Verbindungen
Leider lag meinem Sensor-Kit keine GPS-Antenne bei, so dass ich die im ESDK integrierte GPS-Positionsfunktion nicht nutzen konnte. Glücklicherweise hängt mein Plan nicht davon ab, da ich bereits ein GSM/GPRS/GPS-Modul gekauft habe, das mit dem Kit verbunden werden kann. Ich dachte mir, wenn ich unterwegs Live-Sensordaten sammeln möchte, ist mobiles Internet unerlässlich. Deshalb kaufte ich das A9G-Modul mit GPRS- und GPS-Funktionen.
Das A9G-Modul wird durch vordefinierte Befehle, so genannte AT-Befehle, gesteuert, die über eine serielle Verbindung gesendet werden. Über diese Verbindung können auch die GPS-Daten des Moduls ausgelesen werden. Ich nahm mein ESDK auseinander und entfernte die erforderlichen seriellen Leitungen sowie 5V und GND.
Mein Plan war es, ein separates Python-Skript auf dem Pi auszuführen, das die GPS-Daten vom Modul ausliest und an die vom Sensor-Kit ausgelesenen Luftqualitätsdaten anhängt. Die Umsetzung war jedoch nicht so einfach: Zum einen fand ich heraus, dass ich aufgrund von Timing- und Synchronisationsproblemen nicht direkt über die seriellen Pins des Raspberry Pi mit dem A9G-Modul kommunizieren konnte. Die einzige Möglichkeit zur Kommunikation mit dem Modul von einem Raspberry Pi aus war also die Verwendung eines USB-Seriell-Adapters (FTDI), den ich leider nicht zur Hand hatte. Davon wollte ich mich jedoch nicht abhalten lassen. Also programmierte ich einen meiner Arduinos als serielles Relais um. Danach konnte ich den Arduino mit dem Raspberry Pi verbinden, der dann serielle Daten zum und vom A9G-Modul weiterleitet; ähnlich einem regulären USB-zu-Seriell-Gerät, nur eben über Software. Meine Verbindungen sehen Sie weiter unten, und der Code ist ebenfalls an diesen Artikel angehängt.
Stromversorgung des mobilen ESDK-Loggers
Damit das ESDK mobil ist, musste ich es unterwegs mit Strom versorgen können. Dafür besorgte ich mir eine ziemlich starke Powerbank mit 27.000 mAh. Danach modellierte und druckte ich ein paar Bauteile, mit denen ich die Powerbank am Kit befestigen konnte.
Die Software
Das Python-Skript, das auf dem Pi ausgeführt wird, hat die einfache Aufgabe, Sensordaten über MQTT vom ESDK auszulesen. Es liest auch die GPS-Daten vom A9G-Modul aus und verkettet dann die Informationen zu einem einzigen String, der dann in eine .csv-Datei geschrieben wird. Ich habe das Skript außerdem so programmiert, dass es aus den GPS- und Sensordaten eine .kml-Datei erstellt. Dadurch erhalte ich sowohl eine normale Excel-Tabelle als auch eine Datei (.kml), die ich direkt in Google Earth laden kann, um die Live-Daten aus dem Kit richtig visualisieren zu können.
Der Code besteht aus vier Hauptabschnitten:
Der Erste enthält die MQTT-Einrichtung, dank der sich das Skript mit dem MQTT Broker des ESDK verbinden kann, um die aktuellen Sensormesswerte zu erhalten.
Der zweite Abschnitt enthält die Einrichtung der seriellen Kommunikation. Hier habe ich einfach den Raspberry Pi so eingerichtet, dass er mit dem Arduino kommuniziert, den ich als behelfsmäßigen USB-Seriell-Adapter verwende. Das funktioniert genauso, wenn ich dann ein richtiges FTDI-Modul habe.
Der dritte Abschnitt des Codes sendet einige grundlegende AT-Befehle an die GPS-Platine, so dass sie die GPS-Daten über die serielle Schnittstelle meldet.
In der Hauptschleife des Codes passieren die coolen Sachen. Als Erstes lasse ich prüfen, ob es brauchbare Daten zum Verarbeiten gibt. Daher die ganzen if-Anweisungen.
Wenn sowohl gültige Luftqualitätsdaten vom Kit als auch gültige GPS-Daten von der A9G-Platine vorliegen, fügen die nächsten drei Codezeilen die Luftqualitätsdaten und die GPS-Daten zu einem einzigen String zusammen, der dann in das .csv-Protokoll für diesen Tag geschrieben wird. Die Zeile „datalogfile = open(strftime('%d-%m-%Y') + "_airqlog.csv", "a")“ sorgt dafür, dass nur eine .csv-Datei pro Tag erstellt wird, so dass das Skript nicht jedes Mal eine neue Datei erzeugt, wenn das Kit am selben Tag neu gestartet wird.
Nach dem Schreiben in die .csv-Datei fährt das Skript mit dem Schreiben in die .kml-Datei fort. kml-Dateien benötigen Breitengrad, Längengrad und Höhe, um einen gültigen Punkt auf einer Karte zu erzeugen. Also schrieb ich ein paar Codezeilen, die den Längengrad, Breitengrad und die Höhe aus dem NMEA-Datenformat extrahieren, das von der A9G-Platine übertragen wird.
Die .kml-Datei ist eine sehr spezifische Datei, so dass die Strings ziemlich verschachtelt sind, damit Google Earth die Datei korrekt lesen kann. Ich empfehle Ihnen, hier mehr über .kml-Dateien zu lesen, um das Dateiformat und die Syntax besser zu verstehen. Mein vollständiger Code hängt auch diesem Artikel zu Ihrer Referenz an.
Ich möchte auch darauf hinweisen, dass das ESDK für die Messung der Luftqualität in Innenräumen konzipiert ist. Für diesen Zweck ist die derzeit im Kit enthaltene Sensorkombination perfekt geeignet. Im Freien sind CO2, flüchtige organische Verbindungen (VOC), Temperatur, Luftfeuchtigkeit und Partikel wohl nicht ausreichend, um die ganze Geschichte zu erzählen. Kohlenmonoxid (CO) und Stickstoffdioxid (NO2) wären in einem Logger für die Außenluftqualität aussagekräftiger. Also werde ich wahrscheinlich einen Weg finden, diese Sensoren bald zu implementieren.
Alle CAD-Daten und der Code, die ich in diesem Artikel verwendet habe, sind unten angehängt, so dass Sie sie bei Bedarf nachschlagen können.
Teil 1 dieser Serie zeigt den Bau der Zellen für die Luftqualitätskarte.
Kommentare