Lua 报警不执行代码

Lua alarm does not execute code

我正在使用 LuaLoader 在 NodeMCU 中编程。我正在尝试读取节点的 ADC 并将其发送到我的 public 域中的 PHP 文件。

在接下来的代码中,我获取了 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 中,它将 return:

 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 分钟的数据,但什么也没有。

根据 tmr.alarm 的文档,第三个参数可以是 01:

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

由于您传递的是 0,它只执行一次该函数。改为传递 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 )

我找到了答案。我在建立连接时添加了一个回调。警报可能是在发送包裹之前重置连接。

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')