0

我试图检测模块何时真正连接到我的 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. 为什么?

4

2 回答 2

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()

编辑:请查看文档以获取所有事件的列表。如果您希望使用此代码,则必须更干净地处理故障。

于 2015-11-14T07:55:00.800 回答
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)
于 2015-10-23T19:17:18.433 回答