我试图检测模块实际连接到我的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.为什么?
答案 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)