NodeMCU / LUA

Wie ich auf ESP8266 SoC schon beschrieben habe, gibt es einen Komplettbaustein für unter 5€, der CPU, RAM., IO-Ports und sogar WiFi enthält. Das hat jemand mit dem Namen Hong auf die Idee gebracht, den Einstieg auf Basis dieses Chips deutlich zu vereinfachen. Das Ergebnis ist NodeMCU. für unter 10€ kann jeder den Baustein in China bestellen und sehr einfach darauf weiter entwickeln.

Nicht Jeder kann mit Lötkolben, Widerständen etc. einfach umgehen und das Potential des ESP8266 haben durchaus andere findige Leute dazu gebracht, Erweiterungen und eigene Boards mit dem ESP8266 als Basis auf den Markt zu bringen. Ein sehr interessantes Projekt ist dabei NodeMCU. Es enthält nicht nur den ESP8266, sondern zugleich auch einen USB/Seriell-Wandler, zwei Taster und natürlich viele IO-Anschlüsse. Es ist also eine ideale Basis für eigene IoT-Projekte..

Mittlerweile haben noch weitere Hersteller kompatible Boards entwickelt. Siehe dazu ESP8266 SoC oder WeMOS IoT-Device

Entsprechende Hardware gibt es für weniger als 10€ bei den üblichen Quellen zu kaufen. NodeMCU nutzt eine eigene Firmware, in der mit der Skriptsprach LUA dann eigene Lösungen entwickelt werden können. Die Firmware enthält einen LUA-Interpreter, der Befehle über eine serielle Verbindung annimmt und so auch programmiert wird.

Was ist drin ?

Interessant ist der Baustein, weil er den ESP8266-Chip gleich mit einem USB/Seriell-Adapter (Basierend auf CH340) versehen hat und mit den Sockelleisten ein direkter Einsatz auf den üblichen Steckbrettern (Breadboards) möglich ist. Über den USB-Anschluss wird das Board auch mit Strom versorgt und kann über eine Terminalsoftware direkte angesprochen werden.


Abbildung NodeMcu 0.9. Etwas breit für das Breadboard. NodeMCU 1.0 ist schmaler und hat einen aktuelleren Chip

Die Beschriftung auf dem Board sorgt weiterhin für Klarheit bei den Anschlüssen: Oben sind die 10 Input/Output-Leitungen, die per Software natürlich nahezu alle Protokolle sprechen können, so lange Sie mit 3,3 Volt arbeiten.

Rechts ist der USB-Anschluss, welcher das Gerät auch per Strom versorgen kann und eine Verbindung zum PC als COM-Port bereit stellt.. Zudem gibt es daneben zwei kleine Taster. Der oberste aktiviert die Funktion den ESP8266 selbst zu aktualisieren, indem er den Pin D0 auf Masse zieht. Der Taster "User" unter dem USB-Anschluss soll GPIO16 auf Masse ziehen. Am linken oberen Ende des WiFi-Bausteins ist eine kleine LED zu sehen, die bei seriellen Übertragungen blinkt. Früher konnte man per LUA die LED blinken lassen (node.led() ) und den User-Taster direkt abfragen (node.key()), was aber mit der aktuellen Firmware nicht mehr geht.

Es bleibt aber im Kern ein ESP8266 Modul, welches nur auf ein nettes Trägerboard samt USB-Anbindung gelötet ist und die Stiftleisten einen schnellen Einsatz auf Streckbrettern erlaubt. Insofern gelten auch alle Informationen auf der Seite ESP8266 SoC. Der Begriff NodeMCU und LUA ist ein ESP8266 mit einer besonderen Firmware, die den ESP8266 alleine auch als Computer zur Verarbeitung von Daten nutzt. Es ist also keine Kombination von Arduino o.ä. zur Verarbeitung und dem ESP8266 als billigem WiFi-Modul mehr erforderlich.

Sie müssen nicht unbedingt das oben abgebildete NodeMCU-Board kaufen. Sie können natürlich jedes ESP8266 Board (Siehe ESP8266 SoC) einsetzen und die serielle Verbindung über einen passenden Dongle herstellen. Das ist oft sogar die noch billigere Alternative. Diverse Videos auf YouTube etc. beschreiben dies.

Lua on the ESP8266
Part 1:https://www.youtube.com/watch?v=_GSYZ1e14nc
Part2: https://www.youtube.com/watch?v=G4ArTQ_KWs4 

Serielle Verbindung

Für die ersten Schritte reicht es also schon, das NodeMCU-Board per USB-Kabel an einen PC anzuschließen. Unter Windows werden dann natürlich erst die Treiber gesucht. Erforderlich sind hier die Treiber für einen CH340-Chipsatz.

Kniffliger kann es sein, wenn ihr Windows, Mac, Linux mit dem CH340 nichts anfangen kann und entsprechende Treiber erforderlich sind. Die Firma Olimex hat ein Datenblatt auf ihrer Webseite veröffentlicht und verschiedene Projekte nutzen den Chip schon, der günstiger ist, als die bislang bekannten FT232-Chips.

Hersteller des Chips ist eine Firma http://wch.cn/ auf deren Seite sich auch ein Archiv mit Treibern befindet.

CH340 Treiber
http://www.wch.cn/download/CH341SER_ZIP.html

Für die ersten Checks brauchen Sie nur noch ein Terminal-Programm, welches den COM-Port öffnet und Ein/Ausgaben erlaubt. Leider hat Microsoft das zugekaufte "HyperTermin" mit Windows 7 nicht weiter vertrieben, so dass Sie Alternativen suchen müssen. Interessanterweise gibt es nur ganz wenige "Terminal-Programme", die wirklich noch wie ein früheres Telix, Procomm oder auch HyperTerm unter Windows ihren Dienst tun. Die Zeiten des COM-Ports scheinen langsam vorbei zu sein oder kommen gerade wieder.

Kontaktaufnahme

Normalerweise sollte das NodeMCU-Modul schon mit der passenden Firmware versorgt sein, so dass Sie direkt loslegen können. Durch das offene Design kann aber jeder Hersteller ein vergleichbares Modul publizieren und über Internet für wenig Geld verkaufen. Sie wissen also nicht, was genau auf dem NodeMCU-System gerade drauf ist. Drei Komponenten stehen hier an:

  • Bootloader des ESP8266
    Der Bootloader startet mit dem Einschalten und prüft beim Einschalten, ob die D0-Leitung auf GND gezogen ist. Wenn dies der Fall ist, dann wechselt der ESP8266 in den Programmiermode, damit eine Firmware hochgeladen werden kann. Wenn die Leitung nicht auf GND ist, dann startet der Bootloader die Firmware.
  • Firmware des ESP8266
    Der ESP8266 selbst hat eine Firmware, die z.B. auf AT-Befehle reagiert und die Hardware anspricht und steuert. Abhängig von der Firmware ist wohl auch die Default-Baudrate für diese Betriebsart hinterlegt. Es gibt welche mit 9600 Baud und die neuere Firmware startet gleich im 115200. Wenn Sie sich also mit dem ESP8266 verbinden und nichts sehen, dann ändern Sie die mal Baudrate.
  • Firmware von NodeMCU
    Der ESP8266 kann aber auch komplett eigenständig programmiert werden. Die NodeMCU-Firmware ist so eine alternative Firmware. Wenn diese schon installiert ist, dann sehen Sie nach der Verbindung mit dem ESP8266 die LUA-Anzeige. Diese Firmware nutzt per Default 115200 Baud
  • LUA-Software
    Wenn Sie die NodeMCU-Firmware installiert haben, dann führt diese Code aus, den sie ebenfalls auf dem ESP8266 bereit gestellt haben. Das ist aber keine Firmware im eigentlichen Sinne

Ich bin sicher, dass auch andere pfiffige Entwickler ihre eigenen Lösungen mit einer eigenen Firmware entwickeln. Wir müssen also zuerst einmal herausfinden, in welchem Status sich der ESP8266 befinden. Daher habe ich mir folgenden kleinen Entscheidungsbaum gebaut.

Wir starten also zuerst den Gerätemanager und ermitteln den COM-Port:

Dann können ein Terminal-Programm ihrer Wahl starten, um über den COM-Port mit 9600,n,8,1,n eine Verbindung aufzubauen.

Und dann sind wir auf die ersten Bildschirmausgaben gespannt. Mit der richtigen Baudrate sollte sich entweder der LUA Prompt oder die AT-Befehlszeile melden. Eventuell müssen sie "blind" einen der beiden Befehle eingeben um die entsprechende Ausgabe zu erzeugen:

Eingabe Ausgabe

AT+RST    Modul Reset
AT+GMR   Firmware Version Checken

 

node.restart()

 

Sollten Sie aber nur "Müll"-Zeichen sehen, dann kontrollieren Sie bitte die Baud-Rate. für den ersten Start ist PuTTY problemlos und geeignet.

NodeMCU Firmware installieren

Für den Fall, dass bei obigem Test sich kein NodeMCU meldet, dann ist Tausch der Firmware erforderlich. Anstelle der Hersteller-Firmware zur Ansteuerung mit AT-Befehlen muss nun der LUA-Interpreter installiert werden. Die Entwickler rund um NodeMCU machen es ihnen wirklich sehr einfach. Um aus dem ESP8266 einen "NodeMCU" zu machen, muss daher die Firmware getauscht werden. Das ist aber nicht sonderlich schwer, da NodeMCU mit einem Windows Tools (32bit und 64bit) einfach installiert werden kann.

  • FirmwareBuild
    http://nodemcu-build.com/
    Über diese Webseite können Sie sich die jeweils aktuellste Firmware mit den erforderlichen Modulen "bauen" lassen.

Die alten Seiten auf GitHub sind angeblich nicht mehr aktuell

Sie starten einfach das EXE und wählen den passenden COM-Port aus. Hier ein Bild beim Hochladen der LUA-Firmware.

 

In dem Code dieses Flashers ist die Firmware enthalten. Sie müssen nicht erst andere Flasher oder BIN-Dateien suchen.

Dieses Programm kann sogar andere Firmware-Dateien herunterladen und bei Einsatz der NodeMCU-Hardware muss der Anwender auch nicht mehr die "Flash"-Taste beim gedrückt halten. Das macht anscheinend der COM-Port-Adapter (vermutlich durch DTR-Steuerung) auch noch alleine.

Danach sollten Sie einfach ihr Terminal Programm auf 9600,n,8,1 umstellen und interaktiv in LUA dann programmieren.

Verbindung per WiFi

Sie können sich nun wieder per "Terminal" mit dem NodeMCU verbinden. Diesmal aber nicht mit 115200Baud, sondern "nur" mit 9600 Baud. Der erste Schritt ist die generelle Funktionsfähigkeit zu überprüfen. Das geht mit ein paar Zeilen Code, mit der man das Modul einfach in ihr WiFi einbindet. Ich habe das hier ei mir einmal gemacht

Der ESP8266 hat sich eine IP-Adresse von meiner Fritz!Box geholt, was dort auch verzeichnet wird:

Damit ist das WiFi-Modul schon mal "anpingbar" und steht für weitere Entwicklungsaufgaben bereit.

Programmieren mit LUA

LUA  ist eine Programmiersprache wie Basic, C, Fortan, Perl, PHP  und viele andere auch und genau genommen könnte man sich fragen, warum NodeMCU gerade LUA und nicht z.B. PHP oder C++ genutzt hat. Die Überlegung ist letztlich aber eher philosophischer Natur und wird eher der Entwickler von NodeMCU wissen. Er hat zumindest die Komponenten, die er in seiner Firmware implementiert hat, auch dokumentiert.

Der große Vorteil von LUA ist, dass es eine sehr einfache Skript-Sprache ist. Mit so wenigen Zeilen können Sie sich per WiFi an einen AccessPoint verbinden und ein HALLO per UDP versenden.

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
ip = wifi.sta.getip()
print(ip)
udpclient=net.createConnection(net.UDP)
udpclient:on("receive",function(udpclient,c) print(c) end)
udpclient:connect(5683,"192.168.178.10")
udpclient:send("Hallo")

Wenn Sie nun neugierig geworden sind, dann schauen Sie doch mal auf der Seite NodeMCU

Einen kompletten LUA auf NodeMCU Programmierkurs kann die MSXFAQ nicht leisten, aber vielleicht ein paar Ideen und Codeschnipsel liefern, soweit ich selbst damit etwas erstellt habe.

Natürlich können Sie den Code mit Notepad auf ihrem PC erstellen und dann mit PuTTY auf den NodeMCU hochladen. Mittlerweile entwickelt sich aber eine Community, die eigene Tools dafür bereit stellen. Sie können damit erst mal Code für den ESP8266 selbst schreiben aber auch LUA-Code entwickeln und hochladen, z.B.

Und dann gibt es natürlich massenhaft Beispiele in NodeMCU; 

Beachten Sie dabei, dass die GPIO-Ports am Gerät nicht mit der Nummer in der Software übereinstimmt.

LUA IO Index 

0

1

2

3

4

5

6

7

8

9

10

11

12

8266 Anschluss

16

5

4

0

2

14

12

13

15

3

1

10

Beachten Sie, dass der Port 0 (Pin 16) nur als einfacher digitaler GPIO-Port genutzt werden kann, also kein PWM, I2C, OneWire oder Interrupt unterstützt.

init.lua erstellen

Sie können mittels einem Terminalprogramme wie PuTTY einfach interaktiv in LUA entsprechende Befehle absetzen. Interessant wird es aber, wenn Sie ihr Programm permanent auf dem ESP8266 hinterlegen und es auch beim Einschalten automatisch starten lassen. Oben auf dem Bildschirmfoto haben Sie vieleicht die Fehlermeldung "lua: cannot open init.lua" gesehen. Wir brauchen also nur eine solche Datei auf dem ESP8266 ablegen. Das geht ganz einfach im Terminal selbst: Hier ein Beispiel:

file.open("init.lua","w")
file.writeline([[ print("Start init.lua") ]])
file.writeline([[ print("hier dann weitere Befehle") ]])
file.writeline([[ print("End init-lua")]])
file.writeline([[ end) ]])
file.close()
node.restart()

Beim Einschalten prüft die NodeMCU-Firmware die Existenz dieser Datei und startet diese automatisch.

Hinweis: Bestimmte Einstellungen bleiben auch ohne die Ablage in der init.lua persistent, d.h. überleben auch einen Spannungsverlust. Wenn Sie z.B.: einmal die WiFi-Konfiguration eingegeben haben, dann setzt der LUA-Interpreter im Hintergrund die Parameter des ES8266, der die Information in einem nicht flüchtigen Speicher ablegt, so dass der ESP8266 nach ca. 5 Sek schon wieder per PING erreichbar ist.

LUA Tipps

Hier sammle ich so die ein oder anderen Tipps und Code-Beispiele. Der Bereich wird sicher noch wachsen

l,m,n=file.fsinfo()
print("Total : "..n.." bytes\r\nUsed  : "..m.." bytes\r\nRemain: "..l.." bytes\r\n")
r=nil u=nil t=nil

node.heap()

Boot loop protection!

Auf der Seite http://blog.hekkers.net/2015/02/26/esp8266-in-deep-sleep/ ist ein wichtiger Tipp beschrieben: Das Board startet automatisch das "init.lua"-Skript. Wenn hier ein Fehler enthalten ist, der letztlich eine Endlosschleife produziert, dann können Sie dies nicht mehr unterbrechen. Einzige Lösung ist dann das neu Flashen der Firmware.

Daher ist es ratsam, am Anfang des Skripts eine AbbruchMöglichkeit einzubauen, also eine Pause, in der z.B.: das Senden eines Zeichens an die Konsole einen Abbruch erzeugt. Dies sollten Sie zumindest während der Entwicklung eingebaut haben.

Hier eine sehr einfache Version einer solchen Startabfrage, die in 5 Sek das "mail.lua" startet, wenn man nicht abbricht.

print("*** Skript startet in 5 Sek ***")
tmr.alarm(0, 5000, 0, function()
   print("Executing ".. FileToExecute)
   dofile("main.lua")
end)

Einsatzmöglichkeiten

Es gibt nahezu unbeschränkte EinsatzMöglichkeiten für ein Modul, welches auf jedem seiner 10 Ports Daten lesen und schreiben kann und über entsprechende APIs sogar SPI, I2C, OneWire und andere Protokolle fahren. Ein paar Ideen

  • Kühlschrank-Melder
    Der Kühlschank geht auf, die Innenbeleuchtung ist an und eine Solarzelle beliefert den NodeMCU mit Strom, damit dieser Bescheid sagen kann. So könnten Sie z.B. zuverlässig ermitteln, ob das Licht wirklich im geschlossenen Zustand aus ist. Das ist sicher nur ein Witz aber wie wäre es, wenn im Kühlschrank über Tasten die Entnahme aus dem Eisfach protokolliert wird und über einen WebService auf dem Smartphone jeder nachschauen kann, ob Platz für die nächste Spende ist ?
  • Türöffner per Smartphone
    Es gibt viele "RFID-basierte" Türsysteme aber sein Smartphone hat doch jeder irgendwie dabei und WiFi machen die auch. Also bekommt die Tür einen NodeMCU als Access-Point oder als Mitglied im Haus-LAN und wenn die WiFi-Verbindung verschlüsselt ist und jeder berechtigte Benutzer noch einen eigenen Code bekommt, könnte man im Notfall so eine Tür öffnen. für den täglichen Einsatz ist es vermutlich zu mühselig immer erst das Smartphone rauszuholen und mit einer App das Signal zu geben.
  • Smart Home Monitoring
    Auf Basis des 1-Wire Bus gibt es z.B. viele Temperatursensoren die im Eigenheim an die verschiedenen Wasserleistungen angelegt werden könnten. So könnte man mit einem Backend (WebService in Azure, oder PRTG eine Heizungsüberwachung aufbauen, Raumtemperaturen müssen u.a. Sicher eher etwas für Geeks und Spieler, denn bei sehr gut gedämmten HäUsern gibt es nicht mehr so viel zu optimieren.
    Aber vielleicht könnte das Gerät doch den Status verschiedener Hausgeräte (Heizung, Wärmepumpe, Wasserfühler auf dem Boden, Salzlevel der Enthärtungsanlage, Funktionsstören der Hebeanlage etc. melden.

Projekte und Beispiele

Der Preis des ESP8266 und die Einfachheit dank NodeMCU mit LUA damit etwas zu erstellen, hat natürlich Nachahmer gefunden, die auf dieser Plattform vielfältige Dinge gebaut haben. Hier nur ein paar Links und Sie können mir gerne Links zu ihrem ESP8266/NodeMCU-Projekt senden.

Title/Bild  Beschreibung und Links

Feinstaubmessung

Stuttgart liegt schon in einem Talkessel und als Stadt mit viel Verkehr gibt es auch viel Feinstaub. Eine Gruppe engagierter Privatleute haben mit dem NodeMCU, einem SD011, eine, DHT22 und einer kleine Cloud-Lösung ihre eigenen Feinstaubsensoren gebaut:

WiFi RC Car 

Ein Modellauto zum Selbst bauen mit ESP8266, Motorshield zur Steuerung per WiFi

IRC Melder

http://web.ncf.ca/fp927/esp/

Parkplatzwächter 

Mich ärgert es, wenn ich in die Tiefgarage fahre und feststellen muss, das gar kein Platz mehr ist. Als langsam wieder rückwärts die Rampe hoch. Da wäre es doch nett z.B. per Ultraschall wie in großen ParkhäUsern zu müssen, wo ein Auto steht und das dann auf einem Status anzuzeigen, z.. eine App

Wassermelder

Keller, Waschmaschine, Schlauch. Klar was da irgendwann passiert und niemand merkt es. Wenn man eh schon einen NodeMCU im Keller z.B. als Stromzählersensor o.ä. einsetzt, dann kann er das auch erfassen und per Mail melden

WLAN Jammer

Cheap Wifi 'Jammer' Device | NodeMCU
https://www.youtube.com/watch?v=oQQhBdCQOTM
https://malduino.com/

WiFi-Klingelknopf

 

Für den Anfang können Sie natürlich auch einfach mal einen Taster oder Schalter an einen der Digitalports hängen und diesen als Eingang definieren und einen anderen Port als Ausgang mit einer LED (bitte mit Vorwiederstand rot/rot/braun = 220Ohm) betreiben.

PRTG Push Sensor

Natürlich könnte ich so einen NodeMCU-Device mit einer festen IP-Adresse versehen und per PRTG z.B. "anpingen" oder den Status von Ports abfragen. Dazu muss das NodeMCU aber permanent "eingeschaltet" sein um auf die Anfragen zu reagieren. Was mache ich aber, wenn das Geräte nur im Fehlerfall oder bei Grenzwertüberschreitungen etwas melden soll, auf Batterien oder Akkus läuft oder anderweitig nur "manchmal" online ist?

PRTG hat seit einiger Zeit eine Unterstützung für PRTG - HTTPPush-Sensoren, bei denen ein Sensor von sich aus aktiv werden kann und Daten an einen PRTG-Server sendet. Das ist natürlich genial für solch kleine Geräte, die z.B. nur kurz aus dem Tiefschlaf (gestartet mit node.dsleep() http://www.NodeMCU.com/docs/node-module/) aufwachen, eine Messung durchführen, diese senden und dann wieder schlafen.

Technisch muss der NodeMCU einfach nur eine Meldung per HTTP-GET wie ein HTTP-Client an den PRTG-Server senden.

GET http://<probe_ip>:<port_number>/<token>?content=<valid XML_or_JSON> 

Das ist mit Lua natürlich schnell mal zusammen geklickt.

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
ip = wifi.sta.getip()
print(ip)

conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end )
conn:connect(80,"115.239.210.27")
conn:send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\n"
    .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")

Hier muss ich meinen Sensor, der gerade in der Entwicklung ist, noch aktualisieren.

Vielleicht unterstützt PRTG irgendwann ja auch den MQTT Standard. Dafür gibt es bei NodeMCU sogar schon eine Library

Syslog

Wenn so kleine Geräte eine Meldung absetzen wollen, aber es keine Displays gibt, dann geht das nur per "blinkende LEDs", piepsende Lautsprecher oder per Meldung über das LAN. Hier hat sich das Syslog-Protokoll bewährt, was einfach nur per UDP eine Textzeile an eine IP-Adresse sendet. Dort ist dann ein SYSLOG-Server wie z.B. NXLog, der diese Pakete annimmt und protokolliert.

Entsprechend lässt sich in LUA auch ganz schnell ein Syslog-Client umsetzen, der Daten sendet kann.

syslogclient=net.createConnection(net.UDP)
syslogclient:on("receive",function(udpclient,c) print(c) end)
syslogclient:connect(514,"192.168.178.10")
syslogclient:send("<133>Hallo")

Die letzte Zeile kann natürlich mit unterschiedlichen Texten mehrfach verwendet werden. Da es sich dabei um UDP-Pakete handelt, muss natürlich zumindest die Verbindung zum Netzwerk funktionieren. Logs können Also nicht Details zur Initialisierung der Netzwerkverbindung aufzeichnen. Aber für einfache Debugging-Ausgaben ist dies wunderbar nutzbar.

IoT Services

Wenn die Daten natürlich längerfristig gespeichert und aufbereitet werden sollen, dann bieten sich verschiedene WebService an, an die so eine kleine Box z.B. per HTTPS-Post oder GET die Daten übermittelt und der Webservice diese dann speichert und grafisch aufbereitet.

FHEM und HomeMatic

Natürlich haben auch andere Leute im Bereich der Heimautomatisation den ES8266 entdeckt. Suchen Sie einfach mal nach "8266" in Kombination mit "FHEM" oder "Homematic". Beide Systeme können per IP mit anderen Geräten sprechen und Daten empfangen. hier lässt sich sicher auch noch das ein oder andere abschauen.

Amazon Dash Button Alternative

Von Amazon gibt es schon längere Zeit einen kleinen Button, der durch einen Druck eine bestimmte Ware bestellt. Amazon bewirbt das gerne mit so einem Device auf der Waschmaschine zum Nachbestellen von Waschpulver:

In den USA gibt es im August 2015 im Rahmen von "Amazon Fresh" sogar einen Stick, der mit einem Barcode-Scanner quasi jeden Artikel in den Warenkorb legen kann.

Den Button gibt es es natürlich auch für andere Produkte für unter 5 US$ in den USA aber noch nicht (Stand Aug 2015) in Deutschland. Technisch ist das wohl ein Schalter, der beim Druck die Stromversorgung (Knopfzelle) herstellt. Das Innenleben besteht wohl aus einem ST STM32F205 Microcontroller mit einem BCM43362 Wi-Fi Modul. Die erste Revision hatte sogar noch den JTAG-Port zum Programmieren auf Lötpads angeschlossen.

Und natürlich haben sich Hardwarebastler zumindest in den USA schon auf das Gerät gestürzt. Die Programmierung des Buttons erfolgt über eine App (IOS, Android), die über den Telefonlautsprecher dann Töne abgibt, die von dem Button nach der Initialisierung durch einen langen Druck empfangen und übernommen werden. Um die Funktion zu ändern, kann man das Device elektrisch (JTAG) umprogrammieren, vielleicht über eigene "Töne" die angesprochenen URLs und Parameter ändern oder auf dem Netzwerklevel die Pakete abfangen und selbst auswerten. Eine Hausklingel, die eine Instant Message oder Mail sendet wäre ein Einsatzbereich, wenn man nicht gleich einen Bestellvorgang bei einem anderen Webshop implementieren will.

Allerdings ist das natürlich eine Steilvorlage, es "besser" und "unabhängig zu machen. Wenn ihnen der Ansatz des AmazonDash gefällt, können Sie mit dem NodeMCU auch relativ einfach mit ein paar Tastern eine ähnliche Funktion nachbauen, z.B. in dem Sie den Hyperlink einer "Empfehlung" ihrer bevorzugten Webseite einfach hinterlegen und ein Druck auf ihre eigene Lösung dann eine Mail mit dem Link an ihr Postfach sendet, so dass Sie auf dem Smartphone oder wo auch immer einfach nur noch "draufklicken" müssen

Einschränkungen

So einfach die Programmierung von IoT Geräten mittels LUA ist, so sollten Sie doch verschiedene Einschränkungen wissen. Beim Einsatz von NodeMCU läuft auf dem SoC nicht ihr geschriebenes Programm nicht direkt, sondern es wird von der NodeMCU-Firmware interpretiert. Es ist also noch eine weitere Abstraktionseben vorhanden, die zum einen Fehler haben kann aber insbesondere Performance und Speicher frisst.

Interessant ist dazu der folgende Artikel:

Aber das sollte Sie nicht davon abhalten, mit dem ESP8266 und NodeMCU und LUA erste Gehversuche zu machen. Es hindert Sie ja niemand daran, auch ohne LAU direkt einen Code für den ESP8266 zu entwickeln. Ein passendes Add-on für die ArduinoIDE macht auch das möglich:

Weitere Links