Raspberry Pi Pico WをWi-Fiに接続する(MicroPython)

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 のみで、それ以外はアイドル・接続中・エラーのいずれかです。

定数説明
0STAT_IDLEアイドル状態(接続未試行)
1STAT_CONNECTING接続中
2STAT_WRONG_PASSWORDパスワードが間違っている
3STAT_GOT_IP接続成功・IPアドレス取得済み
-1STAT_NO_AP_FOUND指定のAPが見つからない
-2STAT_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円以下でこんなデバイスが買えるなんてすごい時代ですね。

クラウドと連携させたシステムが簡単に作れるので、是非試してみてください。

関連記事