使用net.createConnection(net.TCP,0)ESP8266多页访问

时间:2016-12-18 20:11:52

标签: lua esp8266 nodemcu

我想从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连接吗?或者以其他方式安排他们?

1 个答案:

答案 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来实现的。