如果循环正在运行,wifi.sta模块会连接吗?

时间:2015-10-22 18:22:21

标签: lua esp8266 nodemcu

我试图检测模块实际连接到我的wifi AP的时间,因为.connect没有回调我做这样简单的事情:

wifi.sta.config("SSID","password")
wifi.sta.connect()
tmr.delay(1000000)
i = 0
while(wifi.sta.status() ~= 5 and i < 10) do
  print("Waiting")
  print(wifi.sta.status())
  i = i + 1
  tmr.delay(1000000) 
end

但.sta.status()的输出在循环内始终为1。完成后,如果我从IDE手动发送命令= wifi.sta.status(),它会告诉我5.为什么?

2 个答案:

答案 0 :(得分:3)

如果你使用最新的开发固件,你可以做一些基于事件的事情:

wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)

function Success()
    tmr.stop(0)
    if (SERIAL_PRINT) then
        print("IP: " .. wifi.sta.getip())
    end
    wifi.sta.eventMonStop()
    wifi.sta.eventMonReg(wifi.STA_GOTIP, "unreg")
    dofile("mainProgram.lua")
end

function Failure()
    if (SERIAL_PRINT) then
        print("Unable to connect")
    end
    wifi.sta.eventMonStop()
    wifi.sta.eventMonReg(wifi.STA_GOTIP, "unreg")
    return 0
end

tmr.alarm(0,30000,0, function() Failure() end)
wifi.sta.connect()
wifi.sta.eventMonReg(wifi.STA_GOTIP, function() Success() end)
wifi.sta.eventMonStart()

编辑:请查看documentation以获取所有活动的列表。如果您希望使用此代码,则必须更清晰地处理故障。

答案 1 :(得分:1)

使用tmr.delay不允许运行事件循环,您应该使用计时器回调。

然后代码可能是这样的:

wifi.sta.config("SSID","password")
wifi.sta.connect()

i=0
tmr.alarm(1, 1000, 1, function()
    if (wifi.sta.status() ~= 5 and i < 10) then
       print("Status:"..wifi.sta.status())
       i = i + 1
    else
       tmr.stop(1)
       if (wifi.sta.status() == 5) then
          print("IP:"..wifi.sta.getip())
       else
          print("Status:"..wifi.sta.status())
       end
    end
end)