【免费下载链接】openpuck
Opensource firmware for NRF52840 Pro Micro that copycats the Steam Controller 2 Puck and adds an Xbox and Switch mode
OpenPuck 是一款运行在 nRF52840 Pro Micro 上的开源固件,它模拟 Steam Controller 2 的官方"puck"无线底座,并额外提供 Xbox、Switch 等模式;配套的 ReversePuck 组件则能把Steam Deck 秒变成一台 Steam Controller 2,通过低延迟 2.4GHz 无线链路转发到 OpenPuck,再插到任何主机上使用。本文将带你完成从刷机到配对、再到一键转发的完整实战步骤。
OpenPuck ReversePuck 能做什么:一张图看懂低延迟 2.4GHz 转发
整套方案的信号链路非常直白:
Steam Deck 手柄 ──USB 抓取──▶ ReversePuck 程序 ──USB-CDC──▶ nRF52840 小棒 ──2.4GHz 无线──▶ OpenPuck ──USB──▶ 主机(PC/掌机/主机)- OpenPuck让一块约 8 美元的 nRF52840 Pro Micro 变成"开源 Steam 底座",支持 4 个配对槽位,官方实测延迟与 Valve 原装 puck 相差1ms 以内;
- ReversePuck把 Steam Deck 的按键、摇杆、扳机、触控板甚至陀螺仪全部抓下来(libusb 级别直接读取原始 DeckState 报告),经小棒走 2.4GHz 转发出去;
- 转发是热插拔的:拔掉小棒,控制权立刻回到 Deck 本身,无需重启任何程序。
硬件准备:预算极低的器材清单 🛒
| 设备 | 数量 | 说明 |
|---|---|---|
| nRF52840 Pro Micro | 2 块 | 1 块刷 OpenPuck,1 块刷 ReversePuck 小棒固件 |
| Steam Deck | 1 台 | 自带手柄,作为"Steam 手柄2"信号源 |
| Steam Controller 2 | 1 把 | 与 OpenPuck 配对的真实手柄(可选,ReversePuck 链路本身用 Deck 手柄) |
| USB-C 数据线 | 若干 | 必须支持数据传输,不是纯充电线 |
| 主机 | 1 台 | PC 或其他 USB 设备,OpenPuck 最终插在这里 |
💡 两块 Pro Micro 是全部"新硬件"成本,这也是该项目最吸引人的地方。
步骤一:获取代码并烧录两块板子的固件
先在电脑上克隆仓库:
git clone https://gitcode.com/gh_mirrors/op/openpuck烧录 OpenPuck 主板
最简单的方式:从 Release 页下载.uf2文件,拖进板子进入 DFU 模式时挂载的 U 盘即可。新板子默认就在 DFU 模式;如果不在,快速短接RST和GND两次即可进入。已刷过 OpenPuck 的板子还可以在浏览器配置面板的Firmware update标签页里直接拖.uf2在线升级,中断也不会变砖。
烧录 ReversePuck 小棒
如果你要自己编译,仓库根目录的 Makefile 已内置所有必要参数:
make reversepuck-deploy /dev/ttyACM0 # 编译并上传到小棒(端口换成你的)烧录前需要双击复位进入 DFU,详细流程见 docs/BUILD_AND_DEPLOY.md。
步骤二:准备 Steam Deck 环境 🎮
把仓库中的 ReversePuck/ 文件夹整个复制到 Steam Deck 上(例如~/ReversePuck),然后:
- 添加为非 Steam 游戏:目标指向文件夹里的
ReversePuck启动器,"开始位置"设为该文件夹。该启动器通过uv运行,首次运行会自动安装uv及三个 Python 依赖,完全不改动 SteamOS 只读系统; - 关键设置:在该快捷方式的 属性 → Controller 中勾选Disable Steam Input,避免 Steam 和我们争抢内置手柄;
- 每次开机授权一次(SteamOS 根文件系统只读,无法装持久 udev 规则),在桌面模式终端执行:
sudo ./setup.sh该脚本会为本次开机打开 nRF 的 CDC 串口和 Deck 手柄的 usbfs 节点,原理可看 ReversePuck/setup.sh 的文件头注释。
步骤三:把 Steam Controller 2 与 OpenPuck 配对 🔗
配对要求"写密钥到双方设备",因此:
- 把OpenPuck和ReversePuck 小棒同时用 USB 接到同一台电脑上,并保证 Steam 在运行;
- Steam 通常会自动弹出配对菜单;没有的话,进 设置 → 手柄 →Add Controller;
- 此时手柄会自动进入无线模式(固件内部执行重启握手)。
⚠️注意:如果 Steam 弹窗提示"配对失败",别慌——这是已知现象,Steam 的确认请求与手柄重启握手存在竞态,只要之后手柄确实连上了 OpenPuck,就说明配对实际成功了。也可以在 Deck 上直接用命令行配对工具:
sudo python3 scpair.py list # 查看槽位 sudo python3 scpair.py pair # 写入第一个空槽工具对应 ReversePuck/scpair.py,PC/Mac 上则可以用 pairtui/pairtui.py。
步骤四:一键启动转发,Deck 秒变 Steam 手柄2 ✅
- OpenPuck 插到目标主机上,小棒插到 Steam Deck上;
- 启动 ReversePuck 应用:界面为全屏触控 UI,每块已配对底座显示一个大方块(tile);
- 先用无头模式验证链路是否通:
./ReversePuck --debug看到类似link=True fwd=False ch=18 [0 FX... LIVE]即表示 2.4GHz 链路已建立;
- 回到触控界面,轻点显示绿色 ● available 的方块——Deck 手柄即刻被"抓走",输入开始转发,方块变蓝;
- 此时主机上会出现一台 Steam Controller 2,摇杆、双扳机、双触控板、陀螺仪全部就位;
- 点按屏幕任意位置(或拔掉小棒)即可把控制权交还给 Deck,
Esc/Q退出程序。
为什么延迟这么低?
- 走的不是蓝牙:OpenPuck 用 nRF52 裸机射频直接复刻官方 puck 的 2.4GHz 私有协议(Ble_2Mbit PHY、CRC16、专用会话地址),协议细节见 docs/PROTOCOL.md;
- 连接后以约250Hz轮询手柄输入报告,射频层实现在 OpenPuck/rf_link.cpp 与 OpenPuck/radio.cpp;
- 整条链路(Deck → CDC → 射频 → USB HID)每环都是直通转发,没有中间缓冲堆积,因此端到端延迟能与官方 puck 打得有来有回。固件整体数据流地图可参考 ARCHITECTURE.md。
常见问题快速排查 🩹
| 现象 | 原因与处理 |
|---|---|
启动报权限错误并回退到--evdev | 忘了运行sudo ./setup.sh;重跑一次即可(--evdev只是低保真后备方案,触控板会串到摇杆上) |
| Steam 提示配对失败 | 见上文,大概率其实成功了,以手柄能否连上为准 |
| 游戏中转发突然中断 | 小棒被拔或 USB 抖动属正常行为,应用会自动拆掉转发并重建,不会卡死;控制权会自动回到 Deck |
| 想在线管理小棒 | 小棒同样暴露 WebUSB 接口,用 Chrome/Edge 打开项目自带的浏览器配置面板 docs/index.html,可管理配对、在线刷.uf2 |
| 反向兼容原装 Valve puck? | 目前 ReversePuck 暂不支持直连原装 puck,请使用 OpenPuck |
延伸阅读:项目关键文件
- 项目总览与模式说明:README.md
- 固件架构与数据流:ARCHITECTURE.md
- 射频协议完整文档:docs/PROTOCOL.md
- 编译与烧录指南:docs/BUILD_AND_DEPLOY.md
- ReversePuck 转发端源码:ReversePuck/openctrl.py、ReversePuck/input_source.py
- 小棒固件源码:ReversePuckFirmware/
- 构建入口:Makefile
只要两块小板子和一条数据线,你的 Steam Deck 就能成为任何主机上的"Steam 手柄2"——这正是 OpenPuck 开源魅力所在,动手试试吧!🚀
【免费下载链接】openpuck
Opensource firmware for NRF52840 Pro Micro that copycats the Steam Controller 2 Puck and adds an Xbox and Switch mode
相关推荐
突破2秒延迟!Shaka Player HLS低延迟直播实战指南
突破2秒延迟!Shaka Player HLS低延迟直播实战指南 你是否还在为直播延迟超过10秒而烦恼?观众抱怨互动体验差,主播看不到实时反馈?本文将带你通过S
前端音视频如何在Steam Deck上安装Decky Loader:新手必看教程
如何在Steam Deck上安装Decky Loader:新手必看教程 🚀 终极指南:让您的Steam Deck功能更强大! Decky Loader是Ste
插件系统后端HandheldCompanion 之 steam-hidapi.net:.NET 直读 Steam Deck 手柄 HID 报文的完整实现解析
HandheldCompanion 之 steam hidapi.net:.NET 直读 Steam Deck 手柄 HID 报文的完整实现解析 本篇以 ste
桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考