Raspberry Pi Pico W を USB Wi‑Fi アダプターとして使用する
Raspberry Pi Pico W を USB Wi‑Fi アダプターとして使用する
概要
Pico W USB Wi‑Fi アダプタープロジェクトは、Raspberry Pi Pico W を汎用 USB Ethernet デバイスとして再利用し、オンボードの 802.11 Wi‑Fi ラジオを通じてトラフィックをトンネリングする方法を実証するものです。これにより、USB ネットワークをサポートするあらゆるホスト(Windows, macOS, Linux, Android など)が、追加のハードウェアなしですぐにワイヤレス化されます。
なぜ重要なのか
- ユニバーサル・ワイヤレス・ブリッジ – 単一の安価なマイクロコントローラーが、専用の USB‑Wi‑Fi ドングルに代わるものとなり、コストを削減し、在庫管理を簡素化します。
- オープンソース・ファームウェア – ファームウェアは GitLab (https://gitlab.com/baiyibai/pico-usb-wifi) でホストされており、公式の Pico SDK でビルド可能です。これにより、カスタムの調整や他のプロジェクトへの統合が可能です。
- 低電力 & 小さなフォームファクタ – Pico W の 2 × 20 mm ボードは、狭いスペースにも収まり、動作時にはわずか数十ミリアンペアしか消費しません。そのため、組み込み機器やポータブルなユースケースに適しています。
仕組み
- USB CDC‑ECM (Ethernet Control Model) – ファームウェアは CDC‑ECM クラスを実装しており、Pico W をホストに対して仮想 Ethernet アダプターとして提示します。
- Wi‑Fi ステーションモード – Pico は、内蔵の CYW43439 ラジオを使用して、設定された Wi‑Fi ネットワークに接続します。
- パケット・フォワーディング – USB 経由で受信した Ethernet フレームはカプセル化され、Wi‑Fi インターフェース経由で送信されます。受信した Wi‑Fi パケットはデカプセル化され、USB 経由でホストに配信されます。
- 設定 – ネットワーク資格情報 (SSID, パスワード) とオプションの静的 IP 設定は、Pico のフラッシュメモリに保存され、シンプルなシリアル・コンソールまたは小さな Web UI (コンパイル時に含める場合) を経由して更新できます。
はじめに
前提条件
- Raspberry Pi Pico W ボード。
- 最新バージョンの Raspberry Pi Pico SDK (≥ 1.5.0)。
- CMake と適切なコンパイラ・ツールチェーン (例: GNU Arm Embedded Toolchain)。
- テスト用の Wi‑Fi ネットワークへのアクセス。
ビルド手順
# Clone the repository
git clone https://gitlab.com/baiyibai/pico-usb-wifi.git
cd pico-usb-wifi
# Initialize submodules (if any)
git submodule update --init --recursive
# Create a build directory
mkdir build && cd build
# Configure with CMake, pointing to your Pico SDK path
cmake -DPICO_SDK_PATH=/path/to/pico-sdk ..
# Build the firmware
make -j$(nproc)
生成された pico_usb_wifi.uf2 は、BOOTSEL ボタンを押し続けながら、マウントされた USB マスストレージ・デバイスにファイルをコピーすることで書き込み(フラッシュ)できます。
ランタイム設定
フラッシュ後、Pico W を USB 経由でホストに接続します。Pico の UART (または有効化されている場合は CDC‑ACM コンソール) にシリアル・ターミナル (115200 baud) を開きます。提供されているコマンドを使用して、Wi‑Fi 資格情報を設定します。例:
> wifi_set ssid MyNetwork
> wifi_set pass MyPassword
> wifi_connect
デバイスはネットワークへの接続を試行し、成功すると、ホストは Wi‑Fi ルーターから DHCP 経由で IP アドレスを取得します。
制限事項と既知の問題
- スループット – CDC‑ECM 実装は USB 2.0 Full‑Speed エンドポイント (12 Mbps) と Pico W の Wi‑Fi ラジオによって制限され、実際のスループットは通常 5–10 Mbps 程度になります。
- ドライバー・サポート – 一部の古い OS は、ネイティブな CDC‑ECM ドライバーを欠いています。そのような場合、カスタム・ドライバーまたは別の USB クラス (例: RNDIS) が必要になります。
- セキュリティ – ファームウェアは現在 WPA3 またはエンタープライズ認証方式をサポートしていません。WPA2‑PSK のみが実装されています。
- 電力管理 – Pico W は USB アダプターとして動作している間、ディープスリープに入りません。そのため、消費電力はアクティブ・レベルのままとなります。
拡張の可能性
RNDIS または CDC‑NCM – 追加の USB ネットワーク・クラスのサポートを追加することで、CDC‑ECM が不足している Windows バージョンとの互換性を広げることができます。
静的 IP 設定 UI – 軽量な Web サーバーを機能させれば、ヘッドレス・セットアップのための設定ポータルを公開できます。
パケット・インスペクション – フォワーディング・パスにフックすることで、シンプルなファイアウォールやトラフィック・シェーピング機能を実現できます。
Multi‑interface support – USB Ethernet 機能と他の USB クラス (例: HID) を組み合わせることで、、特定のユースケースのためのコンポジット・デバイスを作成できます。
結論
Raspberry Pi Pico W は、CDC‑ECM クラスを実装し、トラフィックをボードの内蔵 Wi‑Fi ラディオ経由で転送するオープンソース・ファームウェアを使用することで、機能的な USB Wi‑Fi アダプターに変換できます。このソリューションは、あらゆる USB 対応ホストに対して低コストでプログラマブルなブリッジを提供すると同時に、さらにはさらなるネットワーク実験やカスタム拡張のための柔軟なプラブットフォームを提供します。