基于ESP32的掌上游戏机制作教程
基于ESP32的掌上游戏机制作教程
本文将介绍如何使用ESP32开发板制作一款简易的掌上游戏机。虽然文章内容发布于2019年,但其基本原理和制作方法仍然具有参考价值。需要注意的是,由于硬件和软件的更新换代,部分材料和工具可能需要根据实际情况进行调整。
材料清单
- 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打印
下载并打印外壳,文件在项目文件库中提供下载:
切割 PCB 板
切割一块 24×27 孔的 PCB 板(0.4mm厚)与 LCD 相匹配。请预留一些空间方便折叠 LCD 的软质电路板。然后使用双面胶将 LCD 固定在 PCB 上。
准备 PETG 板
切割一块 62mm x 69mm 的 PETG 板,用于支持开发板和锂电池。
固定 ESP32 开发板
用双面胶将开发板固定在 PETG 板上。
固定电池并连接至开发版
- 用双面胶将锂电池固到开发板上。
- 连接电池和开发板。
处理引脚
显示器引脚
由于 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
- 在源代码文件夹中,运行 “make menuconfig”
- 选择 “Nofrendo ESP32-specific configuration”
- 选择 “Hardware to run on” ->“Custom Hardware”
- 选择 “LCD Type” -> “ST7789V LCD”
- 引脚设置:MISO -> -1, MOSI -> 23, CLK -> 18, CS -> 5, DC -> 27, RST -> 33, Backlight -> -1, IPS -> Y
- 退出并保存
- 运行 “make -j5 flash”
- 运行 “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 控制器制作它并不困难。期待你的创新!