Zuletzt habe ich Mitte Mai über mein Projekt berichtet, eine Bewässerungsanlage zu bauen.
Damals bin ich daran gescheitert das WiFi Modul vom Typ ESP8266 über den Arduino anzusteuern: Erst versuchtet ich es mit einem Arduino Shield, was nur mit einer chinesischen Anleitung daher kam. Dann kaufte ich mir ein separates Modul vom Typ ESP-01 welches allerdings den selben Chipsatz benutzt. Das Problem blieb allerdings bestehen:
Egal welche AT-Befehle ich geschickt habe, es gab keine Reaktion von sich. Über das Linux Terminal bekam ich jedoch eine kleine Fehlermeldung dem Gerät entlockt: Irgendetwas mit der Firmware schien nicht in Ordnung zu sein.
Letzte Woche startete ich einen erneuten Anlauf und stoß im Internet auf eine sehr nützlich Anleitung, die das Flashen der Firmware über die serielle Schnittstelle des Arduino beschreibt. Ich nutze hier, um Folgefehler ausschließen zu können, sogar die ältere Version 1 der Firmware. Während das Flashen sollte die Arduino IDE ausgeschaltet sein, da sie sonst die serielle Kommunikation stört und das Update fehlschlagen wird.
Ein Tipp am Rande: Der ESP-01 sollte nur mit einer Spannung von 3,3 V betrieben werden. Neuere Arduino Boards liefern neben 5 V auch 3,3 V. Jedoch muss auch gewährleistet werden, dass über den Ausgangsport des Arduino auch nur maximal 3,3 V beim WiFi Modul ankommen. Ich behelfe mich hier mit einem Spannungsteiler welcher aus drei in Reihe geschalteten 10 KΩ Widerständen besteht.
Über das ESPlorer ließ konnte ich dann die Funktion des Moduls überprüfen: Hier verwendetet ich lediglich die Befehle im Reiter AT-based. Ich schaltete den Chip in den Station Modus und es ließ sich eine Verbindung zu meinem Router aufbauen.
Nun war es soweit und ich konnte mich endlich anfangen ein Arduino Sketch zu programmieren welches Sensordaten an einen Server überträgt.
Um nicht manuell die AT Kommandos zusammenbauen zu müssen WeeESP8266 Bibliothek ein. Unter den Beispielen findet man sogar den Code um einen Web-Request abzusetzten. Mein Demo Sketch orientiert sich sehr stark daran. Jedoch nutze ich statt einem Http GET ein POST um die Daten an den Server zu übertragen. Wenn man jedoch moderne Web Frameworks gewöhnt ist, fühlt man sich sehr stark in die Zeit zurück versetzt: Man muss eben die komplette Http Anfrage selbst als String zusammen basteln.
Zu Demozwecken entschied ich mich die Werte von einem Lichtsensor und der Temperatur alle 30 Sekunden über WLAN an den Server zu senden.
Auf dem Server läuft ein kleines Nodejs Projekt, welches die Anfrage entgegen nimmt und die Werte in einer SQLite Datenbank ablegt. Hier viel auf, dass es für das WiFi Modul nicht immer möglich war die Daten ordnungsgemäß zu senden. Da muss ich mir noch etwas einfallen lassen…
Im nächsten Schritt steht an den Code zu optimieren und fehlertoleranter zu gestalten: Es kann eben immer mal vorkommen, dass eine Verbindung zum Server fehlschlägt. Ebenfalls muss ein geeigneter Modus gefunden werden wann der Arduino die Messdaten ermittelt: 30 Sekunden ist einfach ein viel zu dichter Intervall. Ich lass mir etwas einfallen und werde euch wieder darüber berichten.
Update: Nun auch mit Schaltplan und Demo-Code