Internet Konnektivität
Nachdem erste Versuche mit einem Arduino, einem DHT22 Temperatur und Luftfeuchte Sensor und einem Ethernet Shield erfolgreich waren, haben wir eine WiFi Alternative gesucht — und im seit geraumer Zeit bei Bastlern sehr beliebten ESP8266 Chip gefunden. Da er kaum $2 kostet, haben wir gleich eine Hand voll davon eingekauft. Dieses kleine Wunderwerk funktioniert prima — in zahlreichen verschiedenen Varianten. Im einfachsten Fall belässt man die vorhandene “AT”-Firmware darauf, verbindet seine Seriell-Pins (und ein paar mehr) mit dem Arduino. Dann erstellt man sich in seinem Sketch ein Serial Objekt und spricht dann über die serielle Schnittstelle mit klassischen AT-Befehlen [PDF] mit dem ESP8266. Auf diese Weise bucht man ihn in sein heimisches WLAN ein. Das Absenden von HTTP Requests (zum Übermitteln von Sensordaten an einen Server) kann man dann “zu Fuß” selbst auch mit AT Kommandos machen oder man findet eine Library, die das schon gekapselt hat. Aber hier will ich nicht ins Detail gehen. Auch das klappte dann irgendwann.
NodeMCU & LUA
LUA ist eine derzeit hippe Programmiersprache und in der Community wurde mit dem NodeMCU Projekt eine LUA Firmware für den ESP8266 Chip geschaffen. Man kann auch schon fertige LUA-Boards mit EPS8266 Chip kaufen und es gibt eine praktische Oberfläche für die, die nicht alles von der Commandline aus machen wollen oder Eclipse oder andere Tools dafür anwerfen wollen (was aber auch geht). Da wir ziemlich schnell auf Timing-Probleme gestoßen sind, haben wir den LUA Ansatz aber nicht weiter verfolgt.
ST Microelectronics & mbed
So ein Arduino ist eine feine Sache, aber eigentlich ist er für das was er kann zu teuer, zu langsam, hat zu wenig Speicher (RAM wie Flash) und weitere Nachteile. Auf der Suche nach etwas Besserem stolperten wir über die mbed Entwicklungsumgebung für ARM-Prozessorarchitekturen und die Firma ST Microelectronics mit ihrem mbed kompatiblem Nucleo32 Board, was uns schon auf Grund der Cortex M* Prozessorarchitektur und der deutlich höheren Taktfrequenz gefiel (wobei letztere jetzt nicht unbedingt notwendig für unser Projekt ist und wir ja auch auf den Stromverbrauch achten müssen). Via Twitter haben wir STM angesprochen, nach Antwort per eMail unser OK Lab erläutert und unsere Bastelideen. Und wir haben einfach mal gefragt, ob sie uns nicht mit ein paar Boards unterstützen wollen.
@ST_World Any chance you'd like to support #OpenData & #citizenscience with a few free #STM32F4 discovery boards for us? 🙂 (st)
— Code for Bonn (@codeforbonn) May 28, 2015
Das taten sie sehr gern, denn sie fanden unsere Ambitionen toll! (Und ein paar Discovery Boards mit TFT Touchscreen gab’s noch dazu! Manchmal muss man einfach nur fragen. Haben wir später nochmal bei einer anderen Firma wiederholt, siehe unten…)
Hey, WOW! The sample boards from @ST_World for us arrived today!! Hurray & thanks a ton!! /cc @DorkbotBonn pic.twitter.com/dyVzMr2o3H
— Code for Bonn (@codeforbonn) July 1, 2015
Das Setup war von Arduino auf Nucleo/mbed schnell umgebaut und lief dann auch stabil. Aber vom ESP8266 lediglich dessen WiFI Funktionalität via AT-Befehle nutzen? Das gefiel uns nicht so ganz. Der kann mehr!
ESP8266 kann mehr
An dieser Stelle wird es Zeit, zu erwähnen, dass so ein ESP8266 nicht nur ein reiner WiFi Chip ist, sondern auch eine komplette CPU inklusive einiger GPIO Pins, einer Echtzeituhr, einem Analog-Digital-Converter mit (leider nur) einem analogen Input (0..1V) und einer kompletten, existierenden Toolchain für die Programmierung in C/C++. Warum also noch einen “externen” Mikroprozessor, wie einen Arduino oder auch ein STM Nucleo Board nutzen, wenn die Leistung dieses kleinen, im ESP8266 integrierten Mikroprozessors ausreichend ist? Ein Arduino läuft mit 16MHz, ein ESP8266 mit 80 bzw. 160MHz! Und der Kostenunterschied erst!! Natürlich muss man auf den Stromverbrauch achten — wenn man als Ziel hat, die Box mit Akku zu betreiben. Aber wir sind ja noch im Prototypenbau, optimiert wird später!
Leider war es zunächst etwas aufwändig, die vom Hersteller dafür vorgesehene Toolchain an den Start zu bekommen (aber natürlich auch kein Hexenwerk). Es geht jedoch zum Glück seit einiger Zeit deutlich einfacher, denn seit Version 1.6.4 kann man der Arduino IDE andere Board-Architekturen quasi per Plug-In unterjubeln und ein paar findige Freaks haben genau das für den ESP8266 gemacht. Die Installation läuft problemlos und mit einem FTDI- oder CP2102-Dongle (USB↔Seriell) überträgt man sein Kompilat (auch mit 460.800 oder gar 921.600 Baud) direkt aus der Arduino IDE auf den ESP8266 (de facto wird da immer eine komplett neue Firmware im Hintergrund gebastelt, die dann übertragen wird). Das klappt und bringt natürlich schonmal eine willkommene Verkleinerung der Ausmaße der nötigen Hardware, da der ESP8266 im Vergleich zu einem Arduino Uno oder dem STM Nucleo Board deutlich kleiner ist.
Anschluss gesucht
Leider hat so ein ESP8266–01 Modul, wie wir es verwendet haben, nur zwei nach außen geführte GPIO Pins (und der analoge Input ist nicht dabei), was für den Anschluss zahlreicher Sensoren natürlich nicht ausreichend ist. Aber auch da gibt es Abhilfe, denn dieser Chip ist so dermaßen beliebt, dass es ihn in zahlreichen Bauformen gibt — auch solchen, die sämtliche Pins der CPU nach außen geführt haben. Die bulgarische Firma Olimex hat da etwas hübsches und günstiges im Angebot, was wir bestellt haben, das MOD-WIFI-ESP8266-DEV Board.
Und dann sind wir noch über opensensors.io gestolpert, einem öffentlichen und kostenlosen Mosquitto (MQTT) Server (“Broker”). MQTT ist — wie oben schon angedeutet — ein Protokoll, welches sich gerade für IoT Schnittstellen etabliert. Man kann sich auch einen eigenen MQTT Broker aufsetzen, aber für den Moment genügen uns die öffentlichen. Meist ist es so: wenn man seine Sensordaten auch öffentlich bereitstellt — was wir in unserem Fall ja machen würden — , dann sind die Accounts oft kostenlos. Eine (wie auch immer geartete) Visualisierungs-Software kann dann beispielsweise auf ein Echtzeit-Streaming-API des MQTT Brokers aufsetzen oder über das MQTT API direkt erfolgen — inklusive aller historischer Daten. Aber so weit sind wir ja noch nicht.
Mit GSM/GPRS Mobilfunk ins Internet?
Und dann war da ja noch das Thema WiFi vs. Mobilfunk für die Internet-Verbindung. Das würde uns die nicht so einfache Konfiguration der Verbindung zum heimischen AP erleichtern und Mobilfunk gibt es ja heutzutage wirklich fast überall. Denn: wir brauchen ja kein LTE und auch kein UMTS. Wir senden ja nur ein paar Byte und das auch nur vielleicht einmal pro Stunde. Da reicht natürlich schon EDGE.
Zur gleichen Zeit stolperten wir über das C027-G25 Board von U-Blox. Sehr cool: neben einem GSM/GPRS Modul hat es sogar GPS — und wir müssen ja auch die Standorte unserer Boxen kennen, wenn wir später mal die Messwerte geografisch auf einer Karte von Bonn visualisieren wollen. Natürlich kann man sich das manuell notieren, wo man eine Box aufbaut. Aber irgendwann, wenn man mal tausende der Boxen ausgeliefert hat, macht das keinen Sinn mehr und viel cooler ist es natürlich, wenn die Box ihre Position selbst kennt und zurückfunken kann. Das Board basiert, wie die Nucleos auch, auf einem Cortex M3 Prozessor und ist mbed kompatibel — großartig!
Leider ist so ein C027 Modul nicht ganz günstig (UVP ca. €100,–, aber im Netz z.T. für ca. €70 zu haben). Kurzerhand haben wir mal wieder beim Hersteller via Twitter angefragt, ob sie uns da nicht sponsern wollen:
Schau mal, @dorkbotbonn, Cortex M3, GSM & GPS! Aber immer noch €70 … Ob @ublox uns beim @codeforbonn sponsern würde? http://t.co/YlBUTt6mMD
— Stefan Wolfrum ☺ (@metawops) October 18, 2015
Es ging ein bisschen hin und her, aber schließlich hat es geklappt!
YAYYY! Was kam denn da mit der Post aus der Schweiz von @ublox? C027 Module! THX so much, Katja!! ??? pic.twitter.com/crrFLwqrek
— Code for Bonn (@codeforbonn) November 1, 2015
Müssen wir uns jetzt mal anschauen, wie wir mit dem GSM Modul und dem GPS Empfänger in mbed umgehen können. Und da Stefan bei der Telekom arbeitet, ist er natürlich auch dran, von dort ein paar M2M SIM Karten gesponsert zu bekommen.
Zum prototypen ist das sicher gut, aber wenn man dann mal ein echtes Produkt daraus machen will, ist das natürlich auch zu groß, zu teuer, zu überdimensioniert. Aber U-Blox hat die relevanten Module ja auch einzeln im Angebot … 😉
Stabiler Prototyp
Jetzt geht es erst einmal darum, eine stabile Version der Hardware inkl. Software fertigzustellen, damit wir in einen ersten kleinen Friendly User Test einsteigen können, um zu sehen, wie sich alles verhält und wo wir noch verbessern müssen. Stromverbrauch-Optimierungen stehen da ganz sicher ganz oben auf dem Zettel. Das Prinzip ist klar: die meiste Zeit schlafen die Sensoren und die CPU und das WiFi. Man misst ja nicht jede Sekunde, sondern nur alle paar Minuten. Dazu weckt man die notwendigen Komponenten auf und ermittelt die Messwerte. Auch das Versenden an den MQTT Broker muss man nicht jedes Mal machen, wenn man gemessen hat, sondern vielleicht einmal pro Stunde.
So sieht unser aktueller Prototyp aus:
Positionierung
Dabei wird es auch interessant, Erfahrungswerte zu sammeln, wo und wie man so eine Sensorbox sinnvollerweise aufstellt. Der Feinstaubsensor der Messstation Bonn-Auerberg ist auf 3,50m Höhe montiert — und es ist keine Wand in der Nähe. Das könnte ja bei einem Balkon oder einer Terrasse schon schwierig werden. Eigentlich gibt es ja immer irgendwo eine Wand oder ein Dach. Und 3,50m sind schon hoch. Wer will sich das schon aufs Dach schrauben? Und wenn die Prototypen noch eine Steckdose brauchen wird’s doppelt knifflig.
Vergleichbarkeit
Und dann ist da noch der Punkt mit der Vergleichbarkeit der gemessenen Werte. Temperatur, Luftfeuchte, Luftdruck sind sicher nicht das Problem, da stellt sich eher die Frage nach der Genauigkeit. Aber die von uns verwendeten Feinstaubsensoren basieren natürlich auf einem ganz anderen Messverfahren als die offiziellen — und kosten auch nur einen Bruchteil. Unsere Werte sind sicher nicht vergleichbar mit den offiziell gemessenen. Aber nichtsdestotrotz sind sie untereinander, relativ vergleichbar und ein Maß für die Feinstaubbelastung.
Ausblick
Wir haben neue Feinstaubsensoren entdeckt, Laser-basiert, die gewisse Vorteile versprechen (vor allem weniger Stromverbrauch). Sie sind unterwegs zu uns. Genau wie Solarzellen, Li-Ion-Akkus und Ladeschaltungen. Luftdruck-Sensoren sind schon angekommen. Alles muss eingebaut werden. Das ist unsere aktuelle Forschungsfront. Stay tuned! 😉