Raspberry Pi Pico WはWi-Fiモジュールを内蔵しており、簡単にインターネットに接続することができます。
インターネットに接続することでAWS IoT Coreなどのクラウドサービスにメッセージを送り、過去のデータを保存するといったことができ、高度なIoTシステムを作ることができます。
MicroPythonコード
Wi-Fiに接続するために特別なセットアップは必要ありません。MicroPythonプログラムで接続のコードを実行するだけです。素晴らしいですね。
それでは早速、MicroPythonのコードを見ていきます。
このコードのSSIDとPASSWORDを置き換えて、実行すればWi-Fiに接続できます。
import time
import network # type: ignore
time.sleep(10)
# Wi-Fi
SSID = "<Your SSID>"
PASSWORD = "<Your Password>"
def connect_wifi(ssid: str, password: str) -> network.WLAN:
try:
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# 接続を待つ
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 2:
break
max_wait -= 1
print("Waiting for connection...")
time.sleep(1)
# 接続の確認
if wlan.status() != 3:
raise RuntimeError(f"Network connection failed: {wlan.status()}")
else:
print("Connected")
status = wlan.ifconfig()
print("IP address:", status[0])
return wlan
except Exception as e:
print(f"Failed to connect to Wi-Fi: {e}")
raise e
if __name__ == "__main__":
connect_wifi(SSID, PASSWORD)シンプルなコードですので、wlan.status()の部分だけ解説します。wlan.status()は次の値を返します。正常な状態は 3 のみで、それ以外はアイドル・接続中・エラーのいずれかです。
| 値 | 定数 | 説明 |
|---|---|---|
| 0 | STAT_IDLE | アイドル状態(接続未試行) |
| 1 | STAT_CONNECTING | 接続中 |
| 2 | STAT_WRONG_PASSWORD | パスワードが間違っている |
| 3 | STAT_GOT_IP | 接続成功・IPアドレス取得済み |
| -1 | STAT_NO_AP_FOUND | 指定のAPが見つからない |
| -2 | STAT_CONNECT_FAIL | その他の理由で接続失敗 |
Wi-Fi接続はプログラム終了後も維持される
実行してから気づきましたが、上記のMicroPythonプログラムを実行し、終了してもWi-Fiの接続は維持されます。
そのため、mipコマンド(pipのMicroPython版)で任意のモジュールをインストールしたい時には、上記のプログラムを実行->Ctrl-Cで中断->mip.install()を実行という流れで行えます。
Wi-Fiのパスワードを平文で保存することに注意
上記コードでは、平文でWi-Fiのパスワードを保存しています。
屋外等の不特性多数の人がアクセス可能な場所に配置する際はセキュリティリスクに注意する必要があります。
調査する限り、Pico W単体でパスワードを暗号化して使用することは難しく、外部モジュールを追加する必要があるようです。
対策としては次の2つが有力です。
まとめ
Raspberry Pi Pico WはWi-FIモジュールを内蔵しているため、簡単にインターネット接続ができ、IoTシステムのデバイスとして非常に便利です。
2000円以下でこんなデバイスが買えるなんてすごい時代ですね。
クラウドと連携させたシステムが簡単に作れるので、是非試してみてください。


