![]()
MAKER:陳亮/译:趣无尽 Cherry(转载请注明出处)
提到掌机,相比各位 Maker 的桌面上或箱底下肯定有那么几款珍品,时不时拿出来找点乐子。
自制游戏机项目每年也会推陈出新,《树莓派 CM3 掌上游戏机 DIY 全记录》在去年火热一时,它是基于 RetroPie 和树莓派 CM3 的一款掌机。下面,要为大家介绍的是基于 ESP32 和 ATtiny861 来制造 NES 游戏模拟器掌机,并附有制作该项目的完整素材。
来看一段视频。
材料清单
![]()
![]()
![]()
ESP32 开发板×1
2.4″ IPS LCD 显示器×1
ST7789V 驱动控制器×1
454261 锂电池×1
圆口 4针针坐×1
圆口 4针针头×1
小型 PET/PETG 板×1
0.4 mm PCB ×1
1.2 mm PCB ×1
5个方向按钮×1
小按钮×2
纽扣按钮×2
ATtiny861 微控制器×1
SMD×1
12欧姆电阻×1
ISP编程器 ×1(TinyISP)
软件准备
Arduino IDE
![]()
https://www.arduino.cc/en/Main/Software
ATTinyCore支持
![]()
https://github.com/SpenceKonde/ATTinyCore/blob/master/Installation.md
ESP-IDF
![]()
https://docs.espressif.com/projects/esp-idf/en/stable/get-started/
3D打印
![]()
下载并打印外壳,文件在项目文件库中提供下载:
https://make.quwj.com/project/117
或在 https://www.thingiverse.com/thing:3591170下载。
切割 PCB 板
![]()
![]()
切割一块 24×27 孔的 PCB 板(0.4mm厚)与 LCD 相匹配。请预留一些空间方便折叠 LCD 的软质电路板。然后使用双面胶将 LCD 固定在 PCB 上。
准备 PETG 板
![]()
切割一块 62mm x 69mm 的 PETG 板,用于支持开发板和锂电池。
固定 ESP32 开发板
![]()
用双面胶将开发板固定在 PETG 板上。
固定电池并连接至开发版
![]()
1、用双面胶将锂电池固到开发板上。
2、连接电池和开发板。
处理引脚
显示器引脚
![]()
由于 LCD 显示器的种类繁多,请在对显示屏做任何改动之前先确认好 datasheet 里面的参数。
本项目的 LCD 显示器没有使用到触控面板的功能,需要剪掉一些引脚,减少干扰。
连接 GND 引脚
![]()
![]()
大多数情况下,很少有引脚需要连接到 GND。 为了减少焊接工作量,我将整体切割一个铜条与 GND 引脚连接在一起,最后整体焊接。
连接 Vcc 引脚
![]()
将 LCD 电源和 LED 电源的两个引脚连接到 Vcc。根据数据表,LCD 电源可直接连接到开发板 3.3V 引脚,但 LED 电源电压略低于 3.3 V,最好在中间添加一个 12 欧姆的贴片电阻。
连接 LCD 和驱动板
![]()
用胶带将 LCD 和开发板粘在一起。连接处预留 5mm 的空间方便折叠。
连接 SPI 引脚
![]()
具体连接方式如下:
LCD ESP32 GND -> GND RST -> GPIO 33 SCL -> GPIO 18 DC -> GPIO 27 CS -> GPIO 5 SDI -> GPIO 23 SDO -> 不连 Vcc -> 3.3 V LED+ -> 12 欧电阻 > 3.3 V LED- -> GND
烧录程序
在 GitHub 库下载源代码:
https://github.com/moononournation/esp32-nesemu
1、在源代码文件夹中,运行 “make menuconfig”
2、选择 “Nofrendo ESP32-specific configuration”
![]()
3、选择 “Hardware to run on” ->“Custom Hardware”
![]()
![]()
4、选择 “LCD Type” -> “ST7789V LCD”
![]()
![]()
5、引脚设置:MISO -> -1, MOSI -> 23, CLK -> 18, CS -> 5, DC -> 27, RST -> 33, Backlight -> -1, IPS -> Y
6、退出并保存
7、运行 “make -j5 flash”
8、运行 “sh flashrom.sh PATH_TO_YOUR_ROM_FILE”
I2C 连接器
![]()
![]()
![]()
![]()
ESP32 默认的 I2C 引脚如下:
Pin 1 (SCL) -> GPIO 22 Pin 2 (SDA) -> GPIO 21 Pin 3 (Vcc) -> 3.3 V (由锂电池供电,不使用 5V 电源。) Pin 4 (GND) -> GND
I2C 游戏手柄编程
![]()
![]()
![]()
![]()
I2C 游戏手柄的程序非常简单,只有 15 行代码。但焊接后在 ATtiny861 上重新编程有点难度,所以最好事先在面包板上测试。
从 GitHub 库下载,编写和烧录程序:https://github.com/moononournation/attiny861_i2c_gamepad
构建 I2C 游戏手柄
![]()
![]()
![]()
![]()
![]()
按键功能和引脚对应如下:
ATtiny861 按键 GND -> 所有按键在一个针脚上 Pin 20 (PA0) -> 上键 Pin 19 (PA1) -> 下键 Pin 18 (PA2) -> 左键 Pin 17 (PA3) -> 右键 Pin 14 (PA4) -> 选择键 Pin 13 (PA5) -> 开始键 Pin 12 (PA6) -> A 键 Pin 11 (PA7) -> B 键 Pin 6 (GND) -> I2C pin 4 Pin 5 (Vcc) -> I2C pin 3 Pin 3 (SCL) -> I2C pin 1 Pin 1 (SDA) -> I2C pin 2
音频引脚连接(可选)
![]()
![]()
![]()
ESP32 开发板的引脚 25 和 26 是输出的模拟音频信号,可以连接这两个引脚和顶部的电源的引脚(3.3V 和 GND),然后添加耳机或者扬声器。
其他的尝试

使用 ESP32 还可以干很多除了 NES 模拟器之外的有趣作品,例如可以用它制造一个能运行 MicroPython 游戏的主机。你只要将 I2C 游戏手柄改成 I2C 键盘就可以了,我认为使用 ATtiny88 控制器制作它并不困难。期待你的创新!

想更换ROM怎么做