wifi.sta模块只有在程序中运行循环时才会连接?

我正在尝试检测模块实际连接到我的 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。为什么?

点赞
用户3102264
用户3102264

使用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)
2015-10-23 19:17:18
用户922975
用户922975

如果您使用的是最近的 dev 固件,您可以做一些真正基于事件的事情:

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("无法连接")
    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()

编辑:请查看文档获取所有事件列表。如果您希望使用此代码,您将需要更优雅地处理失败。

2015-11-14 07:55:00