提到掌机,相比各位 Maker 的桌面上或箱底下肯定有那么几款珍品,时不时拿出来找点乐子。
自制游戏机项目每年也会推陈出新,《RETRO-CM3 掌上游戏机》在去年火热一时,它是基于 RetroPie 和树莓派 CM3 的一款掌机。下面,要为大家介绍的是基于 ESP32 和 ATtiny861 来构建任天堂 NES 游戏模拟器掌机并附有制作该项目的完整素材。
power_switch.stl
[7684 Bytes at 2019-06-05, 19 次下载]
ESP32_game_console_cover.stl
[23584 Bytes at 2019-06-05, 18 次下载]
esp32-nesemu-master.zip
[235617 Bytes at 2019-06-05, 50 次下载]
ESP32_game_console_v4.stl
[59484 Bytes at 2019-06-05, 18 次下载]
ESP32_game_console_v3.stl
[57384 Bytes at 2019-06-05, 17 次下载]
joystick.stl
[131584 Bytes at 2019-06-05, 17 次下载]
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
下载并打印外壳,文件在项目文件库中提供下载:
https://make.quwj.com/project/117
或在 https://www.thingiverse.com/thing:3591170 下载。
切割一块 24×27 孔的 PCB 板(0.4mm厚)与 LCD 相匹配。请预留一些空间方便折叠 LCD 的软质电路板。然后使用双面胶将 LCD 固定在 PCB 上。
切割一块 62mm x 69mm 的 PETG 板,用于支持开发板和锂电池。
用双面胶将开发板固定在 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”
ESP32 默认的 I2C 引脚如下:
Pin 1 (SCL) -> GPIO 22
Pin 2 (SDA) -> GPIO 21
Pin 3 (Vcc) -> 3.3 V (由锂电池供电,不使用 5V 电源。)
Pin 4 (GND) -> GND
I2C 游戏手柄的程序非常简单,只有 15 行代码。但焊接后在 ATtiny861 上重新编程有点难度,所以最好事先在面包板上测试。
从 GitHub 库下载,编写和烧录程序:https://github.com/moononournation/attiny861_i2c_gamepad
按键功能和引脚对应如下:
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 控制器制作它并不困难。期待你的创新!