成本60元,用ESP32-S3做个开源游戏机,能玩FC/NES、GameBoy,还有专属彩色PCB

前言

之前复刻了一个基于全志 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

Preview

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 的小喇叭声音很大。

image-diy-esp32s3-retro-go-3

PCB 设计

整体 PCB 受制于屏幕模块,尺寸就比较固定了,又想满足免费打样规则的话,只能采取竖版设计。为了焊接方便,将除按键外的元件都放在了背面,这样可以直接一次铁板烧完成大部分元件的焊接。

diy-esp32s3-retro-go-4

PCB 3D 渲染图

另外这次 PCB 使用了嘉立创的彩色丝印工艺,轻松拥有专属彩色 PCB,不光游戏机是自己制作的,里面的 PCB 还是根据自己的喜好专门定制的,想想还有点小激动呢~

而且使用彩色丝印还有一个好处,相当于免费升级有铅喷锡到沉金工艺,PCB 就更好看了。

diy-esp32s3-retro-go-5

PS. 这里的彩色丝印图片仅供演示,开源工程中已经去掉了,可以根据自己喜好自行添加。

嘉立创彩色丝印下单

设计完 PCB 后,就可以去嘉立创下单打样啦。

PS. 这里仅为彩色丝印下单额外说明,如果想要使用嘉立创一月两次的免费打样,也可以直接下单,不使用彩色丝印。

注意,带彩色丝印工艺的 PCB 在立创 EDA 中下单时,需要额外勾选生成彩色丝印制造文件,要不然是没办法下单成功的。

diy-esp32s3-retro-go-6

在 PCB 下单页面,也同样需要勾选以下选项才能正确下单彩色丝印工艺 PCB 哦:

  • 阻焊颜色:白色
  • 焊盘喷镀:沉金
  • 字符工艺:嘉立创EDA彩色丝印

diy-esp32s3-retro-go-7
diy-esp32s3-retro-go-14

经过几天的等待,就可以拿到制造完成的彩色 PCB 啦~

diy-esp32s3-retro-go-8

PCB 焊接

这里使用钢网刷上锡膏,直接用铁板烧完成主要元件的焊接,正面的按键尺寸都比较大,可以直接使用电铬铁完成。

另外对于 DIY 钢网,可以参考以下两个文章:

diy-esp32s3-retro-go-9

外壳设计

为了让整个游戏机玩起来更舒适,这里也给它设计了一个外壳,参考了一下传统游戏机的外观,采用三明治结构。

外壳 3D 模型 STL 文件可以在立创开源项目 https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji 的附件中下载。

diy-esp32s3-retro-go-10

3D 打印

游戏机上壳建议垂直摆放并使用 树状支撑>简洁树 支撑形式。底壳和按钮无需支撑。

diy-esp32s3-retro-go-11

外壳组装

外壳使用 4 颗 M2*5 自攻螺丝从侧面拧入即可完成组装。

diy-esp32s3-retro-go-12

固件和游戏

下载固件

为了方便使用,我已经将编译好的固件放在了 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 卡对应目录中,打开游戏机,就可以开始回忆小时候的乐趣啦~

diy-esp32s3-retro-go-13

项目开源地址

修改后的 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 一个柔性灯丝氛围灯

diy-ambient-light-1

教程地址: https://xujiwei.com/blog/2024/04/diy-ambient-light/

DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模

img

教程地址: https://xujiwei.com/blog/2024/05/diy-usb-meter-toturial/

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>