Need help with using html slider control to return data
Posted: Tue Dec 01, 2015 8:21 pm
I found some web server code that allows me to turn ESP8266 port lines on and off and it works fine.
Now I'm trying to add HTML code to it to display slider controls and return the value they represent. When I run this code, the result is:
> PANIC: unprotected error in call to Lua API (init.lua:27: attempt to call local 'range' (a string value))
Clearly, I don't know what I'm doing. I don't really know HTML and have only scratched the surface of Lua. None the less, I think what I'm trying to do should be fairly simple... (famous last words)
I have marked the line below that causes the problem. If I enter it in a HTML test window by itself, it makes a slider control pop up. But here, no joy.
If anyone has a suggestion, I would love to hear it. Thanks!!!
Now I'm trying to add HTML code to it to display slider controls and return the value they represent. When I run this code, the result is:
> PANIC: unprotected error in call to Lua API (init.lua:27: attempt to call local 'range' (a string value))
Clearly, I don't know what I'm doing. I don't really know HTML and have only scratched the surface of Lua. None the less, I think what I'm trying to do should be fairly simple... (famous last words)
I have marked the line below that causes the problem. If I enter it in a HTML test window by itself, it makes a slider control pop up. But here, no joy.
If anyone has a suggestion, I would love to hear it. Thanks!!!
Code: Select all
wifi.setmode(wifi.STATION)
wifi.sta.config("xxx","yyy")
print(wifi.sta.getip())
led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive", function(client,request)
local buf = "";
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(method == nil)then
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
_GET[k] = v
end
end
buf = buf.."<h1> ESP8266 Web Server</h1>";
buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>ON</button></a> <a href=\"?pin=OFF1\"><button>OFF</button></a></p>";
buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>ON</button></a> <a href=\"?pin=OFF2\"><button>OFF</button></a></p>";
--this line is the problem:
buf = buf.."<input type="range" min=0 max=100 step=20 value=50>";
--without it everything works
local _on,_off = "",""
if(_GET.pin == "OFF1")then
gpio.write(led1, gpio.HIGH);
elseif(_GET.pin == "ON1")then
gpio.write(led1, gpio.LOW);
elseif(_GET.pin == "OFF2")then
gpio.write(led2, gpio.HIGH);
elseif(_GET.pin == "ON2")then
gpio.write(led2, gpio.LOW);
end
client:send(buf);
client:close();
collectgarbage();
end)
end)