140 lines
3.3 KiB
Lua
140 lines
3.3 KiB
Lua
function wait_for_wifi_conn ( )
|
|
tmr.alarm (1, 1000, 1, function ( )
|
|
if wifi.sta.getip ( ) == nil then
|
|
print ("Waiting for Wifi connection")
|
|
--led rot
|
|
ws2812.writergb(4, string.char(50, 0, 0))
|
|
else
|
|
tmr.stop (1)
|
|
print ("ESP8266 mode is: " .. wifi.getmode ( ))
|
|
print ("The module MAC address is: " .. wifi.ap.getmac ( ))
|
|
print ("Config done, IP is " .. wifi.sta.getip ( ))
|
|
-- print ("join Multicast 192.168.1.90")
|
|
-- net.multicastJoin(wifi.sta.getip(), "192.168.1.90")
|
|
-- led gruen
|
|
ws2812.writergb(4, string.char(0, 50, 0, 0,0,0))
|
|
tmr.delay(1000000)
|
|
end
|
|
end)
|
|
end
|
|
|
|
--empfangene daten zerlegen,led ansteuern
|
|
function parse (payload)
|
|
r = string.sub(payload,1,3)
|
|
g = string.sub(payload,4,6)
|
|
b = string.sub(payload,7,9)
|
|
r1 = string.sub(payload,10,12)
|
|
g1 = string.sub(payload,13,15)
|
|
b1 = string.sub(payload,16,18)
|
|
rgb = string.char(r,g,b,r1,g1,b1)
|
|
print(rgb)
|
|
ws2812.writergb(4,rgb)
|
|
end
|
|
|
|
--ausschalten
|
|
function switchoff ()
|
|
--node off
|
|
print("off")
|
|
ws2812.writergb(4, string.char(50, 0, 0, 0,0,0))
|
|
tmr.delay(200000)
|
|
ws2812.writergb(4, string.char(0, 0, 0, 0,0,0))
|
|
tmr.delay(200000)
|
|
ws2812.writergb(4, string.char(50, 0, 0, 0,0,0))
|
|
tmr.delay(200000)
|
|
ws2812.writergb(4, string.char(0, 0, 0, 0,0,0))
|
|
--Led-Controller OFF
|
|
gpio.write(7, gpio.LOW)
|
|
tmr.delay(10000)
|
|
--Power off
|
|
wifi.sta.disconnect()
|
|
gpio.write(5, gpio.LOW)
|
|
end
|
|
|
|
akku = 0
|
|
wifi.sta.disconnect()
|
|
--blau fuer on
|
|
ws2812.writergb(4, string.char(0, 0, 50, 0,0,0))
|
|
tmr.delay(1000000)
|
|
if (adc.readvdd33() > 3650) then
|
|
--LED-Controller Ein
|
|
gpio.mode(7, gpio.OUTPUT)
|
|
gpio.write(7, gpio.HIGH)
|
|
--blau fuer on
|
|
ws2812.writergb(4, string.char(0, 0, 50, 0,0,0))
|
|
tmr.delay(1000000)
|
|
--rot fuer batt low, gruen fuer batt ok
|
|
akku = 1
|
|
ws2812.writergb(4, string.char(0, 50, 0, 0,0,0))
|
|
print("voltage "..adc.readvdd33())
|
|
tmr.delay(1000000)
|
|
--led off
|
|
ws2812.writergb(4, string.char(0, 0, 0, 0,0,0))
|
|
wifi.setmode(wifi.STATION)
|
|
wifi.sta.config("cocktail","cocktailglas")
|
|
wifi.sta.connect()
|
|
wait_for_wifi_conn()
|
|
|
|
--get new ip after lost
|
|
tmr.alarm(0, 30000, 1, function()
|
|
print("reconnect")
|
|
if (akku == 1) then
|
|
if wifi.sta.getip ( ) == nil then
|
|
wifi.sta.connect()
|
|
wait_for_wifi_conn()
|
|
end
|
|
end
|
|
end )
|
|
|
|
else
|
|
akku = 0
|
|
print("battery low. sleep")
|
|
print("voltage "..adc.readvdd33())
|
|
--node off
|
|
switchoff()
|
|
end
|
|
|
|
tmr.delay(1000000)
|
|
|
|
|
|
|
|
|
|
--send udp from linux:
|
|
--echo -n "170000070150000050" >/dev/udp/172.23.92.16/31302
|
|
srv = net.createServer(net.UDP)
|
|
srv:on("receive",function(srv,payload)
|
|
-- print("payload=",payload)
|
|
-- print("len",string.len(payload))
|
|
if (string.len(payload)==18) then parse(payload)
|
|
else
|
|
if (string.len(payload)==6) then
|
|
if (string.sub(payload,1,6) == "offoff") then
|
|
switchoff()
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
srv:listen(31302)
|
|
|
|
|
|
--akkustand: abschalten nach 15 min
|
|
tmr.alarm(2, 900000, 1, function()
|
|
print("akku")
|
|
wifi.sta.disconnect()
|
|
if (adc.readvdd33() > 3700) then
|
|
print("ok")
|
|
akku = 1
|
|
wifi.sta.connect()
|
|
else
|
|
akku = 0
|
|
print("battery low. sleep")
|
|
print("voltage "..adc.readvdd33())
|
|
switchoff()
|
|
end
|
|
end )
|
|
|
|
|
|
|
|
|
|
|
|
|