尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

树莓派复古街机DIY:GPIO直连摇杆与RetroPie实战指南

树莓派复古街机DIY:GPIO直连摇杆与RetroPie实战指南 1. 为什么我选择用树莓派做一台复古街机1.1 从一次搬家翻出的旧摇杆说起去年整理储物间的时候翻出来一个十几年前买的三和摇杆微动还是好的按键手感也还在。当时脑子里冒出的第一个念头就是能不能拿它做一台真正能玩的街机不是那种摆着看的模型而是能坐下来打两局《合金弹头》或者《街头霸王》的真家伙。市面上成品街机柜要么贵得离谱要么做工粗糙屏幕素质参差不齐。而自己动手做最大的好处是每一个零件都能按自己的需求来选。树莓派在这件事上几乎是天然的选择GPIO 引脚可以直接读摇杆和按键的开关信号HDMI 输出接屏幕USB 接音频或者直接用 3.5mm 接口整套系统的功耗还不到 15W长时间开着也不心疼电费。这个项目的核心目标很明确用树莓派做一台 1:1 还原街机操作手感的复古游戏机从外壳尺寸、按键布局到系统界面都尽量贴近当年街机厅里的体验。适合有基础动手能力、会简单焊接、能看懂引脚图的玩家也适合想拿这个当嵌入式入门项目的同学。1.2 树莓派方案相比其他方案的取舍在动手之前我对比过几种常见方案。用旧电脑主机改造成本低但体积大、功耗高、开机慢用安卓电视盒子刷模拟器系统性能参差不齐GPIO 支持几乎没有手柄延迟也难控制用 FPGA 方案还原度最高但门槛和成本都上了一个台阶。树莓派的优势在于生态成熟。RetroPie、Recalbox、Lakka 这些现成的模拟器系统镜像直接烧录就能用社区里关于 GPIO 接摇杆的教程一抓一大把遇到问题基本都能搜到答案。树莓派 4B 的性能跑 16 位时代的游戏绰绰有余甚至 PS1、N64 也能勉强应付。如果手上有树莓派 5那性能就更宽裕了连 Dreamcast 和部分 PSP 游戏都能流畅运行。注意如果你打算做双人街机建议直接上树莓派 4B 或 5树莓派 3B 在跑一些稍重的模拟器时会出现掉帧尤其是 CPS3 和 NEOGEO 后期的一些大作。2. 硬件选型与核心细节解析2.1 树莓派型号怎么选目前主流的选择集中在树莓派 4B 和树莓派 5 之间。我手上两块都用过实际体验差别还是挺明显的。型号模拟器上限功耗价格区间推荐场景树莓派 3B16 位及以下5W较低预算有限的单人格斗树莓派 4B 2GBPS1、N64 部分8W中等双人街机首选树莓派 4B 4GBPS1、N64 较流畅10W中等想跑更多平台的玩家树莓派 5 4GBDreamcast、PSP 部分12W较高追求高帧率和低延迟我最终用的是树莓派 4B 4GB 版本原因是它的 GPIO 生态最成熟RetroPie 对它的支持也最稳定。树莓派 5 虽然性能更强但早期 RetroPie 对它的适配还有些小问题需要手动编译一些驱动对新手不太友好。2.2 摇杆和按键的选择街机手感的核心在于摇杆和按键。市面上常见的有三和Sanwa和清水Seimitsu两个品牌三和偏软、行程稍长适合格斗游戏清水偏硬、触发快适合射击游戏。我选的是三和 JLF-TP-8YT 摇杆配 OBSF-30 按键这套组合是当年街机厅里最常见的配置手感还原度最高。摇杆的微动开关有 5 针接口上、下、左、右、地线。每个方向对应一个独立的开关按下时导通松开时断开。按键则是两针接口一端接地、一端接信号。这里有个关键点所有微动开关的一端都要共地否则会出现信号混乱。实操心得买摇杆的时候一定要确认是 5 针还是 8 针版本。8 针版本多出来的三根是用于光学摇杆或者额外功能的普通树莓派 GPIO 方案用不上接线反而更麻烦。2.3 编码器板还是直连 GPIO这是很多人纠结的地方。直连 GPIO 的好处是零延迟、不需要额外驱动缺点是接线多、占用引脚多。编码器板比如常见的 USB 摇杆编码器的好处是接线简单、一根 USB 线搞定缺点是会引入几毫秒的延迟而且质量参差不齐。我两种都试过。直连 GPIO 的延迟确实更低在《街霸》里搓招的响应明显更跟手。但如果你要做双人街机直连 GPIO 需要占用 2×1224 个引脚树莓派的 40 针 GPIO 虽然够用但接线会非常密集后期排查问题很痛苦。最终我的方案是单人用直连 GPIO双人用编码器板。单人直连的接线图我整理了一份后面会详细说。2.4 屏幕和音频方案屏幕方面我用的是 10.1 寸 IPS 屏配 HDMI 驱动板分辨率 1280×800。这个尺寸放在桌面街机上刚好再大就占地方了。如果你要做立式街机柜可以考虑 17 寸或 19 寸的 4:3 屏幕更接近当年的街机比例。音频有两种方案HDMI 直接输出到带喇叭的显示器或者用树莓派的 3.5mm 接口接功放板。我选的是后者因为街机的声音需要一定的音量显示器自带的喇叭通常不够劲。我用了一块 PAM8403 功放板配两个 4 欧 3W 的小喇叭声音足够大而且成本很低。3. 实操过程与核心环节实现3.1 系统烧录与基础配置第一步是烧录系统。我推荐用 RetroPie它的社区支持最好配置文件也最直观。去官网下载对应树莓派型号的镜像用 Raspberry Pi Imager 或者 balenaEtcher 烧录到 TF 卡里。烧录完成后先别急着接线把树莓派接上屏幕和键盘开机做基础配置# 进入树莓派配置工具 sudo raspi-config # 需要修改的项 # 1. 修改密码默认是 raspberry # 2. 设置 WiFi 和区域 # 3. 开启 SSH方便后续远程调试 # 4. 关闭 overscan如果屏幕有黑边 # 5. 设置音频输出为 3.5mm 接口音频输出这一项特别重要。树莓派默认可能走 HDMI 音频如果你用 3.5mm 接口接功放需要在 raspi-config 里手动切换或者在/boot/config.txt里加一行# 强制音频走 3.5mm 接口 audio_pwm_mode2改完之后重启进 RetroPie 的音频设置里测试一下确认声音从喇叭出来。3.2 GPIO 接线详解这是整个项目最核心的部分。树莓派的 GPIO 引脚编号有两种物理引脚号1-40和 BCM 编号。RetroPie 的 GPIO 驱动用的是 BCM 编号所以接线的时候一定要对照 BCM 编号来。我用的接线方案如下功能BCM 编号物理引脚摇杆上47摇杆下1711摇杆左2713摇杆右2215按键 A529按键 B631按键 X1333按键 Y1935开始2637投币2140地线GND6/9/14/20/25/30/34/39接线的时候有几个坑我踩过地线一定要共地。所有微动开关的一端都接到 GND另一端接信号引脚。如果地线没接好会出现按键乱触发或者完全没反应。杜邦线不要用太长的。超过 30cm 的杜邦线容易引入干扰导致按键抖动。如果必须用长线建议用屏蔽线或者在信号线上加一个 0.1uF 的电容滤波。焊接的时候注意温度。三和微动的塑料外壳不耐高温烙铁温度控制在 300 度左右焊接时间不要超过 3 秒。3.3 RetroPie 的 GPIO 驱动配置接线完成后需要在 RetroPie 里配置 GPIO 驱动。RetroPie 自带了一个mk_arcade_joystick_rpi驱动但它的默认引脚映射和我的接线不一样需要手动改。# 下载并编译驱动 git clone https://github.com/recalbox/mk_arcade_joystick_rpi.git cd mk_arcade_joystick_rpi sudo ./install.sh # 编辑配置文件 sudo nano /etc/modprobe.d/mk_arcade_joystick.conf在配置文件里按照你的接线修改引脚映射。格式是map引脚1,引脚2,...顺序对应驱动定义的按键顺序。改完之后重启用jstest命令测试# 安装 joystick 测试工具 sudo apt-get install joystick # 测试摇杆和按键 jstest /dev/input/js0如果看到按键按下时数值从 0 变 1说明接线和驱动都正常了。注意RetroPie 的 GPIO 驱动和 USB 手柄可以共存。如果你同时插了 USB 手柄需要在 EmulationStation 里设置手柄优先级否则可能会出现两个设备抢输入的情况。3.4 外壳制作与布局设计外壳我用的 15mm 厚度的 MDF 板激光切割后自己组装。尺寸参考了当年街机厅里常见的桌面街机面板宽度 50cm、深度 25cm、倾斜角度 15 度。这个角度是试了好几次才定下来的太平了手腕累太陡了手臂悬空。面板开孔尺寸摇杆孔直径 24mm三和 JLF 的标准开孔按键孔直径 30mmOBSF-30 的标准开孔按键间距中心距 40mm这个间距是街机厅的标准手指不会打架如果你没有激光切割的条件也可以用亚克力板手工开孔。先用纸板做一个模板确认布局舒服了再在亚克力上开孔。开孔的时候用阶梯钻不要用普通麻花钻亚克力容易裂。3.5 系统界面与游戏列表配置RetroPie 默认的 EmulationStation 界面比较朴素我换了一套街机风格的主题叫es-theme-arcade在 RetroPie 的主题管理器里可以直接下载。游戏列表的配置在/home/pi/RetroPie/roms/目录下每个平台一个文件夹。把 ROM 放进去之后在 EmulationStation 里按 Start 键选择PARSE GAMELISTS系统会自动扫描并生成列表。这里有个小技巧ROM 的文件名会影响排序和显示。建议用英文名并且去掉括号里的版本信息比如Metal Slug 3 (USA).zip改成Metal Slug 3.zip列表看起来更干净。4. 常见问题与排查技巧实录4.1 按键无反应或乱触发这是最常见的问题排查顺序如下检查地线用万用表测一下微动开关的一端是否和树莓派的 GND 导通。如果不通说明地线没接好。检查引脚映射确认/etc/modprobe.d/mk_arcade_joystick.conf里的引脚编号和实际接线一致。BCM 编号和物理引脚号很容易搞混。检查驱动是否加载运行lsmod | grep mk_arcade如果没有输出说明驱动没加载成功需要重新编译安装。检查杜邦线换一根线试试有时候是线材内部断裂外表看不出来。4.2 画面延迟高、搓招不跟手画面延迟通常来自两个地方显示器的响应时间和模拟器的视频设置。显示器方面尽量选响应时间 5ms 以内的 IPS 屏避免用电视电视的响应时间通常在 20ms 以上。模拟器方面在 RetroArch 的视频设置里把Threaded Video关掉开启Hard Sync可以减少一帧左右的延迟。如果用的是树莓派 4B可以在/boot/config.txt里加一行hdmi_mode87和hdmi_cvt1280 800 60 6 0 0 0强制输出 60Hz 信号避免显示器做额外的帧率转换。4.3 音频有杂音或爆音树莓派的 3.5mm 接口素质一般有轻微底噪是正常的。如果爆音严重可以试试在/boot/config.txt里加audio_pwm_mode2把音频输出从 PWM 改成更好的模式。给功放板单独供电不要从树莓派的 USB 口取电电流不够会导致爆音。在 RetroArch 的音频设置里把采样率改成 44100Hz和大多数游戏的原始采样率一致。4.4 游戏 ROM 无法识别RetroPie 对 ROM 的格式有要求不同平台支持的格式不一样。常见的平台支持格式备注NES.nes直接放SNES.smc .sfc直接放Genesis.md .bin直接放NEOGEO.zip需要 BIOS 文件CPS1/CPS2.zip需要对应的 BIOSPS1.bin .cue需要 BIOS 文件NEOGEO 和 CPS 系列需要把 BIOS 文件放在/home/pi/RetroPie/BIOS/目录下文件名要完全匹配否则模拟器会报错。4.5 常见问题速查表现象可能原因解决方法开机黑屏HDMI 输出未启用检查/boot/config.txt里的hdmi_force_hotplug1按键全部无反应驱动未加载重新编译安装 GPIO 驱动单个按键无反应微动开关损坏万用表测通断更换微动摇杆方向错乱引脚映射错误对照 BCM 编号重新配置游戏卡顿模拟器设置过高降低分辨率或关闭滤镜音频无声输出接口错误raspi-config 里切换音频输出系统无法启动TF 卡损坏重新烧录镜像5. 后续可以怎么玩这台街机做完之后我又陆续加了一些东西。比如在树莓派上装了一个小型的 Web 服务器用手机就能管理游戏列表和系统设置不用每次都接键盘。还加了一个物理电源开关直接控制树莓派的供电不用拔插头。如果你手上有树莓派 Pico也可以用它来做摇杆的编码器通过 USB 输出手柄信号这样就不占用树莓派的 GPIO 了接线也更简洁。Pico 的 ADC 还可以用来做模拟摇杆玩一些需要模拟输入的游戏会更舒服。另外树莓派 5 的 PCIe 接口可以通过 M.2 HAT 接 NVMe 固态硬盘把系统和游戏都放在固态里加载速度会快很多。我试过用树莓派 5 加 NVMe 跑 RetroPie开机只要 8 秒游戏加载几乎秒开体验比 TF 卡好太多了。最后分享一个我在实际使用中觉得最实用的小技巧给树莓派配一个带开关的 USB 电源线。街机做完之后每次玩都要拔插电源很麻烦一个带开关的线就能解决。开关选那种自锁式的按一下开、再按一下关比轻触开关可靠得多。
返回列表