今天小编给大家带来的是日横滨的Maker Naveen 基于Arduino Nano ESP32的游戏机项目,该游戏的平均帧率为34 FPS,分辨率为320*240,该项目重量轻、结构紧促,对用户非常友好。
材料清单
硬件:
Arduino Nano ESP32 *1
Adafruit 2.8 TFT Touch Shield *1
M5Stack Joystick Unit MEGA328P I2C/Grove Connector
Seeed Studio Grove - Dual Button
ArduEZ ONE Stackable Breadboard
Seeed Studio Grove - 4 pin Male Jumper to Grove 4 pin Conversion Cable
软件:
Espressif ESP IDF
介绍
《毁灭战士》是 id Software 于 1993 年开发并发行的一款经典第一人称射击游戏。游戏以未来科幻世界为背景,玩家扮演一名太空海军陆战队员,必须与成群的恶魔战斗,杀出一条血路。地狱。
Doom 主要是用 C 编程语言开发的,有一些组件是用汇编语言编写的。开发人员使用运行 NeXTSTEP 操作系统的 NeXT 计算机。游戏的关卡和图形数据与引擎分开存储在 WAD 文件中,它代表“所有数据在哪里?”。这使得无需更改引擎代码即可轻松修改设计。
最初的《DOOM》游戏需要至少 4MB 的 RAM 和 20MB 的磁盘空间,这比典型的微控制器规格要大得多。
为了移植游戏,需要一些压缩和优化技术来将游戏数据和代码放入微控制器的闪存和RAM中,并且需要一些修改和适应以使游戏引擎在不同的平台和架构上运行,例如ESP32或RP2040芯片。
但是,这些更改可能会在游戏的行为和性能中引入一些错误或差异,从而可能影响游戏体验。
最近,人们做出了一些努力来使游戏与低功耗微控制器兼容。对于我们的项目,我们选择使用 Retro-Go,这是一种开源固件,允许在基于 ESP32 的 MCU 上玩复古游戏。虽然该固件不直接支持 Arduino Nano ESP32,但其灵活性和可配置性使其可以移植到其他基于 ESP32 的 MCU。
STEP - 1 硬件选型
该项目的主要目标是展示在资源和功能有限的微控制器上运行《DOOM》的可行性和性能。在此项目中,我们将经典《DOOM》游戏移植到 Arduino Nano ESP32 上,并使用 Adafruit 2.8" TFT 显示扩展板、M5Stack 操纵杆单元和 Seeed Grove 双按钮使其成为手持游戏机。
STEP - 2 连接方式
Adafruit TFT 显示扩展板使用跳线和可堆叠面包板扩展板通过 SPI 接口连接到 Arduino Nano ESP32。
Arduino Nano ESP32 放置在面包板防护罩的背面,堆栈的顶部。
操纵杆和按钮分别通过 I2C 和 GPIO 连接,使用公跳线连接到 Grove 4 针转换电缆。原理图部分给出了连接图。
STEP - 3 设置开发环境
尽管我们将在 macOS 上编译固件,但其他操作系统的工作流程类似。首先,我们需要下载并安装ESP-IDF开发框架。
$ mkdir ~/Nano_ESP32_DOOM
$ cd ~/Nano_ESP32_DOOM
$ git clone -b release/v4.4 https://github.com/espressif/esp-idf
$ cd esp-idf
$ ./install.sh
$ source export.sh
现在我们可以克隆 Retro-Go 存储库。
$ cd ~/Nano_ESP32_DOOM
$ git clone https://github.com/ducalex/retro-go
$ cd retro-go
STEP - 4配置
Retro-Go 固件代码库是可配置的。他们提供了一些基于 ESP32 的开发板配置文件。我们需要添加/修改 Arduino Nano ESP32 的一些配置。在baseS3.sdkconfig 文件中,添加以下行。
CONFIG_ESPTOOLPY_FLASHMODE="qio"
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
我们将针对基于 ESP32-S3 的 Arduino Nano ESP32 重新使用 Components/retro-go/targets/esplay-s3/config.h。我们需要为各种组件(例如按钮、操纵杆、TFT显示器和SD卡)提供GPIO、I2C和SPI引脚,以与Arduino Nano ESP32板连接。
原文链接:创客项目秀|基于Arduino Nano ESP32 的《毁灭战士》游戏机 (qq.com)