Arduino

ESP8266: NodeMCU-Firmware flashen

11. 06. 2016

Schlagwörter: , ,

Die Firmware NodeMCU eignet sich anscheinend besser dafür, Sensoren über den ESP8266-Chip ins Internet zu bringen. Hier eine Anleitung, wie man die originale Firmware damit ersetzt und den Status eines ersten Buttons ins Internet zu bringen. Die Anleitung baut auf meinen ersten Teil, Wifi-Modul ESP8266: Up and running, auf.

Flashen

  1. Aufbau wie auf Wifi-Modul ESP8266: Up and running (Version 2).
  2. Download der Flash-Software von hier: https://docs.google.com/file/d/0B3dUKfqzZnlwVGc1YnFyUjgxelE/edit
  3. Download der BIN-Datei mit den Standard-Modulen (Float-Variante) von hier: http://nodemcu-build.com/
    (früher: http://www.roboremo.com/uploads/2/4/5/7/24571986/nodemcu_latest.bin)

Grundeinstellungen

Im Speicher können die aktuellen Zugangsdaten hinterlegt werden, die sich der Chip merkt. Einfach diese Befehle z. B. im Arduino Terminal-Monitor eingeben:

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","Passwort")
print(wifi.sta.getip())

Erstes Programm: Ist Taste gedrückt?

Dazu benötigen wir einen Taster, den wir laut Quelle links auf unserem Breadboard dazu bauen. Dies sieht dann so aus:

ESP8266 Flashen Steckplatine mit Button zum Auslesen_Steckplatine

Im Terminal Monitor der Arduino-Oberfläche geben wir Zeile für Zeile folgendes ein, um eine Datei zu erstellen, die eine Funktion beinhaltet (diese Version ist die korrigierte der Quelle, die einige Copy&Paste-Fehler beinhaltet):
file.remove("door.lua")
file.open("door.lua","w")
file.writeline([[gpio.mode(3,gpio.INPUT)]])
file.writeline([[srv=net.createServer(net.TCP) srv:listen(80,function(conn)]])
file.writeline([[conn:on("receive",function(conn,payload)]])
file.writeline([[print(node.heap())]])
file.writeline([[door="open"]])
file.writeline([[if gpio.read(3)==0 then door="closed" else door="open" end]])
file.writeline([[conn:send("<h1> The door is " .. door ..".</h1>")]])
file.writeline([[end)]])
file.writeline([[conn:on("sent",function(conn) conn:close() end)]])
file.writeline([[end)]])
file.close()

Aufgerufen wird die Funktion nun mit

dofile("door.lua")

Und für die aktuelle IP gibt man folgenden Befehl aus:

print(wifi.sta.getip())

Wenn man nun einen Browser mit dieser IP aufruft, erscheint die Rückmeldung:

esp8266_dooropen

Verbesserungswürdig ist, dass das Skript nach einem Neustart nicht automatisch geladen wird. Daher schreiben wir eine Zeile in die „init.lua“, indem wir folgende Befehle ausführen (könnten. Denn weiter unten zeige ich, wie es einfacher geht):

file.remove("init.lua")
file.open("init.lua","w")
file.writeline([[dofile("room.lua")]])
file.writeline([[end)]])
file.close()

Terminal mit Editor

Natürlich ist es ziemlich mühsam, ganze Dateien im Terminal-Programm wie beispielsweise dem Arduino Terminal-Monitor oder PuTTY zu erstellen. Für Windows existiert eine Software, die ergänzend noch Funktionen speziell für LUA anbietet, wie z. B. den File-Upload.
LuaLoader 01
Wichtig ist, dass einige Befehle anders aussehen. So schreibt man beispielsweise anstelle von „print(wifi.sta.getip())“ in dieser Software „= wifi.sta.getip()„.
Die doors.lua kann man nun ganz einfach mit dem Editor seiner Wahl, z. B. Notepad++, erstellen:
gpio.mode(3,gpio.INPUT)
srv=net.createServer(net.TCP) srv:listen(80,function(conn)
  conn:on("receive",function(conn,payload)
    print(node.heap())
    door="open"
    if gpio.read(3)==0 then door="closed" else door="open" end
    conn:send("<h1> The door is " .. door ..".</h1>")
  end)
  conn:on("sent",function(conn) conn:close() end)
end)
Über den Button „Upload File…“ kann sie nun ganz einfach hochgeladen werden.
Genauso bequem können wir nun auch eine init.lua hochladen, die bei jedem Reset sicherstellt, dass alles passt und die door.lua wieder ausgeführt wird:
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","Ihr Passwort")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
  if wifi.sta.getip()== nil then
    print("IP unavailable, Waiting...")
  else
    tmr.stop(1)
    print("ESP8266 mode is: " .. wifi.getmode())
    print("The module MAC address is: " .. wifi.ap.getmac())
    print("Config done, IP is "..wifi.sta.getip())
 
    dofile ("door.lua")
   end
 end)

Quellen

image_print
1 Stern2 Sterne3 Sterne4 Sterne5 Sterne
Loading...

Author

Manuel

Related Posts