いっぺーちゃんの いろいろやってみよ~

micropython on ESP32 でWi-Fiルータ(or AP)に接続する

ESP32をWi-Fiルータ または アクセスポイントに接続します。
以下のプログラムを実行すると、Wi-Fiルータに接続できます。

SSID_NAME = "SSID名"
SSID_PASS = "パスワード"

import utime
import network
# ==== connecti to wifi access point ============================================
def connect_wifi(ssid, passkey, timeout=10):
    wifi= network.WLAN(network.STA_IF)
    if wifi.isconnected() :
        print('already Connected.    connect skip')
        return wifi
    else :
        wifi.active(True)
        wifi.connect(ssid, passkey)
        while not wifi.isconnected() and timeout > 0:
            print('.')
            utime.sleep(1)
            timeout -= 1
    
    if wifi.isconnected():
        print('Connected')
        return wifi
    else:
        print('Connection failed!')
        return null

wifi = connect_wifi(SSID_NAME, SSID_PASS)
if not wifi :
    sys.exit(0)

 

Espruinoのときとは違い、micropythonでは次回起動時に自動的に再接続はしてくれません。
Wi-Fiに接続するには、このプログラムを起動の度に実行しなければなりません。
micropythonは起動時にオンボードストレージの /boot.py を自動的に実行してくれますので、このプログラムを /boot.py として保存しておけば起動のたびにWi-Fiに接続できます。
ただし、設定したSSIDが通信範囲内にない場合はタイムアウトするまで(10秒)起動が遅れます。

オンボードストレージには下記のプログラムで書き込めます。
プログラムが小さいので、プログラム全体を文字列として保存し、それを書き込んでいます。
プログラムの中に「'''」「\n」「\r」などがないことを確認し、あれば別の文字に置き換えてください。

script = '''
# <<ここにパラメータを設定した上のプログラムをコピペしてください>>
'''
f=open("boot.py","wt")
f.write(script)
f.close()

 

書き込んだ内容を確認するには以下のように実行すればOKです。

open("/boot.py","rt").read()

 

一時的にboot.pyを無効にしたい場合はリネームしておくと良いでしょう。
以下のように実行するとリネームできます。

import uos
uos.chdir("/")
uos.listdir()
     ==> ['boot.py']
uos.rename("boot.py", "boot.temp")
uos.listdir()
     ==> ['boot.temp']

 

元に戻す場合は、uos.renameのパラメータを入れ替えて元に戻してください。

 

/boot.pyでなく、/lib/MyWifi.pyとして保存しておき、必要なときに

import MyWifi

とすることもできます。
/lib に保存するときはあらかじめ/libディレクトリを作成しておいてください。

import uos
uos.chdir("/")
uos.listdir()
     ==> ['boot.py']
uos.mkdir("/lib")
uos.listdir()
     ==> ['boot.py', 'lib']