Post your best Lua script examples here

User avatar
By alexhi
#5017 Hi, I write little app for Android watch (or smartphone) and esp8266.
That it is able to :
- read the temperature DS18B20
- turn ON/OFF relay (button or voice)
- considered on time relay (save flash memory)
how it looks like:

Image

setting:

Image

PCB
Image

PHOTO
Image


LUA SCRIPT UDP SERVER

counter=0
GCOUNTER=0
port=7777
stled=0
pinled=9

pin = 8
ow.setup(pin)
TEMP=0
counter=0
lasttemp=-999



function Init()
print("LT205WF V1.0")
pinled=9
gpio.mode(pinled, gpio.OUTPUT)
gpio.write(pinled, gpio.LOW)
if file.open("ltimer.log", "r")== nil then
file.remove("ltimer.log")
file.open("ltimer.log", "w")
file.writeline(GCOUNTER)
file.close()
else
GCOUNTER=file.readline()
file.close()
end
end


function bxor(a,b)
local r = 0
for i = 0, 31 do
if ( a % 2 + b % 2 == 1 ) then
r = r + 2^i
end
a = a / 2
b = b / 2
end
return r
end

function ShowTemp()
getTemp()
t1 = lasttemp / 10000
t2 = (lasttemp >= 0 and lasttemp % 10000) or (10000 - lasttemp % 10000)
t2 =t2 / 100
--print("!TEMP" .. t1 .. "." .. string.format("%2d", t2) .."\r")
TEMP= t1 .. "." .. string.format("%d", t2)
--print(TEMP)
end

function getTemp()
addr = ow.reset_search(pin)
repeat
tmr.wdclr()

if (addr ~= nil) then
crc = ow.crc8(string.sub(addr,1,7))
if (crc == addr:byte(8)) then
if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
ow.reset(pin)
ow.select(pin, addr)
ow.write(pin, 0x44, 1)
tmr.delay(1000000)
present = ow.reset(pin)
ow.select(pin, addr)
ow.write(pin,0xBE, 1)
data = nil
data = string.char(ow.read(pin))
for i = 1, 8 do
data = data .. string.char(ow.read(pin))
end
crc = ow.crc8(string.sub(data,1,8))
if (crc == data:byte(9)) then
t = (data:byte(1) + data:byte(2) * 256)
if (t > 32768) then
t = (bxor(t, 0xffff)) + 1
t = (-1) * t
end
t = t * 625
lasttemp = t
--print("Last temp: " .. lasttemp)
end
tmr.wdclr()
end
end
end
addr = ow.search(pin)
until(addr == nil)
end

----------------MAIN FUNCTION-----------------------
Init()
srv=net.createServer(net.UDP)
srv:on("receive", function(srv, pl)
print(pl)
if pl=="!SetR1_1\r" then
gpio.write(pinled, gpio.HIGH)
stled=1
counter=0
srv:send("!LEDON\r")
end
if pl=="!SetR0_1\r" then
gpio.write(pinled, gpio.LOW)
stled=0
srv:send("!LEDOFF\r")
file.open("ltimer.log", "w")
file.write(GCOUNTER)
file.close()

end

if pl=="!GetR_1\r" then
if stled ==1 then
srv:send("!LEDON\r")
else
srv:send("!LEDOFF\r")
end
end
if pl=="!GetCount\r" then
srv:send("!COUNT "..counter.."\r")
end
if pl=="!GetGcount\r" then
srv:send("!GCOUNT "..GCOUNTER.."\r")
end
if pl=="!GetC_1\r" then
print(ShowTemp())
srv:send("!TEMP"..TEMP.."\r")
end
if pl=="!ClrCount\r" then
GCOUNTER=0
srv:send("!GCOUNT=0\r")
end
if pl=="!GetIp\r" then
srv:send("!IP "..wifi.sta.getip().."\r")
end

end)
srv:listen(port)
uart.on("data",function(data)srv:send(data)end, 1)
--timer 1
tmr.alarm(2,60000,1, function()
if stled==1 then
counter=counter+1
GCOUNTER=GCOUNTER+1
--print(counter)
end
end )
Attachments
andrele.apk
(280.31 KiB) Downloaded 332 times