0

.connect には次のような簡単なことを行うコールバックがないため、モジュールが実際に wifi AP に接続するタイミングを検出しようとしています。

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 です。終了時に、コマンド =wifi.sta.status() を IDE から手動で送信すると、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 に答える