• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Для новичков

Юрий Ботов

Moderator
Команда форума
Приведи весь код. Из этого не понятно что надо делать и по какому событию. А лучше напиши что этот код с твоей точки зрения ДОЛЖЕН делать.
 

joner9682

New member
Вот весь код, отправка уведомлений в конце. Задача следующая, необходимо чтобы при достижении на аналоговом входе A0 т.е ADC он же pin[8], уровня выше 900 на телефон отправлялось только одно сообщение что уличное освещение включено и включается pin[4]. В обратном случае аналогично, только сообщение о отключении освещения. Код пришлось добавлять таким способом, поскольку в нем 13 000 символов а тут стоит ограничение на 10 000.
 

Вложения

Foss

New member
Добрый день, у меня выбивает вот такую вот ошибку: unprotected error in call to Lua API(init.lua:48: need <1460 payload)
Вот код:
wifi.setmode(wifi.SOFTAP)
cfg={}
cfg.ssid="WILDFLAME"
cfg.pwd="thispasswordforesp"
wifi.ap.config(cfg)
-- ssid-название сети, pwd-пароль, ip-192.168.4.1

led5 = 1
led4 = 2
led14 = 5
led15 = 6
led13 = 7
gpio.mode(led5, gpio_OUTPUT)
gpio.mode(led4, gpio_OUTPUT)
gpio.mode(led14, gpio_OUTPUT)
gpio.mode(led15, gpio_OUTPUT)
gpio.mode(led13, gpio_OUTPUT)
restart=0;

gpio.write(led5, gpio.LOW);
gpio.write(led4, gpio.LOW);
gpio.write(led14, gpio.LOW);
gpio.write(led15, gpio.LOW);
gpio.write(led13, gpio.LOW);


t=0
tmr.alarm(0,1000, 1, function() t=t+1 if t>999 then t=0 end end)

srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
conn:eek:n("receive",function(client,request)
-- парсинг для отслеживания нажатий кнопок _GET
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
-- это начало веб сайта
-- в начале ставим <html><body>, в конце каждой строки знак \
-- в конце последней строки не ставим знак \, а </body></html>
conn:send('HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
<!DOCTYPE HTML>\
<html>\
<head>\
<title>WILDFLAME</title>\
<style>\
body { height:100vh; background: linear-gradient(#000,#06f);}\
h1 {text-align:center; color:#ff0000;font-size:90px; font-family:Arial; margin: 70px auto;}\
.key1,.key2,.key3,.key4{color:#fff; font-size:60px; text-transform: uppercase; text-align:center; font-family: Arial; }\
.key1 span,.key2 span,.key3 span,.key4 span {vertical-align: middle;}\
.key1 button{margin-left: 80px;}\
.key2 button{margin-left: 70px;}\
.key3 button{margin-left: 60px;}\
.key4 button{margin-left: 50px;}\
button{background:#3F3F3F; border-radius:5px; width:100px;height:100px; -webkit-transition: all 0.3s ease;transition: all 0.3s ease; box-shadow: inset 0px 1px 0px #5A5A5A, 1px 1px 0px 0px #626262, 0px 2px 15px #FFF;}\
button:focus{background:#FBF63F; box-shadow: inset 0 0px 11px rgb(255, 255, 255);}\
button:hover{box-shadow: inset 0px 0px 8px rgb(255, 255, 255);}\
button:active{background:#FBF63F; box-shadow: inset 0 0px 11px rgb(255, 255, 255);}\
</style>\
</head>\
<body>\
<br/>\
<h1>WILDFLAME</h1>\
<br/>\
<div class="key1"><span>On/Off</span><a href="/?pin=ON1"><button class="btn active"></button></a></div><br/>\
<div class="key2"><span>Start/Stop</span><a href="/?pin=ON2"><button class="btn active"></button></a></div>\
<div class="key3"><span>Eco</span><a href="/?pin=ON3"><button class="btn active"></button></a></div>\
<div class="key4"><span>Max</span><a href="/?pin=ON4"><button class="btn active"></button></a></div>\
<p>&nbsp;</p>\
</div>\
</body>\
</html>')
-- это конец
-- теперь опрос нажатых кнопок
local _on = "",""
if(_GET.pin == "ON1")then
gpio.write(led5, gpio.HIGH);
tmr.delay(150000)
gpio.write(led5, gpio.LOW);
end
if(_GET.pin == "ON2")then
gpio.write(led4, gpio.HIGH);
tmr.delay(150000)
gpio.write(led4, gpio.LOW);
end
if(_GET.pin == "ON3")then
gpio.write(led14, gpio.HIGH);
tmr.delay(150000)
gpio.write(led14, gpio.LOW);
end
if(_GET.pin == "ON4")then
gpio.write(led15, gpio.HIGH);
tmr.delay(150000)
gpio.write(led15, gpio.LOW);
end


conn:eek:n("sent",function(conn) conn:close() end)
collectgarbage();


end)

end)

Подскажите пожалуйста что это может быть и как исправить эту ошибку
 

Foss

New member
смотрите строку 48 - у вас слишком много данных (нужно менее 1460 символов)
Не могу от туда ничего убирать, подскажите как это можно переделать чтобы все что там написано осталось и работало?
Строка 48-это вот эта строка: conn:send('HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
 

Foss

New member
Подскажите как мне подключить к модулю файл? Пишу на NodeMCU через ESPlorer
 

Foss

New member
Добрый день, как правильно отсылать данные по tcp, если у меня ява скрипт, в котором я использую
conn:send('</head>\
body>\
<div class="container">\
<br/>\
<!--<h1>WILDFLAME</h1>-->\
<br/>\
<div class="key1">\
<div class="container1">\
<span>On/Off</span></div>\
<div class="container2">\
<a href="#" onclick="ajax.get('/', {pin: 'ON1'}, function() {});"><button class="btn active"> <img src="/play.png" width="50" height="50"></button></a></div>\
</div><br/>\
<p>&nbsp;</p>\
.......................
</htm>')

и вот здесь у меня возникает ошибка
<a href="#" onclick="ajax.get('/', {pin: 'ON1'}, function() {});"><button class="btn active"> <img src="/play.png" width="50" height="50"></button></a></div>\
</div><br/>\

вот такая вот
init.lua:158: ')' expected (to close '(' at line 148) near 'ON1'

как меня обойти эту ошибку и сделать чтобы все отправилось нормально?
NodeMCU, ESPlorer, LUA
 

Foss

New member
wifi.setmode(wifi.SOFTAP)
cfg={}
cfg.ssid="WILDFLAME"
cfg.pwd="smart123"
wifi.ap.config(cfg)
-- ssid-название сети, pwd-пароль, ip-192.168.4.1
led5 = 1
led4 = 2
led14 = 5
led15 = 6
led13 = 7
gpio.mode(led5, gpio_OUTPUT)
gpio.mode(led4, gpio_OUTPUT)
gpio.mode(led14, gpio_OUTPUT)
gpio.mode(led15, gpio_OUTPUT)
gpio.mode(led13, gpio_OUTPUT)
restart=0;
gpio.write(led5, gpio.LOW);
gpio.write(led4, gpio.LOW);
gpio.write(led14, gpio.LOW);
gpio.write(led15, gpio.LOW);
gpio.write(led13, gpio.LOW);
t=0
tmr.alarm(0,1000, 1, function() t=t+1 if t>999 then t=0 end end)
srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
conn:eek:n("receive",function(client,request)
-- парсинг для отслеживания нажатий кнопок _GET
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
-- это начало веб сайта
-- в начале ставим <html><body>, в конце каждой строки знак \
-- в конце последней строки не ставим знак \, а </body></html>
conn:send("HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
<!DOCTYPE HTML>\
<html>\
<head>\
<title>WILDFLAME</title>\
<style>\
body {\
height: calc(100vh);\
background: linear-gradient(#000,#06f);\
}\
.container {\
margin: 0 auto;\
}\
.container1 {\
width: 80%;\
float: left;\
text-align: center;\
height: 100px;\
margin-top: 17px;\
}\
.container2 {\
width: 15%;\
float: left;\
}\
h1 {text-align:center; color:#ff0000;font-size:90px; font-family:Arial; margin: 70px auto;}\
.key1 {\
margin-top: 100px;\
}\
.key1,\
.key2,\
.key3,\
.key4 {\
color: #fff;\
font-size: 60px;\
text-transform: uppercase;\
font-family: Arial;\
margin-right: 18%\
}\
.key1 span,\
.key2 span,\
.key3 span,\
.key4 span {\
vertical-align: middle;\
}\
button {\
background: #3F3F3F;\
border-radius: 5px;\
width: 100px;\
height: 100px;\
-webkit-transition: all 0.3s ease;\
transition: all 0.3s ease;\
box-shadow: inset 0px 1px 0px #5A5A5A, 1px 1px 0px 0px #626262, 0px 2px 15px #FFF;\
}\
button:focus {\
background: #FBF63F;\
box-shadow: inset 0 0px 11px rgb(255, 255, 255);\
}\
button:hover {\
box-shadow: inset 0px 0px 8px rgb(255, 255, 255);\
}\
button:active {\
background: #FBF63F;\
box-shadow: inset 0 0px 11px rgb(255, 255, 255);\
}\
</style>")
conn:send("<script>\
var ajax = {};\
ajax.x = function() {\
if (typeof XMLHttpRequest !== 'undefined') {\
return new XMLHttpRequest();\
}\
var versions = [\
'MSXML2.XmlHttp.6.0',\
'MSXML2.XmlHttp.5.0',\
'MSXML2.XmlHttp.4.0',\
'MSXML2.XmlHttp.3.0',\
'MSXML2.XmlHttp.2.0',\
'Microsoft.XmlHttp'\
];\
var xhr;\
for (var i = 0; i < versions.length; i++) {\
try {\
xhr = new ActiveXObject(versions);\
break;\
} catch (e) {}\
}\
return xhr;\
};\
ajax.send = function(url, callback, method, data, async) {\
if (async === undefined) {\
async = true;\
}\
var x = ajax.x();\
x.open(method, url, async);\
x.onreadystatechange = function() {\
if (x.readyState == 4) {\
callback(x.responseText)\
}\
};\
if (method == 'POST') {\
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\
}\
x.send(data)\
};\
ajax.get = function(url, data, callback, async) {\
var query = [];\
for (var key in data) {\
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\
}\
ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)\
};\
</script>")
conn:send('</head>\
<body>\
<div class="container">\
<br/>\
<h1>WILDFLAME</h1>\
<br/>\
<div class="key1">\
<div class="container1">\
<span>On/Off</span></div>\
<div class="container2">\
<a href="#" onclick="ajax.get(\"/\", {pin: \"ON1\"}, function() {});"><button class="btn active" width="50" height="50"></button></a></div>\
</div><br/>\
<p>&nbsp;</p>\
<div class="key2">\
<div class="container1">\
<span>Start/Stop</span></div>\
<div class="container2">\
<a href="#" onclick="ajax.get(\"/\", {pin: \"ON2\"}, function() {});"><button class="btn active"></button></a></div>\
</div><br/>\
<p>&nbsp;</p>\
<div class="key3">\
<div class="container1">\
<span>Eco</span></div>\
<div class="container2">\
<a href="#" onclick="ajax.get(\"/\", {pin: \"ON3\"}, function() {});"><button class="btn active"></button></a></div>\
</div><br/>\
<p>&nbsp;</p>\
<div class="key4">\
<div class="container1">\
<span>Max</span></div>\
<div class="container2">\
<a href="#" onclick="ajax.get(\'/\', {pin: \'ON4\'}, function() {});"><button class="btn active"></button></a></div>\
</div><br/>\
<p>&nbsp;</p>\
</div>\
</body>\
</htm>')
-- это конец
-- теперь опрос нажатых кнопок
local _on = "",""
if(_GET.pin == "ON1")then
gpio.write(led5, gpio.HIGH);
tmr.delay(150000)
gpio.write(led5, gpio.LOW);
end
if(_GET.pin == "ON2")then
gpio.write(led4, gpio.HIGH);
tmr.delay(150000)
gpio.write(led4, gpio.LOW);
end
if(_GET.pin == "ON3")then
gpio.write(led14, gpio.HIGH);
tmr.delay(150000)
gpio.write(led14, gpio.LOW);
end
if(_GET.pin == "ON4")then
gpio.write(led15, gpio.HIGH);
tmr.delay(150000)
gpio.write(led15, gpio.LOW);
end
conn:eek:n("sent",function(conn) conn:close() end)
collectgarbage();
end)
end)





Сайт заливается на модуль, но когда нажимаешь кнопку на сайте, кнопка загорается желтым, но потом не тухнет (не становится опять серой) и никакого сигнала не идет с ножек модуля, что это может быть?
 

Foss

New member
Добрый день, мне нужно на модуле сделать сервер (точку доступа), модуль по юарту получает числа, в зависимости от этого числа мне нужно на сайт, которые лежит на этом модуле, выводить ту или иную информацию (например писать что либо или рисовать), кроме этого на сайте еще есть кнопки, если та или иная кнопка нажата, нужно по юарту слать определенное число, в зависимости от того, какая из кнопок нажата. Может кто подскажет как это сделать или даст полезные ссылки, статьи по этому поводу?
 

Exider

New member
Ни фига не понимаю... Вроде с МК знаком не понаслышке... Но пока это чудо творит что хочет. Скорость порта по умолчанию должна быть 115200, у меня же 9600... Я конечно прописываю uart.setup. но ведь потом приходится переключать скорость порта вручную. ЧЯДНТ?

Второй вопрос касается файловой системы. Я редактирую свой код, делаю upload (для надежности даже Save to ESP). Но один фиг Esp продолжает выполнять то, что было залито до этого... Как с ним бороться?
 

Exider

New member
Ни фига не понимаю... Вроде с МК знаком не понаслышке... Но пока это чудо творит что хочет. Скорость порта по умолчанию должна быть 115200, у меня же 9600... Я конечно прописываю uart.setup. но ведь потом приходится переключать скорость порта вручную. ЧЯДНТ?

Второй вопрос касается файловой системы. Я редактирую свой код, делаю upload (для надежности даже Save to ESP). Но один фиг Esp продолжает выполнять то, что было залито до этого... Как с ним бороться?
Сам себе и отвечу - дело было в древней прошивке 0.9.5
 

Foss

New member
Добрый день, подскажите как мне обойти размер ограничения буфера, у меня из 5и tcp пакетов передается только 3, как быть?
 
Сверху Снизу