2015-09-30 2 views
1

Я программирую в NodeMCU с помощью LuaLoader. Я пытаюсь прочитать АЦП узла и отправить его в файл PHP в моем общедоступном домене.Lua alarm не выполняет код

Со следующим кодом я получаю ADC и IP-адрес узла и отправляю его через GET.

x = adc.read(0); 
ip = wifi.sta.getip(); 

conn=net.createConnection(net.TCP, 0) 
conn:on("receive", function(conn, payload) print(payload) end) 
conn:connect(80,'example.com') 
conn:send("GET /data.php?mdata="..x.."&ip="..ip.." HTTP/1.1\r\n") 
conn:send("Host: example.com\r\n") 
conn:send("Connection: keep-alive\r\nAccept: */*\r\n") 
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n") 
conn:send("\r\n") 
print ("Done") 

Код работает правильно. Если я вставляю это в моем LuaLoader он вернется:

HTTP/1.1 200 OK 
Date: Wed, 30 Sep 2015 02:47:51 GMT 
Server: Apache 
X-Powered-By: PHP/5.5.26 
Content-Length: 0 
Keep-Alive: timeout=2, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

Done 

Однако я хочу повторить код внутри тревоги и отправлять данные, каждую минуту, но он не работает.

tmr.alarm(0, 60000, 1, function() 
    x = adc.read(0); 
    ip = wifi.sta.getip(); 

    conn=net.createConnection(net.TCP, 0) 
    conn:on("receive", function(conn, payload) print(payload) end) 
    conn:connect(80,'example.com') 
    conn:send("GET /data.php?mdata="..x.."&ip="..ip.." HTTP/1.1\r\n") 
    conn:send("Host: example.com\r\n") 
    conn:send("Connection: keep-alive\r\nAccept: */*\r\n") 
    conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n") 
    conn:send("\r\n") 
    print ("Done") 
end) 

Выход только ...

Done 

... без полезной нагрузки. Он не отправляет данные.

Я попытался поместить код в функцию, в другой файл, и вызвал его на будильник с dotfile, но он не работает. Я попытался дать ему больше времени, чтобы отправить данные, увеличивающие тревогу 2 минуты, но ничего.

ответ

0

Я нашел ответ. Я добавил обратный вызов, когда соединение установлено. Возможно, тревога была связана с сбросом соединения перед отправкой пакета.

x = adc.read(0); 
ip = wifi.sta.getip(); 

conn=net.createConnection(net.TCP, 0) 
conn:on("receive", function(conn, payload) 
    print ("\nDone---------------") 
    print(payload)  
end) 

conn:on("connection", function(conn, payload) 
    print('\nConnected...') 
    conn:send("GET /data.php?mdata="..x.."&ip="..ip.." HTTP/1.1\r\n" 
     .."Host: example.com\r\n" 
     .."Connection: keep-alive\r\nAccept: */*\r\n" 
     .."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n" 
     .."\r\n") 
end) 

conn:connect(80,'example.com') 
0

Из документации tmr.alarm, то третий аргумент может быть 0 или 1:

repeat: `0` - one time alarm, `1` - repeat 

Поскольку вы передаете 0, он выполняет функцию только один раз. Pass 1 вместо:

tmr.alarm(0, 60000, 1, function() 
    x = adc.read(0); 
    ip = wifi.sta.getip(); 

    conn=net.createConnection(net.TCP, 0) 
    conn:on("receive", function(conn, payload) print(payload) end) 
    conn:connect(80,'robcc.esy.es') 
    conn:send("GET /data.php?mdata="..x.."&ip="..ip.." HTTP/1.1\r\n") 
    conn:send("Host: robcc.esy.es\r\n") 
    conn:send("Connection: keep-alive\r\nAccept: */*\r\n") 
    conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n") 
    conn:send("\r\n") 
    print ("Done") 
end) 
+0

Да, я попытался в последний момент изменить его на 0, но все еще с 1 в третьем аргументе, но он ничего не отправляет. – nihCC