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>&nbsp;<a href=\"?pin=OFF1\"><button>OFF</button></a></p>";
 -- buf = buf.."<p>GPIO12 <a href=\"?pin=ON2\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF2\"><button>OFF</button></a></p>";
 buf = buf.."<p>GPIO13 <a href=\"?pin=ON3\"><button>ON</button></a>&nbsp;<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.