【问题标题】:ESP8266 multiple pages access using net.createConnection(net.TCP, 0)ESP8266 多页访问使用 net.createConnection(net.TCP, 0)
【发布时间】:2017-05-03 21:41:03
【问题描述】:

我想在一个 Lua 程序中从 Google 读取时间并将数据发送到我的 ThingSpeak 频道。

第一个程序:

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

【问题讨论】:

  • 米歇尔,现在一切都好吗?你能解决你的问题吗?

标签: lua esp8266 nodemcu


【解决方案1】:

您是要将其拆分为两个文件还是将所有文件保存在一个文件中,这取决于您。假设您在init.lua 中将它们分开一个合理的启动顺序可能看起来像这样。它设置了一个tmr.alarm,它以 1 秒的间隔“循环”,直到 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 进行的。

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多