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

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): Wi-Fiはアイドル状態で、現在ネットワークへの接続を試みていないことを示します。
  • 1 (STAT_CONNECTING): Wi-Fiがネットワークに接続中であることを示します。
  • 2 (STAT_WRONG_PASSWORD): 接続試行が失敗しました。理由は提供されたパスワードが間違っていることです。
  • 3 (STAT_GOT_IP): デバイスがネットワークに正常に接続し、IPアドレスを取得したことを示します。これは、成功した接続を示す理想的な状態です。
  • -1 (STAT_NO_AP_FOUND): 指定されたアクセスポイント(SSID)が見つからなかったことを示します。
  • -2 (STAT_CONNECT_FAIL): 間違ったパスワードやアクセスポイントが見つからない以外の理由で接続試行が失敗したことを示します。

Wi-Fi接続はプログラム終了後も維持される

実行してから気づきましたが、上記のMicroPythonプログラムを実行し、終了してもWi-Fiの接続は維持されます。

そのため、mipコマンド(pipのMicroPython版)で任意のモジュールをインストールしたい時には、上記のプログラムを実行->Ctrl-Cで中断->mip.install()を実行という流れで行えます。

Wi-Fiのパスワードを平文で保存することに注意

上記コードでは、平文でWi-Fiのパスワードを保存しています。

屋外等の不特性多数の人がアクセス可能な場所に配置する際はセキュリティリスクに注意する必要があります。

調査する限り、Pico W単体でパスワードを暗号化して使用することは難しく、外部モジュールを追加する必要があるようです。

そのため、対策としては次の2つが有力です。

  • Wi-Fiネットワークを独立させる: Pico Wが接続するWi-Fiネットワークでは、他のデバイスに接続不可とし、 Pico W <-> Wi-Fi AP(アクセスポイント) <-> Internetの接続のみ許可します。
  • Wi-Fiの代わりにBluetoothで他端末に接続し、データを送る。

まとめ

Raspberry Pi Pico WはWi-FIモジュールを内蔵しているため、簡単にインターネット接続ができ、IoTシステムのデバイスとして非常に便利です。

2000円以下でこんなデバイスが買えるなんてすごい時代ですね。 クラウドと連携させたシステムが簡単に作れるので、是非試してみてください。

よかったらシェアしてね!

CD

目次