MicroPython(ESP32)でWifi接続する
はじめに【MicroPython+ESP32でWifiに接続する】 ESP32を選択する理由として「wifi接続できる」ことは大きいと思います。今回はMicroPythonを使用してWifi接続を行ってみます。 Wifi接続の設定 main.pyの作成 公式サイトの「ネットワーキング」にサンプルがあります。 [SSID][PASSWORD]は環境に合わせて書き換えてください。 import network import time SSID = "abcdefg" PASSWORD = "******" #ネットワークオブジェクトの構築 STA_IF<-ステーションモード wlan = network.WLAN(network.STA_IF) #True:ネットワークの有効化。 引数なしで状態の取得 wlan.active(True) #接続状態になるまで1秒おきに再試行。 if not wlan.isconnected(): wlan.connect(SSID, PASSWORD) while wlan.status() != network.STAT_GOT_IP: print('waiting...') time.sleep(1) #接続ができたらIPアドレスを表示して終了。 status = wlan.ifconfig() print(f'IP address {status[0]}') 動作確認 実行するとシェルにIPアドレスを表示します。 複数の接続先を登録して接続する方法 Wifiの接続先が複数の場合もあります(テスト中は家のWifi、 実行時は外部のWifiなど)。 ssid_lstにSSIDとパスワードを登録する。優先順位が高い順に。 wlan.scan()で接続可能なアクセスポイントを検索 ssid_lstと照会して、接続可能なところに接続 import network import time #接続先SSIDのリストを作る。優先度順。 ssid_lst=[["WIFI-A", "aabbccdd"], ["WIFI-B", "bbccddaa"], ["WIFI-C", "ddaabbcc"]] #ネットワークオブジェクトの構築 STA_IF<-ステーションモード wlan = network.WLAN(network.STA_IF) #ネットワークの有効化。 wlan.active(True) #lstにwlan.scan()の戻り値(タプル型)を代入 lst = wlan.scan() #接続先のリストを作成 ap_lst = set() #空の集合 #ap_lst集合に接続できるアクセスポイントを格納 #.decode()はbytearray型をstring型に変換する。 for l in lst: ap_lst.add(l[0].decode()) if not wlan.isconnected(): #優先順位順に接続先を確認する。 for l in range(len(ssid_lst)): if ssid_lst[l][0] in ap_lst: ssid = ssid_lst[l][0] password = ssid_lst[l][1] wlan.connect(ssid, password) while wlan.status() != network.STAT_GOT_IP: print(ssid, ':waiting...') time.sleep(1) #接続ができたらIPアドレスを表示して終了。 status = wlan.ifconfig() print(f'IP address {status[0]}') 問題点 上記のコードは接続が切断された場合、再接続が失敗します (wlan.scan()が失敗する)。まだいい方法が見つからないので、 今後の課題として修正していきます。 ...