WLAN-Shields für Arduino habe ich schon öfter gesehen, in der Regel sind die Dinger aber so teuer dass es kaum Spaß macht sich dafür Spielereien auszudenken. Hier spielt der ESP8266 seine größte Stärke aus: das Ding ist echt preiswert. Ich habe direkt mehrere bestellt, zum Stückpreis von etwa 3,50 Euro!
Wie üblich bei Chinaware hat die Lieferung knapp drei Wochen auf sich warten lassen. In der Zeit habe ich mir interessiert Beispielprojekte wie die Wetteranzeige auf zeflo.com angesehen. Auf der Basis habe ich dann auch meinen ersten Test aufgebaut. Den Code kann ich bei Bedarf posten, aber der ist in praktisch der gleichen Form auch an anderen Stellen zu finden.
Man sieht im Code dass keine Bibliothek für den ESP8266 benutzt wird. Gesteuert wird wie gesagt mit ein paar simplen AT-Kommandos, also einfache kurze Strings die mit der seriellen Schnittstelle an das Modul übergeben werden. So bleibt jede Menge Flash für eigene Programmierung übrig, man flutet nicht den ganzen Arduino mit einem IP-Stack.
Ich habe einen Temperatur- und Luftfeuchtigkeitssensor (DHT11) angeschlossen und eine entsprechende Bibliothek benutzt. Mein Arduino sendet jetzt etwa jede Minute einen HTTP GET-Request an einen Server der daraus mehr oder weniger hübsche Graphen macht (eher weniger hübsch, der Sensor lässt echt zu wünschen übrig ). Debug-Informationen werden über ein SoftSerial-Interface und einen USB-Seriell-Adapter an den Computer geschickt.
Der ESP verträgt dem Vernehmen nach definitiv keine 5V als Versorgungsspannung. An den Datenleitungen hat der direkte Anschluss an den Arduino bei mir genau wie bei Zeflo einfach funktioniert. Und in meinem Fall liefert der Arduino auch ohne zusätzliche Stromversorgung (also einfach am USB-Port meines Notebooks) genug Saft um das WLAN-Modul zu betreiben.
Ich habe versucht den ESP mittels SoftSerial-Schnittstelle anzusprechen und die Debug-Infos über die reguläre serielle des Arduinos laufen zu lassen. Leider ohne Erfolg. Später wird man damit leben können, aber beim Basteln ist das lästig: zum Programmieren trenne ich jetzt jedes Mal die 3,3V vom ESP, sonst kommt der sich mit dem Programmer ins Gehege (Tips dazu nehme ich dankend an!).
Oh, und mit dem Beispiel-Code kommt es beim Start öfter zur Meldung dass das Modul nicht gefunden wurde. Nach ein oder zwei Resets geht es dann. Da muss ich den Code wohl noch etwas robuster gestalten…
Abgesehen davon: ich bin hellauf begeistert, und ich habe jeden Tag neue Ideen die ich mit sowas umsetzen kann. Internet of Things, here I come!
Noch mal eben ein paar FAQ (ohne Gewähr, Kommentare und Berichtigungen dazu nehme ich auch gerne entgegen):
- Spricht das Ding IPv6? Leider nein. Zumindest nicht mit der Firmware die auf meinem installiert ist. Keine Ahnung ob das SoC das theoretisch unterstützen würde.
- Wie ist die Reichweite? Habe ich noch nicht ausprobiert. Auf meine Frage hin schrieb Zeflo „besser als mit einem Samsung Galaxy S Plus„, das stimmt mich erwartungsvoll. In einem Youtube-Video haben Leute ohne weitere Umbauten mehr als 350 Meter zu einem Access Point überbrückt. Allerdings im Freien, bei Sichtkontakt.
- Wieviel Strom verbraucht das Modul? Habe ich noch nicht gemessen. Sicher mehr als ein entsprechender Bluetooth-Sender, schätze ich. Aber wenig genug um samt Arduino am USB-Port betrieben zu werden.
- Wie funktioniert das mit der Anmeldung im WLAN? Ich habe bislang nur in meinem WPA2-verschlüsselten WLAN gespielt. Ich habe SSID und Passwort hart programmiert. Damit verbindet sich das Modul und holt sich ohne weiteres Zutun eine IPv4-Adresse vom DHCP. Wie gesagt: leider kein IPv6.
- Wie nutze ich das Modul als Aktuator? Das ist mir auch noch nicht klar. Regelmäßig etwas zu pollen würde gehen, kann aber nicht die Lösung sein. Auf der Platine sind auch zwei GPIOs herausgeführt, die müssen ja auch für irgendwas gut sein…
Ich bastele auf jeden Fall weiter. Der nächste Schritt wird sein die Reichweite im Haus zu testen…
Sehr interessant! Ich bin auf weitere Beiträge gespannt.
Habe hier aktuell die DHT22 im Einsatz, und die funktionieren an sich ziemlich gut, man muss nur aufpassen dass man nicht öfter als alle 2 Sekunden nen Wert liest, ansonsten springt der Messwert stark hin und her.
Ich erstelle für die Sensoren auch Graphen, das sieht aktuell dann so aus: https://cloud.kurz.pw/NkvEBK/
Werte werden alle 2 Sekunden übertragen, und dann von Python-Pandas auf 1 Wert/Minute geglättet und mit matplotlib gezeichnet, da macht es dann nicht so viel aus wenn doch irgendwie mal 1 falscher Messwert dabei ist oder ein paar fehlen.
ESP8266 Module hab ich mir auch ein paar bestellt, werden wahrscheinlich auch im laufe dieser oder nächster Woche ankommen, evtl. bastle ich mir dann auch einen Funk-Sensor damit, wobei ich da mit dem Stromverbrauch mal genauer gucken muss und im Zweifel doch eher nach nem NRF24L01 greife, je nach dem was (relevant) stromsparender und noch halbwegs bequem und stabil ist.
@Bastl: Kommt.
@Lukas: DHT22 sind schon bestellt. Den DHT11 hatte ich hier noch rumliegen, aber mit so einem DHT22 macht die Messwerterfassung mehr Spass. Denke ich.
Dein Graph sieht gut aus. Bei mir werden die Messwerte wohl in mein Zabbix laufen, dementsprechend werden dann auch die Graphen aussehen. Zwei Sekunden Aufloesung brauche ich nicht ansatzweise, aber die Idee oft zu messen und Messwerte zu glaetten ist gut. Mal sehen, vielleicht mache ich das dann auch so. Intern.
Wenn Du Erfahrungen mit dem Stromverbrauch hast, lass es mich mal wissen. Ich denke fuer Batteriebetrieb wird das eh nichts sein, und an der Steckdose wird sich vermutlich der Arduino den Loewenanteil des Stroms ziehen…?
Mitlerweile habe ich das DHT22 Modul direkt am ESP8266 angeschlossen, ohne externen Microcontroller (da drin steckt ja bereits einer der wesentlich stärker ist als so ein ATMega328).
Stromverbrauch liegt irgendwie so bei ~30-40mA@3.3V, wobei mein Multimeter da leichte Probleme bekommt in der Range zu messen und es evtl. noch was höher ist.
Der Controller besitzt noch einen „Deep Sleep“ Modus, der ist nur leider etwas unpraktisch da es eigentlich nur ein automatischer Reset ist, aber der Reset erfolgt nicht intern, sondern durch einen GPIO Pin welcher auf dem Modul leider nicht zugänglich ist.
Da ich das Ding gerne über Wochen/Monate von einem 18650 Akku betreiben möchte werde ich wahrscheinlich mal versuchen ein kleines Käbelchen direkt an den ESP8266 zu löten um diesen GPIO-Pin (GPIO16) mit Reset zu verbinden, danach soll der Stromverbrauch angeblich unter 1mA liegen, danach ists nurnoch eine Frage des richtigen Intervalls für nen guten Kompromiss zwischen Datendichte und Akkulaufzeit.
Wenn das alles fertig ist werde ich den Code mal aufräumen und veröffentlichen und einen Artikel auf meinem Blog veröffentlichen, auch mit Bildern usw.
Ich hab mir aus den verlinkten „anderen Stellen“ etwas Code gebastelt mit dem ich zumindest mal ein HTTP-GET erfolgreich absetzten kann. Das ganze ist noch immer sehr instabil. Wäre echt nett wenn du deinen Code veröffentlichen würdest.
Oh und danke für deinen Blog, bin ja jetzt schon seit über drei Wochen ein treuer Leser ;)
Uh… das ist lange her. Ehrlich gesagt habe ich die Sourcen irgendwann weggeraeumt. So richtig stabil lief das bei mir auch leider nicht.
Aber ich habe wirklich nicht nennenswert mehr gemacht als das was Du unter dem Link findest. Ich bin seit einigen Monaten nicht mehr dazu gekommen mich damit zu beschaeftigen, aber ich glaube als naechstes versuche ich mal eine Firmware direkt auf den ESP zu kriegen…
Tjo, dann muss ich halt doch selber etwas mehr rumbasteln. Hoffnung soll ja nen verdammt langen timeout haben ;)
Danke für die Antwort.
Danke für Ihre Artikel.
Ich habe Arduino für ESP8266 entdeckt und Programm direkt für ESP8266 Controller in Arduino IDE geschrieben. Da braucht man kein zusätzlicher Arduino-Board. Hier sind meine ersten Sketche http://esp8266-server.de/
Sie haben eine tolle Seite – das erste mal dass ich jemanden sehe, der sich ernsthaft mit I2C am 8266 befasst hat! Vielen Dank dafür!
Danke.