ESP32 掌上游戏机 的教程


材料清单




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/mas...
ESP-IDF

https://docs.espressif.com/projects/esp-idf/en/sta

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 控制器制作它并不困难。期待你的创新!


> ESP32 掌上游戏机

组件清单

  • 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