文章目录
前言
之前复刻了一个基于全志 F1C200S 的模拟器游戏机,但是做下来感觉还是比较麻烦的,主要有两个痛点:
- 一个是元件太多,像 DC-DC 就有三路,以及焊接难度大,像屏幕的 0.5mm FPC 插座
- 另外一个是 Linux 系统的编译,过程比较复杂,也没有清晰的教程,想要定制的话比较麻烦
因此就想找找看有没有更简单的方式可以做模拟器游戏机,刚好平时用 ESP32-S3 系列比较多,并且相对于以前的游戏机来说,双核 240MHz 的性能也是足够的,应该可以用来模拟各种游戏机,就去找了一下。
然后就在 GitHub 上找到了 RetroGo 这个项目,一个完整的模拟器固件,支持 ESP32 系列 MCU,但是并没有找到直接对应的硬件项目,在立创开源平台上也没找到简单易用的,那就自己从头搞一个吧~
PS. 这个游戏机也可以当 ESP32-S3 开发板来用,具备 SPI 屏幕、TF 读卡器、I2S 功放、用户按键等多种外设 😃。
RetroGo 介绍
RetroGo 是一个开源的模拟器固件,主要支持的是乐鑫的 ESP32 系列 MCU,例如 ESP32、ESP32-S3,支持的模拟器也相当多,常见的 FC/NES、GameBoy、GameBoy Color 等都支持。
项目地址:https://github.com/ducalex/retro-go
Retro-Go is a firmware to play retro games on ESP32-based devices (officially supported are ODROID-GO and MRGC-G32). The project consists of a launcher and half a dozen applications that have been heavily optimized to reduce their cpu, memory, and flash needs without reducing compatibility!
Supported systems:
- Nintendo: NES, SNES (slow), Gameboy, Gameboy Color, Game & Watch
- Sega: SG-1000, Master System, Mega Drive / Genesis, Game Gear
- Coleco: Colecovision
- NEC: PC Engine
- Atari: Lynx
- Others: DOOM (including mods!)
材料清单和成本
整体成本在 60 元左右,如果有一些元件是库存里的可以更省 🙈。
*注意:屏幕模块需要注意尺寸,需要 42.7270.3mm 的才匹配后面 3D 打印的外壳。**
类型 | 型号 | 参数 | 价格(元) |
---|---|---|---|
主控 MCU | ESP32-S3-WROOM-1-N16R8 | 16MB Flash,8MB PSRAM | 23.0 |
屏幕 | ST7789V 驱动 LCD 模块 | 2.4 寸,分辨率 320x240 | 15.5 |
电池 | 602060 锂电池 | 700mA | 12.8 |
喇叭 | 2415 扬声器 | 8欧 1W | 2.38 |
音频芯片 | NS4168 | I2S 输入音频功率放大器 | 1.85 |
USB 转串口 | CH340C | 1.25 | |
充电管理 | GX4057 | 充电截止电压 4.2V,最大电流 500mA | 0.12 |
方向键 | TM-4175-B-B | 7.57.56五向开关 | 2.77 |
按键 | HX TS665WS 200gf | 无声空气开关 * 6 | 2.64 |
为了省事,按键全部使用无声硅胶开关了,直接按,不过这也导致后面设计外壳时按键区域需要特殊处理。
硬件开发
整体硬件就相当于是一个 ESP32-S3 开发板,包括自动下载电路、USB 转串口、LDO 供电、锂电池充电等。
原理图设计
为了节省外围元件,把所有按键都改成使用 GPIO 驱动了,并且因为 ESP32-S3 有内置上拉,都直接与按键相连,不再额外添加上拉电阻,ST7789V 屏幕的 SPI 以及 TF 读书卡的总线也一样,直接使用了 ESP32-S3 的内置上拉。
另外功放也从验证时的 MAX98357 换成了 NS4168,使用起来相当简单,驱动一个 2415 8 欧 1W 的小喇叭声音很大。
PCB 设计
整体 PCB 受制于屏幕模块,尺寸就比较固定了,又想满足免费打样规则的话,只能采取竖版设计。为了焊接方便,将除按键外的元件都放在了背面,这样可以直接一次铁板烧完成大部分元件的焊接。
PCB 3D 渲染图
另外这次 PCB 使用了嘉立创的彩色丝印工艺,轻松拥有专属彩色 PCB,不光游戏机是自己制作的,里面的 PCB 还是根据自己的喜好专门定制的,想想还有点小激动呢~
而且使用彩色丝印还有一个好处,相当于免费升级有铅喷锡到沉金工艺,PCB 就更好看了。
PS. 这里的彩色丝印图片仅供演示,开源工程中已经去掉了,可以根据自己喜好自行添加。
嘉立创彩色丝印下单
设计完 PCB 后,就可以去嘉立创下单打样啦。
PS. 这里仅为彩色丝印下单额外说明,如果想要使用嘉立创一月两次的免费打样,也可以直接下单,不使用彩色丝印。
注意,带彩色丝印工艺的 PCB 在立创 EDA 中下单时,需要额外勾选生成彩色丝印制造文件,要不然是没办法下单成功的。
在 PCB 下单页面,也同样需要勾选以下选项才能正确下单彩色丝印工艺 PCB 哦:
- 阻焊颜色:白色
- 焊盘喷镀:沉金
- 字符工艺:嘉立创EDA彩色丝印
经过几天的等待,就可以拿到制造完成的彩色 PCB 啦~
PCB 焊接
这里使用钢网刷上锡膏,直接用铁板烧完成主要元件的焊接,正面的按键尺寸都比较大,可以直接使用电铬铁完成。
另外对于 DIY 钢网,可以参考以下两个文章:
外壳设计
为了让整个游戏机玩起来更舒适,这里也给它设计了一个外壳,参考了一下传统游戏机的外观,采用三明治结构。
外壳 3D 模型 STL 文件可以在立创开源项目 https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji 的附件中下载。
3D 打印
游戏机上壳建议垂直摆放并使用 树状支撑>简洁树 支撑形式。底壳和按钮无需支撑。
外壳组装
外壳使用 4 颗 M2*5 自攻螺丝从侧面拧入即可完成组装。
固件和游戏
下载固件
为了方便使用,我已经将编译好的固件放在了 GitHub Release 和立创开源平台项目的附件中,直接下载 IMG 文件地蚝烧录即可。
GitHub Release: https://github.com/ohdarling/retro-go/releases/tag/esp32s3-st7789v-v1.1
立创开源平台: https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji
烧录固件
在上述地址中,将编译好的固件下载到本地磁盘中,在命令行中进入到固件所在目录,运行以下命令将固件烧录到 ESP32-S3 的 Flash 中。
esptool.py -b 921600 write_flash --flash_size detect 0x0 retro-go_esp32s3-st7789v-v1.0-1-g8e5bb_esp32s3-devkit-c.img
注意:这里需要提前安装好 esptool.py 工具,在 macOS 上可以使用 brew 来安装,或者在 Visual Studio Code 中安装 ESP-IDF 并使用 ESP-IDF Terminal 来执行该命令。
自行编译固件
当然如果有额外的定制需求,或者是 retro-go
项目更新后想自行编译,也可以将我已经修改过的项目代码克隆下来,自行完成固件的编译。
修改过的仓库地址:https://github.com/ohdarling/retro-go
可以使用以下命令来克隆对应分支:
git clone https://github.com/ohdarling/retro-go.git -b esp32s3-st7789v
在 Visual Studio Code 中安装好 ESP-IDF 插件后并配置完成 ESP-IDF SDK 后,打开 ESP-IDF Terminal,使用以下命令来开始编译固件:
./rg_tool.py build-img --target=esp32s3-devkit-c
添加游戏 ROM
添加游戏 ROM 就不多介绍啦,可以自动搜索后放到 TF 卡的 /roms
目录中,在游戏机主界面,进入各个类型模拟器后,也会提示每种游戏需要放在哪个目录。
另外 retro-go
并不使用常见的 zip
包格式 ROM,需要使用 LCD-Game-Shrinker
工具将 zip
包与 ROM 封面打包成对应平台的 ROM,例如 NES 就是后缀为 nes 的文件。
不过有一些 ROM 分享平台的 ROM 本身就是这种,那就可以直接使用,只是可能会不能显示游戏封面。
开始游戏吧!
将网上下载的游戏 ROM 放到 TF 卡对应目录中,打开游戏机,就可以开始回忆小时候的乐趣啦~
项目开源地址
修改后的 retro-go 固件代码
GitHub: https://github.com/ohdarling/retro-go
修改的代码在 esp32s3-st7789v
分支中。
PCB 硬件项目
立创开源平台:https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji
编译好的固件和外壳 STL 文件也可以在立创开源平台项目的附件中找到。
其他 DIY 项目
30 元 DIY 一个柔性灯丝氛围灯
教程地址: https://xujiwei.com/blog/2024/04/diy-ambient-light/
DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模
教程地址: https://xujiwei.com/blog/2024/05/diy-usb-meter-toturial/
参考资料
- https://github.com/ohdarling/retro-go
- https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji
- 将节省进行到底,使用激光雕刻机和牛皮纸 DIY SMT 钢网
- 一个开源小钢网丝印台项目使用体验
- https://github.com/ducalex/retro-go
- https://oshwhub.com/LiiGuang/esplay-micro-V2
- https://oshwhub.com/liuzewen/i2s-mai-ke-feng-i2s-la-ba-mu-kuai
- https://www.cnblogs.com/shangdawei/p/3255414.html
- https://github.com/jobitjoseph/retro-go-ST7789
- https://github.com/retro-esp32/RetroESP32
- https://github.com/bzhxx/LCD-Game-Shrinker
0 条评论。