【发布时间】:2017-02-15 07:01:16
【问题描述】:
我正在尝试使用 Lua 语言解决 wifi 连接问题。我一直在梳理the api 以找到解决方案,但还没有确定的解决方案。我问了一个先前的问题, dynamically switch between wifi networks,答案确实以我提出的方式解决了这个问题,但它并没有达到我的预期。
基本上,我有来自两个不同提供商的两个不同网络。我想要 ESP8266 12e 做的就是检测当前网络何时或是否无法访问互联网并自动切换到下一个网络。它必须以 3 分钟的间隔不断尝试连接,直到成功,而不仅仅是放弃。
出于测试目的,我在下面尝试了此代码。计划是使用变量“effectiveRouter”,并编写一些逻辑来根据当前路由器进行切换。
effectiveRouter = nil
function wifiConnect(id,pw)
counter = 0
wifi.sta.config(id,pw)
tmr.alarm(1, 1000, tmr.ALARM_SEMI, function()
counter = counter + 1
if counter < 10 then
if wifi.sta.getip() == nil then
print("NO IP yet! Trying on "..id)
tmr.start(1)
else
print("Connected, IP is "..wifi.sta.getip())
end
end
end)
end
wifiConnect("myNetwork","myPassword")
print(effectiveRouter)
当我运行该代码时,我在控制台上将 effectiveRouter 设为 nil。这告诉我 print 语句在方法调用完成之前运行,print(effectiveRouter)。我对 lua 非常陌生,因为这是我第一次使用该语言。我确信这个样板代码之前一定已经完成了。有人可以指出我正确的方向吗?我愿意转移到 arduino IDE,因为我已经为 NodeMCU ESP8266 设置了它。由于我来自 java-OOP 背景,也许我可以更好地遵循逻辑。
【问题讨论】:
-
effectiveRouter 从未在提供的代码中分配任何值。它怎么会变成零呢?您启动一个计时器,该计时器将在 1000 毫秒后第一次关闭。然后你立即打印 effectiveRouter ,此时当然是 nil 。第一次连接尝试将在您打印 EffectiveRouter 之后发生。但是无论你的定时器回调发生了什么,它都不会影响 EffectiveRouter 的值
-
@Piglet 感谢您指出,我的错误。上面的代码是我玩过的众多变体之一。在函数的 else 部分中,我有一个空行,我从中删除了分配“effectiveRouter=dlink”