我想从Google阅读时间并将数据发送到我的ThingSpeak频道,所有这些都在一个Lua程序中。
第一个程序:
connout = nil
connout = net.createConnection(net.TCP, 0)
connout:on("receive",
function(connout, payloadout)
if (string.find(payloadout, "Status: 200 OK") ~= nil) then
end
end)
connout:on("connection",
function(connout, payloadout)
connout:send("GET /update?api_key="..CHANNEL_API_KEY.."&field1="
.. humi .. " HTTP/1.1\r\n" .. "Host: api.thingspeak.com\r\n"
.. "Connection: close\r\n" .. "Accept: */*\r\n"
.. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.. "\r\n")
end)
connout:on("disconnection",
function(connout, payloadout)
connout:close();
collectgarbage();
end)
connout:connect(80,'api.thingspeak.com')
gpio.write(pinled,gpio.LOW)
end)
第二个程序:
conn=net.createConnection(net.TCP, 0)
conn:on("connection",function(conn, payloadout)
conn:send("HEAD / HTTP/1.1\r\n".. "Host: google.com\r\n"..
"Accept: */*\r\n"..
"User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)"..
"\r\n\r\n")
end)
conn:on("receive",
function(conn, payload)
tmp = string.find(payload,"Date: ")
print(tmp)
conn:close()
end)
t = tmr.now()
conn:connect(80,'google.com')
程序运行良好,但我希望它们都在一个Lua文件中。我应该创建两个TCP连接吗?或者以其他方式安排他们?
答案 0 :(得分:1)
是否要将其拆分为两个文件或将所有文件保存在一个文件中取决于您自己。假设你将它们分开,init.lua
中的合理启动序列可能看起来像这样。它设置了一个tmr.alarm
"循环"以1s为间隔,直到WiFi准备就绪。
--init.lua
function startup()
dofile("humi.lua")
dofile("time.lua")
end
print("set up wifi mode")
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID,PASSWORD)
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip() == nil then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
print("You have 5 seconds to abort Startup")
print("Waiting...")
tmr.alarm(0, 5000, 0, startup)
end
end)
我强烈建议您使用专用的HTTP module进行HTTP操作。这是一个如何与thingspeak.com交谈的例子
http.get("https://api.thingspeak.com/update?api_key=" .. CHANNEL_API_KEY .. "&field1=" .. humi, nil, function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
请注意,它是通过HTTPS而不是HTTP来实现的。