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
的文档,第三个参数可以是 0
或 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 )
我找到了答案。我在建立连接时添加了一个回调。警报可能是在发送包裹之前重置连接。
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')
我正在使用 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
的文档,第三个参数可以是 0
或 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 )
我找到了答案。我在建立连接时添加了一个回调。警报可能是在发送包裹之前重置连接。
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')