用一块 Raspberry Pi Pico 2 W,将 Xbox Series、第一代 Switch Pro 或 Google Stadia 蓝牙手柄接入 Windows;另提供独立的 Switch USB 固件。每次连接一只手柄,无需 ESP32、CH582F 或外接蓝牙模块。
Bluetooth gamepad receiver for Raspberry Pi Pico 2 W: Xbox Series / Switch Pro / Stadia → USB XInput on Windows, with a separate experimental Switch USB firmware.
下载与版本 · 详细使用说明 · Switch USB · Pico Control · 验证记录
Xbox Series / Switch Pro / Stadia
│ 蓝牙,每次一只
Pico 2 W
│ Micro-USB 数据线
Windows PC(XInput R5)
或 Switch 底座(独立 Switch USB R1)
以下为已有交付版本,本次整理没有发布新固件。直接使用时下载 UF2;需要源码和完整交付记录时选择 ZIP。
| 用途 | 当前版本与直接下载 | 说明 |
|---|---|---|
| Windows 游戏 | XInput R5 UF2 / 完整包 | XInput 输入、电量 HID、映射、死区、轴反转、震动缩放、宏和配置保存 |
| Windows 上位机 | Pico Control V0.3 ZIP | 查看电量与输入、测试震动、编辑 R5 配置;完整解压后启动 |
| Switch 底座 | Switch USB R1 UF2 / 完整包 | 实验性有线 HID 输出,Switch 实机识别待验证;无震动和体感 |
Windows 和 Switch 使用两份独立固件,刷机选择 USB 输出模式。Switch R1 不提供 Pico Control 所需的配置和电量接口;编辑配置需刷回 Windows R5。下载 SHA256 与旧版本入口见版本说明。
| 手柄 | 蓝牙协议 | 支持范围 |
|---|---|---|
| Xbox Series X/S 原装手柄 | BLE HID | 以型号 1914 为目标,严格识别 045E:0B13 |
| 第一代 Switch Pro 原装手柄 | Bluetooth BR/EDR HID | 057E:2009;Windows 按键按物理位置映射为 Xbox 布局 |
| Google Stadia | BLE HID | 18D1:9400,手柄必须已启用蓝牙模式 |
当前只连接一只手柄,三种手柄自动识别。未支持多手柄同时连接、Xbox 专有无线、Xbox 360 无线、第三方仿制手柄或 Switch 2 Pro。Windows XInput 不传输体感、NFC、音频或 Xbox 扳机马达。
- 准备 **Pico 2 W(RP2350,带无线)**和可传输数据的 Micro-USB 线;普通 Pico 2 没有无线,本项目不以第一代 Pico W 为构建目标。
- 按住板上 BOOTSEL 接入电脑,出现 RP2350 磁盘后松开,将
pico2w-xinput-r5.uf2拖入。写入完成后重新插拔 USB。 - 只打开一只目标手柄并进入配对:Xbox Series 长按顶部配对键;Switch Pro 长按 USB-C 旁的 SYNC;已启用蓝牙的 Stadia 按住 Y + Stadia,直到橙灯闪烁。
- Pico LED 慢闪表示等待连接,常亮表示手柄就绪。执行
Win + R→joy.cpl检查输入。 - 完整解压 Pico Control V0.3 ZIP,双击
PicoControl.exe,保留旁边的 DLL 和ui/。需要 Windows 10/11 x64、.NET Framework 4.6.2+ 和 WebView2 Runtime,详见上位机说明。
正常拔插和刷入本项目 UF2 保留配对。换手柄时关闭当前手柄,等待 LED 慢闪再打开另一只。运行中短按 BOOTSEL 可在空闲时恢复扫描;长按至少 3 秒再松开会清除接收器全部配对并重启。
R5 配置:在 Pico Control 中选择接收器,打开“手柄配置”并读取。立即应用只改 RAM;永久保存前关闭手柄,保存后接收器重启。配置共用一档,配对区独立保留。
| 功能 / 版本 | 已有证据 | 仍待验证 |
|---|---|---|
| 三类手柄基础连接与输入、R3 自动回连 | 用户已确认正常 | 不代表后续每个新增功能均已实测 |
| R4.1 电量 HID | Windows 枚举正常,实际读取到 Switch Pro 2/4 档 | Xbox / Stadia 电量字段取决于手柄提供的服务 |
| R4.2 Switch SYNC 休眠恢复 | 软件回归与编译通过 | 实物休眠和快速唤醒复测 |
| R5 配置 / Flash 保存 | 9649 项固件软件检查通过 | 实机配置与保存验收;震动尚无专项实测结论 |
| Pico Control V0.3 | 213 项自测、WebView2 控件和消息检查通过 | 本轮界面验证未操作物理手柄 |
| Switch USB R1 | 9051 项软件检查及 Windows 模式回归通过 | Switch USB 枚举、三类手柄操作、主机休眠恢复 |
这些数字为原交付记录,详见固件验证和上位机验证。Windows USB 输入间隔配置为 2 ms(名义 500 Hz),尚无 USB 总线或端到端延迟实测结论。本次文档整理与保留文件检查见仓库验证记录。
从仓库根目录运行 Windows PowerShell;需要 Git、Python 3,主机 C 测试另需 GCC。下载工具、SDK 和构建输出留在项目本地,不纳入 Git。
git clone https://github.com/linlinvae/pico2w-receiver.git
cd pico2w-receiver
.\pico2w\tools\setup.ps1
.\pico2w\tools\test.ps1 -Gcc gcc
.\pico2w\tools\build.ps1 -Python pythonbuild.ps1 输出 Windows R5。Switch 使用 test-switch.ps1 和 build-switch.ps1,详见 Switch 构建说明。依赖版本、提交和工具哈希固定在 dependencies.lock.json。上位机构建步骤见开发说明。
| 路径 | 内容 |
|---|---|
| pico2w/src / tests / tools | 当前源码、模拟测试和构建脚本 |
| pico2w/firmware / releases | UF2、BIN、ELF、构建信息与历次交付包 |
| pico2w/host | Pico Control 源码、Windows 发行包及验证记录 |
| pico2w/docs | Switch 使用方式与配置协议 |
| receiver / switchpro | 历史 CH582F/CH592、ESP32 + CH582F 方案,保留原路径及回退产物 |
| audit / DEVELOPMENT_CONTEXT.md | 可行性研究与早期开发背景 |
- Windows 不识别:先换数据线/USB 口,刷机后重新插拔;记录设备管理器中的设备名称、错误码和硬件 ID。R5 开发身份为
VID_2E8A&PID_10C8。 - 手柄无法连接:只打开目标手柄,确认型号及蓝牙模式;切换过其他主机后可能需要重新配对。
- 电量显示未知:表示尚未得到有效读数,不能推断电池为空。Switch 显示 0–4 档,不伪造百分比。
- Switch 没有识别:确认刷入 Switch R1、使用底座 USB-A 和数据线;LED 常亮只说明蓝牙已连接。
提交 Issue 时附上固件版本、板卡/手柄型号、系统版本、复现步骤和预期结果。默认不要求串口日志。参与开发前请读 CONTRIBUTING.md。
本项目原创应用代码采用 Apache-2.0。Pico SDK、Bluepad32、BTstack、TinyUSB、CYW43、Switch HID 描述符及上位机组件各有自己的许可;归属与范围见 NOTICE.md、Pico 固件 NOTICE、licenses 和上位机第三方声明。
早期 Stadia 方案基于 O-IceDawn-O/stadia-stick,参考提交 e0d4a701130c24648e7f189064089644584e9248。第三方许可证、历史固件和 preservation manifests 保留原内容。