如果循环是 运行,wifi.sta 模块连接?
The wifi.sta module connects if a loop is running?
我正在尝试检测模块何时真正连接到我的 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. 为什么?
使用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)
如果您使用最新的开发固件,您可以做一些真正基于事件的事情:
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 以获取所有事件的列表。如果您想使用此代码,则必须更干净地处理故障。
我正在尝试检测模块何时真正连接到我的 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. 为什么?
使用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)
如果您使用最新的开发固件,您可以做一些真正基于事件的事情:
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 以获取所有事件的列表。如果您想使用此代码,则必须更干净地处理故障。