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
- Aufbau wie auf Wifi-Modul ESP8266: Up and running (Version 2).
- Download der Flash-Software von hier: https://docs.google.com/file/d/0B3dUKfqzZnlwVGc1YnFyUjgxelE/edit
- 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?
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:
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
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)
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
- https://importhack.wordpress.com/2014/11/22/how-to-use-ep8266-esp-01-as-a-sensor-web-client/
- http://nodemcu.com/index_en.html
- https://www.domoticz.com/wiki/ESP8266_WiFi_module