Raspberry Pi Pico W 作为 USB Wi‑Fi 适配器

Raspberry Pi Pico W 作为 USB Wi‑Fi 适配器

概览

该 Pico W USB Wi‑Fi 适配器项目展示了如何将 Raspberry Pi Pico W 重新利用为一个通用的 USB 以太网设备,通过其板载的 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 板卡可以放入狭窄的空间,且在工作时仅消耗几十毫安电流,非常适合嵌入式或便携式使用场景。

工作原理

  1. USB CDC‑ECM (Ethernet Control Model) – 固件实现了 CDC‑ECM 类,将 Pico W 向宿主机呈现为一个虚拟以太网适配器。
  2. Wi‑Fi 站模式 – Pico 通过其内置的 CYW43439 无线电连接到配置好的 Wi‑Fi 网络。
  3. 数据包转发 – 通过 USB 接收到的以太网帧会被封装并发送到 Wi‑Fi 接口;传入的 Wi‑Fi 数据包会被解封装并经由 USB 交付给宿主机。
  4. 配置 – 网络凭据(SSID、密码)和可选的静态 IP 设置存储在 Pico 的 flash 中,可以通过简单的串口控制台或小型 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 大容量存储设备中来进行烧录。

运行时配置

烧录完成后,通过 USB 将 Pico W 连接到宿主机。打开一个串口终端(115200 波特率)连接到 Pico 的 UART(或如果已启用,则使用 CDC‑ACM 控制台)。使用提供的命令来设置 Wi‑Fi 凭据,例如:

> wifi_set ssid MyNetwork
> wifi_set pass MyPassword
> wifi_connect

设备将尝试加入网络,成功后,宿主机将通过 DHCP 从 Wi‑Fi 路由器获取 IP 地址。

局限性与已知问题

  • 吞吐量 – CDC‑ECM 实现受限于 USB 2.0 全速 (Full‑Speed) 端点 (12 Mbps) 以及 Pico W 的 Wi‑Fi 无线电,实际吞吐量通常在 5–10 Mbps 之间。
  • 驱动支持 – 一些较旧的操作系统缺乏原生的 CDC‑ECM 驱动;在这种情况下,需要自定义驱动或不同的 USB 类(例如 RNDIS)。
  • 安全性 – 固件目前不支持 WPA3 或企业级身份验证方法;仅实现了 WPA2‑PSK。
  • 电源管理 – Pico W 在作为 USB 适配器工作时不会进入深度睡眠模式,因此功耗保持在活跃状态。

潜在扩展方向

  • RNDIS 或 CDC‑NCM – 增加对其他 USB 网络类的支持将扩大与缺乏 CDC‑ECM 驱动的 Windows 版本的兼容性。
  • 静态 IP 配置 UI – 一个轻量级的 Web 服务器可以提供配置门户,用于实现无头 (headless) 设置。 *n 数据包检测 – 接入转发路径可以实现简单的防火墙或流量整形功能。
  • 多接口支持 – 将 USB 以太网功能与其它 USB 类(例如 HID)结合使用,可以创建用于特定用途的组合设备。

结论

使用实现了 CDC‑ECM 类并可通过板载内置 Wi‑Fi 无线电转发流量的开源固件,可以将 Raspberry Pi Pico W 转换为一个功能完备的 USB Wi‑Fi 适配器。该方案为任何支持 USB 的宿主机提供了一个低成本、可编程的桥接器,同时也为进一步的网络实验和自定义扩展提供了一个灵活的的平台。

Sources