{"id":928,"date":"2015-10-10T20:22:42","date_gmt":"2015-10-10T19:22:42","guid":{"rendered":"http:\/\/www.admindu.de\/wordpress\/?p=928"},"modified":"2015-10-10T23:24:57","modified_gmt":"2015-10-10T22:24:57","slug":"spielen-mit-dem-esp8266","status":"publish","type":"post","link":"https:\/\/www.admindu.de\/wordpress\/?p=928","title":{"rendered":"Spielen mit dem ESP8266"},"content":{"rendered":"<p>Hallo ihr Lieben. Ich habe mal wieder ein wunderbares Spielzeug entdeckt: WLAN Module basierend auf dem <a title=\"ESP8266\" href=\"http:\/\/espressif.com\/en\/products\/esp8266\/\" target=\"_blank\">ESP8266<\/a> der Firma <a title=\"Espressiv Systems\" href=\"http:\/\/espressif.com\/\" target=\"_blank\">Espressif.<\/a> Mittlerweile habe ich verschiedene Module bei Ebay und Amazon erworben und getestet. Auf dem folgenden Bild meines Breadboards sieht man oben in der Mitte ein ESP12 auf einem Breakout und mittig links ein ESP01. Die Module kosten je nach Angebot zwischen 2 und 5 Eur das St\u00fcck.<\/p>\n<p><a href=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/04\/IMG_0696.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-931\" src=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/04\/IMG_0696-300x300.jpg\" alt=\"ESP Laborboard\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/04\/IMG_0696-300x300.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/04\/IMG_0696-150x150.jpg 150w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/04\/IMG_0696-1024x1024.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Oben links sieht man eine 3.3v Stromversorgung auf Basis eines <a title=\"LD1117\" href=\"http:\/\/www.mouser.com\/ProductDetail\/STMicroelectronics\/LD1117V33\/?qs=arR7071FstdSYX%2FAthFGRA%3D%3D\" target=\"_blank\">LD1117V33<\/a>. Rechts oben einen <a title=\"USB2TTL\" href=\"http:\/\/www.elv.de\/mini-usb-modul-um2102-komplettbausatz.html\" target=\"_blank\">USB2TTL Konverter von ELV<\/a> und unten mittig einen <a title=\"Atmega168\" href=\"http:\/\/www.atmel.com\/devices\/atmega168.aspx\">Atmega168<\/a>.<\/p>\n<p><!--more--><\/p>\n<p>Meine Module wurden alle mit einer AT Firmware geliefert. D.h. die Funktionen des Moduls werden, wie fr\u00fcher bei einem Modem, \u00fcber AT Kommandos gesteuert. Manche Module, wie z.B. die ESP01, hatten die Stock-Firmware von Espressif. Diese braucht f\u00fcr die serielle Anbindung 115200 Bps. Und, was noch l\u00e4stiger ist, einen seltsamen Line-Terminator, damit das Modul \u00fcberhaupt reagiert. Mit Kermit unter Linux f\u00fchrt der folgende Parametersatz zum Erfolg:<\/p>\n<p class=\"postmetadata alt\">SET LINE \/dev\/ttyUSB0<br \/>\nSET CARRIER-WATCH OFF<br \/>\nSET FLOW-CONTROL NONE<br \/>\nSET SPEED 115200<br \/>\nSET TERM NEWLINE ON<\/p>\n<p>Die ESP07 und ESP12 sind von <a title=\"AI Thinker\" href=\"http:\/\/www.ai-thinker.com\/\">AI-Thinker<\/a> und kommen mit einer vom Hersteller angepassten Firmware. Diese ist eher Arduino-Freundlich mit 9600 Bps anzusprechen. Und braucht keinen speziellen Line-Terminator. In Kermit verwende ich:<\/p>\n<p class=\"postmetadata alt\">SET LINE \/dev\/ttyUSB0<br \/>\nSET CARRIER-WATCH OFF<br \/>\nSET FLOW-CONTROL NONE<br \/>\nSET SPEED 9600<\/p>\n<p>F\u00fcr die Verwendung der Module mit einer AT Firmware in eigenen Projekten gibt es im Netz diverse Libraries und Howtos. Meine geliebten Atmegas und auch Arduino tun sich da allerdings etwas schwer, da auf der MCU meist nicht genug RAM zur Verf\u00fcgung steht um gr\u00f6\u00dfere Datenpakete, HTML-Requests oder <a title=\"MQTT\" href=\"http:\/\/mqtt.org\/\" target=\"_blank\">MQTT<\/a>-Messages effizient zu verarbeiten bzw. zu parsen. Auch hat mich die Tatsache irritiert, dass die Module mit dieser Firmware eine Art Cloud-Update bieten und dabei AI-Thinker respektive Espressif-Server kontaktieren. Da bricht meine Paranoia durch, wer will das schon und wer weis, was die noch alles machen. Wenn wir es schon von Paranoia haben: Das weiter unten erw\u00e4hnte SDK liefert einen Teil als binary Libraries mit. Ja, auch das ist ein komisches Gef\u00fchl! Aber zu Mindestens sind die Libs nicht <a href=\"https:\/\/de.wikipedia.org\/wiki\/Obfuskation\" target=\"_blank\">obfuscated<\/a> und man kann sich mit strings oder einem Decompiler einen gewissen \u00dcberblick verschaffen.<\/p>\n<p>Also habe ich mich nach alternativen M\u00f6glichkeiten umgesehen, die Module einzusetzten. Dabei habe ich mich mit zwei &#8220;Custom Firmwares&#8221; auseinandergesetzt:<\/p>\n<ul>\n<li><a title=\"NodeMCU\" href=\"https:\/\/github.com\/nodemcu\/\" target=\"_blank\">NodeMCU<\/a><\/li>\n<li><a title=\"Frankenstein\" href=\"https:\/\/github.com\/nekromant\/esp8266-frankenstein\" target=\"_blank\">Frankenstein<\/a><\/li>\n<\/ul>\n<p>Beide Firmwares kann man entweder anpassen und selber kompilieren, oder aber die bereitgestellten Binary-Versionen flashen. Da das jeweilige Vorgehen zum flashen stark plattformabh\u00e4ngig ist und sich h\u00e4ufig \u00e4ndert, sei hier auf die Dokumentation des jeweiligen Projekts verwiesen. Bei NodeMCU k\u00f6nnen eigene Entwicklungen in LUA gescripted und auf dem Modul ausgef\u00fchrt werden. Frankenstein bietet eine Art API um das Modul via serieller Schnitstelle zu steuern. F\u00fcr NodeMCU gibt es eine gute Community und viele Beispiele im Netz. Die M\u00f6glichkeit, Code direkt on-the-fly via serieller Konsole auf dem Modul auszuf\u00fchren hat seinen Reiz. Letztlich war ich aber auch mit LUA nicht so gl\u00fccklich, sodass ich mich entschieden haben nativ in C\/C++ f\u00fcr das Modul zu entwickeln. Das kenne und liebe ich von meinen Atmegas. Dazu habe ich mir die folgenden M\u00f6gichkeiten angeschaut:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/esp8266\/Arduino\" target=\"_blank\">Arduino for ESP8266<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/pfalcon\/esp-open-sdk\" target=\"_blank\">esp-open-sdk<\/a><\/li>\n<\/ul>\n<p>Die Arduino-Plattform f\u00fchrt schnell zu brauchbaren Ergebnissen und erleichtert das flashen der Module. Wobei ich darauf hinweisen m\u00f6chte, dass nicht alle Arduino-Libraries direkt verwendbar sind. Auch hier gibt es eine lebendige Community und die Anzahl der verwendbaren Libraries steigt stetig an. Eines der gr\u00f6\u00dften Mankos zum Zeitpunkt dieses Eintrags ist die fehlende Unterst\u00fctzung f\u00fcr SSL\/TLS. Wenn ich die Tage Zeit finde, dann beschreibe ich mein Aruduino Projekt genauer. Ich habe auf einem Development-Board von EBay einen Web-Server realisiert, der die Web-Root von einer SD-Karte liest. Auf dem Board befinden sich diverse Sensoren (DHT11, OneWire DS18B20) und Aktoren (Relais, RGB-LED). Hier ein Bild vom Aufbau:<\/p>\n<p><a href=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/10\/IMG_1379.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-950\" src=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/10\/IMG_1379-300x227.jpg\" alt=\"IMG_1379\" width=\"300\" height=\"227\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/10\/IMG_1379-300x227.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2015\/10\/IMG_1379-1024x775.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Letztlich entwickle ich jetzt die meiste Zeit eingenst\u00e4ndigen Code mit vi und esp-open-sdk. Im SDK von Espressif wird seit Version 1.3 auch eine brauchbare Library f\u00fcr SSL mitgeliefert. Ein Beispiel-Code f\u00fcr TLS-basiertes HTTPS findet sich zum Beispiel <a href=\"https:\/\/github.com\/Caerbannog\/esphttpclient\" target=\"_blank\">in diesem Projekt<\/a>. Zur Zeit entwickle ich auf Basis des <a href=\"https:\/\/github.com\/tuanpmt\/esp_mqtt\" target=\"_blank\">esp_mqtt Projekts<\/a> eine eigene Firmware, die Daten als JSON per HTTPS-Get an ein <a href=\"http:\/\/emoncms.org\/\" target=\"_blank\">EMONCMS<\/a> (alternativ<a href=\"https:\/\/thingspeak.com\/\" target=\"_blank\"> Thingspeak<\/a>) \u00fcbertragen kann. Letztlich ist die Zielplattform egal, die meisten Plattformen unterst\u00fctzen eine REST-Api via HTTP oder HTTPS. Nat\u00fcrlich kann man auch das esp_mqtt Projekt als Basis verwenden, um die Daten per MQTT zu \u00fcbertragen. Zum Beispiel an <a href=\"http:\/\/mosquitto.org\/\" target=\"_blank\">Mosquitto<\/a> oder die neue <a href=\"https:\/\/aws.amazon.com\/de\/iot\/\" target=\"_blank\">IOT Plattform von Amazon<\/a>. Irgendwann stelle ich meine Projekte noch im Detail vor \ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hallo ihr Lieben. Ich habe mal wieder ein wunderbares Spielzeug entdeckt: WLAN Module basierend auf dem ESP8266 der Firma Espressif. Mittlerweile habe ich verschiedene Module bei Ebay und Amazon erworben und getestet. Auf dem folgenden Bild meines Breadboards sieht man oben in der Mitte ein ESP12 auf einem Breakout und mittig links ein ESP01. Die &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.admindu.de\/wordpress\/?p=928\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Spielen mit dem ESP8266&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92,94],"tags":[97,95,98,96],"class_list":["post-928","post","type-post","status-publish","format-standard","hentry","category-elektronik","category-esp8266-bastelei","tag-ardunino","tag-esp8266","tag-nodemcu","tag-sdk"],"_links":{"self":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=928"}],"version-history":[{"count":25,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/928\/revisions"}],"predecessor-version":[{"id":960,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/928\/revisions\/960"}],"wp:attachment":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}