Добрый день.
Только начинаю разбираться с этой штуковиной да и с языком Lua тоже.
Набросал небольшой код управлением светодиодными лентами + управление РГБ лентой(код в разработке):
Этот код это всего лишь начало проекта, но уже несколько вопросов.
1 - как эффективнее всего передавать с андройда по ВиФи команды на устройство. Через HTTP запрос/ответ получается крайне медленно, не в плане передать за раз большой объем данных в плане 100 раз маленький объем.
2 - в моем коде есть ошибка переполнения памяти. Если за несколько секунд передать с пол сотни запросов, то идет переполнение. Если передать скажем 50 запросов, подождать несколько сек то память очищается и потом можно передать вторую часть. Но меня это не устраивает. Как быть в этой ситуации?
3 - если передавать много запросов и принимать ответы. то часть запросов/ответов временно теряются. Но потом приходят в конце всех остальных запросов.
Скажем передаю сто запросов с переменной CR= от 0 до 100. При этом на устройство могут не прийти запросы с CR=20,37,45,86. После того как пройдет последний запрос с CR=99, секунды через полторы-2 приходят потерянные данные с CR=20,37,45,86. Подскажите что не так с получением данных и их отправкой.
Ведройдная часть разрабатывается на App Invertor, отправка/прием данных идет через компоненту WEB
Только начинаю разбираться с этой штуковиной да и с языком Lua тоже.
Набросал небольшой код управлением светодиодными лентами + управление РГБ лентой(код в разработке):
Код:
srv=net.createServer(net.TCP)
srv:listen(1225,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
if (_GET.stat=="all") then
buf=""
for i=1, 8 do
buf=buf..i..":"..gpio.read(i)..";"
end
buf=buf.."11:"..gpio.read(11)..";"
buf=buf.."12:"..gpio.read(12)..";"
elseif (_GET.pin and _GET.stat) then
gpio.write(_GET.pin, _GET.stat)
buf="stat: ".._GET.pin..":".._GET.stat
print(_GET.pin..":".._GET.stat)
elseif _GET.CR or _GET.CG or _GET.CB then
--gpio.write(_GET.pin, _GET.stat)
buf="RGB: r-".._GET.CR.."; g-".._GET.CG.."; b-".._GET.CB
print(buf)
elseif(_GET.test == "1")then
local ss,s,mm,hh,dd
dd=tmr.time()
ss=dd%60
dd=(dd-ss)/60
mm=dd%60
dd=(dd-mm)/60
hh=dd%24
dd=(dd-hh)/24
buf="Uptime: "..string.format("%dd %02d:%02d:%02d", dd,hh,mm,ss)
end
end
client:on("sent", function(client) client:close() end)
client:send("HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r\n"..buf);
collectgarbage();
end)
end)
1 - как эффективнее всего передавать с андройда по ВиФи команды на устройство. Через HTTP запрос/ответ получается крайне медленно, не в плане передать за раз большой объем данных в плане 100 раз маленький объем.
2 - в моем коде есть ошибка переполнения памяти. Если за несколько секунд передать с пол сотни запросов, то идет переполнение. Если передать скажем 50 запросов, подождать несколько сек то память очищается и потом можно передать вторую часть. Но меня это не устраивает. Как быть в этой ситуации?
3 - если передавать много запросов и принимать ответы. то часть запросов/ответов временно теряются. Но потом приходят в конце всех остальных запросов.
Скажем передаю сто запросов с переменной CR= от 0 до 100. При этом на устройство могут не прийти запросы с CR=20,37,45,86. После того как пройдет последний запрос с CR=99, секунды через полторы-2 приходят потерянные данные с CR=20,37,45,86. Подскажите что не так с получением данных и их отправкой.
Ведройдная часть разрабатывается на App Invertor, отправка/прием данных идет через компоненту WEB