現象
前の記事ではWi-Fiでアクセスポイントに接続するプログラムを書きましたが、ここで不思議な現象に遭遇しました。WiFi.begin()で指定したAPではないAPに接続してしまったのです。ちゃんとSSIDをしているのになぜ??
そこで思い出したのは、どこかで見かけた
WiFi.begin("","")とすると前回接続したAPに接続される
という記事。
そのときはへ〜としか思ってなかったですが、もしかして与えたパラメーターは関係無いんじゃないかと思いました。
実験してみる(1)
前の記事のプログラムのWIFI_SSID_1に無効な内容を設定し、WIFI_SSID_2に有効な内容を設定して実行してみました。必ず1は失敗し、2に繋がるのが想定する動作です。
結果
- 1回目は、1は接続失敗、2に接続成功 (期待通り)
- リセットして2回目は、1で接続成功 (なんでやねん)
- リセットして3回目は、1回目と同じ
なんか変!
なぜか指定したSSIDではなく、リセット前に接続していたSSIDで接続をしているようでした。これは仕様なのでしょうか・・・。そういえば WiFi.printDiag(Serial); を入れたとき、こんな出力がありました。
Auto connect: 1
もしかしてオートコネクトが有効になっていると、与えたパラメーターに関係無く、前回の接続先に再接続してしまうのでしょうか。
実験してみる(2)
そういえばリセットするときにWi-Fiは接続した状態のままだったと思い、リセットをする前に切断するようにしてみました。
WiFi.disconnect();
結果
- 必ず1→2の順番で接続するようになった。(期待通り)
考察(よくわかってない)
ということで、Wi-Fiに接続したままリセット(起動)すると、WiFi.begin()は与えたパラメーターに関わらず前回接続時のAPに接続し、ちゃんと切断すると、WiFi.begin()は与えたパラメーター通りに接続する、という現象が確認できました。
「Auto connect: 1」になっているからだと言うと辻褄が合うのですが、あまりよくわかりません。