Die Lua Initialisierung auf dem ESP8266
Beschreibt man einen ESP8266 mit einer entsprechenden NodeMCU Firmware ist der ESP8266 zwar betriebsbereit, eigentliche Funktionen werden aber noch nicht ausgeführt. Benötigte Funktionen und Abläufe werden bei einem ESP8266 durch die init.lua aufgerufen. Im praktischen Ablauf geschieht das beim Start eines ESP8266, bzw. durch die Initialisierung. Bei der Initialisierung wird die init.lua Datei geladen und der dort enthaltene Code ausgeführt.
Das init.lua Beispiel
Wie das folgende init.lua Beispiel zeigt ist bereits mit geringem Aufwand ein ESP8266, hier im Beispiel das ESP8266 Anfänger Modul betriebsbereit. Versorgt man das ESP8266 Anfänger Modul über den oberen USB Anschluß mit Spannung (mit dem Computer verbinden) so erscheint nach wenigen Sekunden ein neuer AP (Access Point) im WLan Netzwerk. Wechselt man in das Netzwerk und ruft dort die IP Adresse 192.168.1.100 auf, befindet man sich bereits auf dem Webserver des ESP8266 Anfängermodul.
Betätigt man hier einen der 2 on Schalter so schaltet sich die rote, bzw. blaue LED auf dem ESP8266 Anfänger Modul an.
init.lua Beispiel
local str=wifi.ap.getmac(); local ssidTemp=string.format("%s%s%s",string.sub(str,10,11),string.sub(str,13,14),string.sub(str,16,17));cfg={} cfg.ssid="ANDROEGG"..ssidTemp; cfg.pwd="12345678" wifi.ap.config(cfg) cfg={} cfg.ip="192.168.1.100"; cfg.netmask="255.255.255.0"; cfg.gateway="192.168.1.100"; wifi.ap.setip(cfg); wifi.setmode(wifi.SOFTAP) led1 = 8 --led2 = 10 led3 = 7 gpio.mode(led1, gpio.OUTPUT) --gpio.mode(led2, gpio.OUTPUT) gpio.mode(led3, gpio.OUTPUT) srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end buf = buf.."<h1>Androegg simple Web Server</h1>"; buf = buf.."<p>GPIO15 <a href=\"?pin=ON1\"><button>ON</button></a> <a href=\"?pin=OFF1\"><button>OFF</button></a></p>"; -- buf = buf.."<p>GPIO12 <a href=\"?pin=ON2\"><button>ON</button></a> <a href=\"?pin=OFF2\"><button>OFF</button></a></p>"; buf = buf.."<p>GPIO13 <a href=\"?pin=ON3\"><button>ON</button></a> <a href=\"?pin=OFF3\"><button>OFF</button></a></p>"; local _on,_off = "","" if(_GET.pin == "ON1")then gpio.write(led1, gpio.HIGH); elseif(_GET.pin == "OFF1")then gpio.write(led1, gpio.LOW); -- elseif(_GET.pin == "ON2")then --gpio.write(led2, gpio.HIGH); --elseif(_GET.pin == "OFF2")then --gpio.write(led2, gpio.LOW); elseif(_GET.pin == "ON3")then gpio.write(led3, gpio.HIGH); elseif(_GET.pin == "OFF3")then gpio.write(led3, gpio.LOW); end client:send(buf); client:close(); collectgarbage(); end) end)
Bei der Verwendung mit anderen Modulen müssen gegebenenfalls die GPIO Zuweisungen geändert werden.