はじめに
初めまして、のすけと申します。
研究室の配属が決まり、ESP32-WROOM-32を実験で使用する事になりました。
現在、私は多くのESP32に囲まれて興奮しております。
ESP32を大学や自宅、実家など移動して使用する事がよくありますが、
移動する度にシリアル通信を行い、SSIDとPASSWORDを設定するのは大変です。
そこで、今回は複数の接続情報から自動でWiFi圏内のネットワークに接続するプログラムを作成したので紹介します。
この記事では以下の環境で動作確認をしております。
MicroPython:v1.14
ハードウェア:ESP32-DevKitC
単一の接続先情報から接続するサンプルプログラム
MicroPython reference (Networking)を閲覧すると、 以下のようなプログラムが記載されています。
SSID = ""
PASSWORD = ""
def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(SSID, PASSWORD)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
if __name__ == "__main__":
do_connect()
このプログラムを元に複数の接続情報から自動的に接続するプログラムに変更していきたいと思います。
複数の接続先情報から接続するサンプルプログラム
以下のプログラムは複数の接続先情報から自動的に接続します。
WIFI_CONFIG = [("SSID1","PASS1")
,("SSID2","PASS2")
,("SSID3","PASS3")]
def do_connect(wifi_config):
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
scandata = sta_if.scan()
for scan in scandata:
for config in wifi_config:
if(scan[0].decode() == config[0]):
sta_if.connect(config[0], config[1])
while not sta_if.isconnected():
pass
print('connected: ' , sta_if.config('essid'))
print('network config:' , sta_if.ifconfig())
if __name__ == "__main__":
do_connect(WIFI_CONFIG)
配列WIFI_CONFIGに格納した、SSIDとPASSWORDのタプルを使用して接続を行います。
MicroPython reference (network configuration)を閲覧すると、 周囲のWIFIをスキャンする事ができる事が記載されています。
そこで、scandata = sta_if.scan()
の部分でESP32周辺のWiFiをスキャンし配列とスキャン内容に同じSSIDがあった場合のみ接続試行を行うというものになります。
終わりに
これで、場所を変更してもESP32-WROOM-32が複数の接続情報から自動で接続するようになりました。
皆さんも良いESP32ライフをお送りください!
最後まで閲覧ありがとうございました。
参考になりましたら、LGTMを押していただけるととてもうれしいです(^^)/。