MicroPythonで開発する場合にちょっと便利なコード。いつも同じ場所で開発するならいいが、よそに持っていく機会があったり、複数の場所で開発を進めたりするとき複数の候補の中から最もRSSIの大きいネットワークに接続できるようにしておくと捗る。
まずこんな感じでSSIDをパスワードのペアのリストを定義する。
preferred_networks = [
('ap0_ssid', 'ap0_password'),
('ap1_ssid', 'ap1_password'),
('ap2_ssid', 'ap2_password')
]
その中から最もRSSIの大きいものに接続する。
import time
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
connection_interval = 0.5
connection_timeout = 5.0
def try_to_connect (target, config):
delay = 0
print("Trying to connect...")
print(target)
wlan.connect(config[0], config[1]) # SSID, password
while not wlan.isconnected() :
time.sleep(connection_interval)
delay += connection_interval
if delay > connection_timeout:
print("Timeout.")
wlan.disconnect()
return None # Failed
# Return wlan config
return wlan.ifconfig()
def connect ():
# Scan
print("Scanning...")
networks = wlan.scan()
# (ssid, bssid, channel, RSSI, security, hidden)
sorted_network = sorted(networks, key=lambda x: x[3], reverse=True)
for found in sorted_network:
for preferred in preferred_networks:
# Compare
if preferred[0] == found[0].decode("utf-8"):
result = try_to_connect(found, preferred)
if result is not None:
print("Connected.")
print(result)
return
wlan.disconnect()
connect()
起動時にこれが実行されるようにしておけば、スキャンして見つけたネットワークの中で preferred_networks に含まれるもののうち、最もRSSIが大きいものから順に接続を試行するようになる。