1

我正在使用 LuaLoader 在 NodeMCU 中编程。我正在尝试读取节点的 ADC 并将其发送到我公共域中的 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 中,它将返回:

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

4

2 回答 2

0

从 的文档中tmr.alarm,第三个参数可以是0or 1

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 )
于 2015-09-30T07:10:53.667 回答
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')
于 2015-10-06T05:15:59.293 回答