
一个用 Arduino/ESP32 制作的奇特游戏主机原型。这只是个业余项目,
并非真正的产品。 最终的构想是一款能够运行我自制
游戏的小型掌机,配备音效和彩色显示屏。目前距离这个目标还差得很远。它应该
能够流畅运行NES和SNES时代的游戏。要实现更高的分辨率,
还需要配备PSRAM的开发板。
关键在于内存。目前运行该项目的Arduino Mega 2560仅有8 KB的
SRAM。这无法容纳彩色帧缓冲区,因此该开发板仅支持纯文本显示。
下一代平台是 ESP32 WROOM,其 SRAM 容量跃升至约 520 KB,并配备
高速双核处理器。这足以容纳 240x240 的帧缓冲区(约 115 KB),并能以该分辨率
运行真正的游戏。 WROOM 没有 PSRAM,因此无法容纳
更高分辨率屏幕所需的更大帧缓冲区。ESP32-WROVER 或
ESP32-S3 后续将通过数兆字节的 PSRAM 和板载存储来解决这一问题,
这也是超过 240p 分辨率屏幕所必需的。
现状
尚处于早期开发阶段且未完成。目前系统可以启动,检测电源按钮,通过
非阻塞式旋律引擎播放音乐,并在LCD上显示文本。目前尚无
游戏。
目前该系统运行在搭载16x2字符LCD的Arduino Mega上,这也是
代码的目标平台。 下一代平台已确定:采用ESP32 WROOM通过SPI接口驱动一块1.54英寸
240x240 IPS ST7789显示屏。这两个部件均工作在3.3 V电压下,无需
电平转换即可配对,这与当前的5 V LCD不同。 这些部件正在运输途中,
在它们到达之前不会进行任何移植工作。
游戏将托管在 lyszt.net 上,并通过 Wi-Fi 下载到开发板上。在
第一个版本中,游戏将存储在 ESP32 的板载闪存中。
硬件
- 微控制器: 目前使用 Arduino Mega 2560 (ATmega2560)
- 显示屏: 16x2 I2C 字符 LCD(地址
0x27) - 音频: 引脚 3 上的被动蜂鸣器
- 输入:
- 电源按钮位于第 2 引脚(
INPUT_PULLUP,已去抖动) - 方向键:上/下/左/右,目前仅为普通按钮,
尚未连接至任何电路 - 动作按钮:A / B,同样尚未连接
- 电源按钮位于第 2 引脚(
计划中(下一代平台)
- 微控制器: ESP32 WROOM(3.3 V,双核,约520 KB SRAM)
- 显示屏: 1.54 英寸 240x240 IPS ST7789,通过 SPI 接口连接
- 存储: 游戏存储在板载闪存中,通过 Wi-Fi 下载
- 后续计划: 采用 ESP32-WROVER 或 ESP32-S3,以获得超过 240p 分辨率所需的 PSRAM 余量
构建
PlatformIO 项目,基于 Arduino 框架。实际项目位于Lys Entertainment System/ 目录下。
platform = atmelavr
board = megaatmega2560
framework = arduino
lib_deps = marcoschwartz/LiquidCrystal_I2C
布局
源代码位于 Lys Entertainment System/src/ 目录下:
main.cpp— 入口点:接线配置、电源按钮、主循环。system/—System核心;负责电源状态、LCD 显示屏和音频。sounds/— 音频模块,分为数据和逻辑两部分:notes.h— 音高常量。songs.{h,cpp}— 音乐数据(Song结构体和旋律定义)。sounds.{h,cpp}— 非阻塞式旋律引擎和声音 API。audio_manager.{h,cpp}— 引擎的面向对象封装。
lcd/— LCD 文本辅助函数。utils/— 可复用的辅助函数(例如非阻塞的wait)。
