25. prosince 2014

ESP8266: WI-FI a internet do každého zařízení IV.

Lua je odlehčený, reflexivní, imperativní a procedurální programovací jazyk navržený jako skriptovací jazyk s rozšiřitelnou sémantikou. Název je odvozen z portugalského slova pro měsíc. Jeho celá implementace se vejde do 100 kB. Pokud umíte něco naprogramovat v PHP nebo Pythonu nebude pro vás LUA žádný problém.


1. Proměnné
Rozlišujeme dva druhy proměnných. Globální a lokální. Globální existují všude a lokální pouze v bloku (funkci) kde vznikly. Název proměnné by měl začínat vždy písmenem a pozor jsou rozlišována velká a malá písmena.
Proměnné můžou být těchto typů: nill - nic, prázdná hodnota, čísla, znaky, stav (true/false - 0/1), řetězce, tabulky, funkce.
Příklad:
i=nill
k=1
flag=true
bname="ahoj"

2. Komentáře a klíčová slova
-- komentář
Klíčová slova:
and    break  do   else     elseif   
end    false  for  function if
in     local  nil  not      or
repeat return then true     until
while

3. Podmínky, funkce, cykly

Podmínka if
1.  if condition then
            block
   end
2.  if condition then
            block1
   else
            block2
   end
 
3.  if condition1 then
            block1
  elseif condition2 then
            block2
  elseif condition3 then
            block3
  else
            block4
  end

Funkce
1.  function Name()
            block
  end
 
2.  Name = function()
            block
   end

Cykly
1.  for variable = beginning, end, step do
            block
  end
   
2.  for variable, name  in table do
            block
   end
 
 3.  while condition do
            block
   end
 
 4.  repeat
            block
   until condition

Není  cílem popsat ze celou syntaxi jazyka LUA. Chtěl jsem pouze na příkladech ukázat, že je přehledná a jednoduchá. Více informací o jazyce LUA je v češtině třeba na root.cz nebo je k dispozici i kniha v češtině.

NodeMCU API implementuje rozhraní k funkcím čipu, kompletní popis je zde ve wiki.

Několik ukázek práce s API

Manipulace s GPIO
    pin = 1
    -- nastaví pin jako výstup
    gpio.mode(pin,gpio.OUTPUT)
    -- nastaví pin na log 1
    gpio.write(pin,gpio.HIGH)
    -- přečte a vypíše hodnotu pin
    print(gpio.read(pin))

Jednoduchý webserver
    srv=net.createServer(net.TCP) 
    srv:listen(80,function(conn) 
      conn:on("receive",function(conn,payload) 
        print(payload) 
        conn:send("<h1> Hello, NodeMcu.</h1>")
      end) 
      conn:on("sent",function(conn) conn:close() end)
    end)


Jak je vidět i vytvoření jednoduchého web serveru díky dobré implementaci v API zabere pár řádek kódu.

V příštím díle si ukážeme jak udělat WIFI teploměr s uploadem dat na thingspeak.com.

2 komentáře:

MIRES řekl(a)...

Dobrý den, mám prosbu...nedokážete vysvětlit konstrukci "srv:listen(80,function(conn)"
přesněji řečeno jaký má význam znak ':'? Nejsem schopen to pochopit. Dík

Anonymní řekl(a)...

Dobrý den,
dovolím si odpovědět. : přidá k volání funkce extra parametr self, který se právě tímto voláním skryje. Stejně by se dala funkce zavolat srv.listen(srv, 80, function(conn)) kde je self parametr hned videt. V dokumentaci LUA je to popsano https://www.lua.org/pil/16.html