我在家裏有兩個WiFi網絡,我想用我的NodeMCU ESP8266 V1來從世界任何地方通過網絡遠程控制幾個中繼。爲了達到這個目的,我想測試WiFi連通性,如果我在1分鐘內沒有獲得IP,請嘗試其他網絡,直到獲得IP。這是我在下面的代碼中遵循的API docs for tmr。在WiFi網絡之間動態切換
有沒有辦法使用Lua以編程方式在兩個或多個wifi網絡之間切換?我使用的是Lua語言,但是如果需要,我可以移動到arduino IDE。
wifi.setmode(wifi.STATION)
myRouter = "dlink"
tmr.alarm(1, 60000, tmr.ALARM_SINGLE, function()
if myRouter=="dlink" then
print("Dlink selected")
wifi.sta.config("dlink","password1")
wifi.sta.connect()
if wifi.sta.getip() == nil then
print("NO IP yet! ,Connecting...")
else
tmr.stop(1)
print("Connected, IP is "..wifi.sta.getip())
end
elseif myRouter=="cisco" then
print("Cisco selected")
wifi.sta.config("cisco","passoword2")
wifi.sta.connect()
if wifi.sta.getip() == nil then
print("NO IP yet! ,Connecting...")
else
tmr.stop(1)
print("Connected, IP is "..wifi.sta.getip())
end
else
print("No network is giving an ip")
end
end)
我所尋找的是一個觸發每當定時器「TMR」過期回調。這樣我可以將變量更改爲myRouter =「cisco」。注意在上面的代碼中,我無法更改「myRouter」變量。
我考慮用一個software watchdog來監測視頻的時間,所以如果WiFi在一個網絡上掉電,它會通過運行上面的代碼來觸發重新連接。我不知道如何做到這一點,或者通常如何做,因爲我對lua很新穎。請告知或指出我可以在這方面提供幫助的資源。多謝你們。
您可以隨時在代碼中的任何地方更改myRouter的值。它是一個全球變量。至少在你提供的代碼中。 您的代碼將在1分鐘後嘗試連接到網絡。如果你成功了,你就停下來(你有一個單獨的計時器,不需要停止它),如果你沒有成功,你打印出「沒有IP!,連接...」,然後你的程序就完成了。如果無法連接,爲什麼不重新啓動計時器? 請再次閱讀tmr文檔。我認爲你沒有得到它所做的。 – Piglet
感謝您的快速回復,我瞭解它是一個全局變量,我可以隨時更改它。問題是我什麼時候改變它。是否有一個函數在定時器自動重新啓動之前調用,我可以更新變量然後跳回到定時器代碼中?也就是說,假設沒有建立連接。我會查看文檔。 – Binaryrespawn
你應該在定時器回調中改變它。在你的實現中,當初始化單次計時器(tmr.ALARM_SINGLE)時,定時器將不會重新啓動。它將在60000ms過期後執行您的代碼。結帳自動和半自動計時器。 嘗試連接,啓動計時器,當計時器到期時(1分鐘後),檢查您是否成功,如果沒有更改路由器並重新啓動計時器(所以它會在1分鐘內再次檢查),如果是的話,不得不重新啓動計時器,你就完成了。 – Piglet