Lua je odlehčený, reflexivní, imperativní a procedurální programovací jazyk navržený jako skriptovací jazyk s rozšiřitelnou sémantikou viz Wikipedie. Implementace vychází z projektu eLua a používá jednoduchý systém souborů SPIFFS. Máš WiFi teploměr je kompatibilní s projektem NodeMCU, proto můžete využít většinu návodů pro tento projekt.
Nejprve si stáhněte NodeMCU Flasher a NodeMCU firmware. Pomocí následujícího postupu ho nahrajte do teploměru:
Spusťte NodeMCU Flasher a ve druhé záložce „Config“ vyberte uložený soubor s firmware.
Vraťte se na první záložku „Operation“, vyberte správný sériový port (COM port) a stiskněte Flash.
Po úspěšném nahrání restartujte teploměr.
Pracovat s teploměrem můžete přes sériový terminál. Vhodné je použít některý ze specializovaných programů jako je ESP8266 Lua Loader nebo ESPlorer.
Další popis věnujeme programu ESP8266 Lua Loader:
Nejprve v menu „Settings -> Comm Port Settings“ vyberte správný sériový port.
Bohužel program ESP8266 Lua Loader má omezení pouze na porty COM1 – COM4. Pokud máte číslo portu vyšší, změňte ho dle tohoto návodu.Následně vyberte v menu „Connect“.
Pro ověření komunikace můžete využít tlačítko v zeleném poli „chipID“, v terminálovém okně se vypíše identifikační číslo chipu.
Pokud nechceme psát jednotlivé příkazy do terminálu, můžeme skript nahrát jako soubor. Stačí ve žlutém poli stisknout tlačítko „Upload File…“ vybrat soubor s programem a počkat až se nahraje.
Následující program demonstruje blikání dvojbarevnou diodou na teploměru:
-- ESP_TME_Example1.lua
BlueLED = 6 -- GPIO12
RedLED = 7 -- GPIO13
Button = 5 -- GPIO14
Jack1 = 2 -- GPIO4
Jack2 = 1 -- GPIO5
gpio.mode(BlueLED,gpio.OUTPUT)
gpio.mode(RedLED,gpio.OUTPUT)
gpio.mode(Button,gpio.INPUT,gpio.PULLUP)
while 1 do
if gpio.read(Button) == 1 then
gpio.write(BlueLED, gpio.HIGH)
tmr.delay(250000) -- wait 250ms
gpio.write(BlueLED, gpio.LOW)
tmr.delay(250000) -- wait 250ms
else gpio.write(RedLED, gpio.HIGH)
tmr.delay(250000) -- wait 250ms
gpio.write(RedLED, gpio.LOW)
tmr.delay(250000) -- wait 250ms
end
end
Nahraný program spustíme tlačítkem „dofile“. V pravidelných intervalech bliká LED modře a při stisku tlačítka SETUP červeně.
Takto napsaný program sice funguje, ale není to ideálně. V podstatě už s teploměrem nic dalšího neuděláme mimo resetu. Důvodem tohoto příkladu je se z hlediska kódu přiblížit příkladu pro prostředí Arduino. Dále je třeba zdůraznit, že prostředí používá zcela jiné číslování pinů. Například GPIO 12 má číslo 6, GPIO13 se značí 7 atd. Stejný příklad lze v Lua napsat podstatně efektivněji následujícím způsobem:
-- ESP_TME_Example1b.lua
BlueLED = 6 -- GPIO12
RedLED = 7 -- GPIO13
Button = 5 -- GPIO14
Jack1 = 2 -- GPIO4
Jack2 = 1 -- GPIO5
gpio.mode(BlueLED,gpio.OUTPUT)
gpio.mode(RedLED,gpio.OUTPUT)
gpio.mode(Button,gpio.INPUT,gpio.PULLUP)
tmr.alarm(0,250,1,function() -- timer id 0, 250ms, 1 = repeat
if gpio.read(Button) == 1 then
gpio.write(BlueLED, (gpio.read(BlueLED) + 1) % 2)
gpio.write(RedLED, 0)
else
gpio.write(RedLED, (gpio.read(RedLED) + 1) % 2)
gpio.write(BlueLED, 0)
end
end)
Příklad opět spustíme příkazem dofile("ESP_TME_Example1b.lua"). Výhodou je, že program neběží stále, ale pouze při události vyvolané časovačem. Zbývá nám prostor na vykonávání dalšího kódu. Kód ukončíme zastavením časovače příkazem „tmr.stop(0)“ nebo stačí stisknout tlačítko „tmr.stop“ v zelením poli. Pokud chcete, aby se program vykonával automaticky pro restartu teploměru, musíme soubor s programem pojmenovat „init.lua“.
Příklady ke stažení: ESP_TME_Example1.zip