Mar 222015
Here was a great start and given that I did not know Lua a lot (and I am sure I don’t still), it was a nice little challenge to expand the example to include all 6 LEDs.
Here the result:
myled={ 4, 3, 2, 1, 5, 0, 6, 7, 8 }
mystate={}
start_init = function()
local i
for i=1,6 do
gpio.mode(myled[i], gpio.OUTPUT)
gpio.write(myled[i],gpio.HIGH)
mystate[i]=0
end
end
sendFileContents = function(conn, filename)
if file.open(filename, "r") then
--conn:send(responseHeader("200 OK","text/html"))
repeat
local line=file.readline()
if line then
conn:send(line)
end
until not line
file.close()
else
conn:send(responseHeader("404 Not Found","text/html"))
conn:send("Page not found")
end
end
responseHeader = function(code, type)
return "HTTP/1.1 " .. code .. "\nConnection: close\nServer: nunu-Luaweb\nContent-Type: " .. type .. "\n\n";
end
httpserver = function ()
start_init();
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,request)
conn:send(responseHeader("200 OK","text/html"));
fflag, findex, pin=string.find(request, "gpio=(%d+)")
pin=tonumber(pin)
if fflag and pin>=1 and pin<=6 then
print("Changing pin "..pin.." to ")
if mystate[pin]==0 then
mystate[pin]=1
gpio.write(myled[pin], gpio.LOW)
print("on\n")
else
mystate[pin]=0
gpio.write(myled[pin],gpio.HIGH)
print("off\n")
end
else
sendFileContents(conn,"schead.htm")
local i
for i=1,6 do
if mystate[i]==0 then
preset=""
else
preset="checked=\"checked\""
end
conn:send("<div><input type=\"checkbox\" id=\"chbox"..i.."\" name=\"chbox"..i.."\" class=\"switch\" onclick=\"loadXMLDoc("..i..")\" "..preset.." />")
conn:send("<label for=\"chbox"..i.."\">GPIO "..i.."</label></div>\n")
end
conn:send("</div>")
end
print(request);
end)
conn:on("sent",function(conn)
conn:close()
conn = nil
end)
end)
end
httpserver()
Note:
- I use only the 6 red LEDs on the dev board I have
- I had to shorten the text sent to the web client from “checkbox2” to “chbox2” as otherwise the last characters of those 6 lines were missing. That showed when some LEDs were on and I reloaded the page. Then toggle 6 went missing. Thus don’t send too much too fast.
