8038| 9
|
[项目] 超详细教程!自制一个Arduino NES(红白机)游戏机! |
目前大多数NES模拟器需要使用某种C编译器(例如esp-idf)手动进行命令行构建,这对于初学者来说是一个很大的障碍。 这周就和大家分享如何使用Arduino IDE做一个便携式NES(红白机)游戏机。 NES游戏机是一款由任天堂公司于1985年发布的家用电子游戏机。NES是“Nintendo Entertainment System”的缩写,也被称为“红白机”。该游戏机在1980年代和1990年代风靡全球,并为游戏业界的发展做出了重要贡献。 材料清单
步骤1:Nofrendo是什么? Nofrendo是一个很好的NES模拟器,它可以在较老的奔腾系统上全速运行,具有不错的声音支持和良好的兼容性。 Nofrendo是由Matthew Conte在上个世纪开发的,它可以在Windows、Unix和BeOS上运行。由于实现已经泛化以支持不同的平台,许多开发人员开始基于它开发其他平台的NES模拟器。 参考资料: http://www.baisoku.org https://www.zophar.net/nes/nofrendo.html https://github.com/adafruit/nofrendo_arcada https://github.com/espressif/esp32-nesemu 步骤2:Arduino-nofrendo Github用户rickyzhang82在2018年将Nofrendo原始源代码推送到Github。我已经fork了该仓库,并将其转换为兼容Arduino库的布局。只需实现osd.h中声明的所有函数即可使其工作。 理论上,如果有足够的RAM和处理能力,这个库可以在任何Arduino平台上使用。由于Espressif已经证明ESP32可以运行Nofrendo,所以我基于他们的示例代码,在examples文件夹下开发了一个esp32-nofrendo示例。 参考资料: https://github.com/rickyzhang82/nofrendo https://github.com/moononournation/arduino-nofrendo 步骤3:显示选项 为了支持尽可能多的显示变化,我将显示实现更改为使用Arduino_GFX。现在甚至支持像ST7796这样的大型4英寸320x480显示屏。 以下是Arduino_GFX支持的可以适用于Nofrendo分辨率的显示变化:
注意: 320 x 480显示需要将原始256 x 240分辨率裁剪为240 x 214,然后放大到480 x 320。 宽度放大两倍,高度放大1.5倍,每2个原始线条绘制3条线。第三条线可以重复第二条线,也可以简单地保留第三条线的背景色。 详细实现可在display.cpp中找到。 步骤4:音频选项 目前arduino-nofrendo支持(实际上是arduino-esp32支持)2种音频输出方法:
注意: 内置DAC仅具有8位分辨率,并且存在过多的静态噪声(杂音),通过使用外部的 I2S 放大模块可以降低这种静态噪声的影响(因为外部模块可以提供更好的信噪比和动态范围。) 步骤5:控制器选项 目前arduino-nofrendo支持3种类型的控制器:
即将支持:
注意: 默认的arduino-esp32 I2C接口连接到GPIO 21(SDA)和22(SCL)。 步骤6:文件系统选项 Nofrendo在文件系统中存储3种类型的文件:
目前arduino-nofrendo支持(实际上是arduino-esp32支持)3种类型的文件系统:
注意: 选SPIFFS测试是最简单的方法,但在SPIFFS中备份存档和状态文件比较困难,SD或SD_MMC更适合长期使用。另外,如上面视频演示,你可以将SD卡当作游戏卡,只需更换SD卡即可更换游戏。 步骤7:软件准备Arduino IDE 如果你尚未安装Arduino IDE,请下载并安装: https://www.arduino.cc/en/main/software ESP32支持 按照安装说明添加ESP32支持,如果尚未安装: https://github.com/espressif/arduino-esp32 注意:请使用arduino-esp32版本1.0.6进行此项目,较新版本可能无法成功编译 Arduino ESP32 filesystem uploader 按照安装步骤安装Arduino ESP32 filesystem uploader,如果没有安装的话: https://github.com/me-no-dev/arduino-esp32fs-plugin Arduino_GFX库 下载最新的Arduino_GFX库:(点“Clone or Download”->“Download ZIP”) https://github.com/moononournation/Arduino_GFX 在Arduino IDE中导入库。(Arduino IDE“项目”菜单->“包含库”->“添加.ZIP库”->选择下载的ZIP文件) Arduino Nofrendo库 下载最新的Arduino Nofrendo库:(点“Clone or Download”->“Download ZIP”) https://github.com/moononournation/arduino-nofrendo 同样在Arduino IDE中导入库。(Arduino IDE“项目”菜单->“包含库”->“添加.ZIP库”->选择下载的ZIP文件) 步骤8:面包板原型 在制作你自己的便携式Arduino NES控制台最终版本之前,让我们先用面包板原型进行一个PoC(概念验证)。 步骤9:面包板改造 4寸LCD是一个比较大的尺寸,我们需要把四个400孔面包板组合在一起。不过,8个电源总线太多了,我们去掉其中的6个,只保留2个就足够了。 步骤10:TTGO T8 V1.7改造 将四个400孔面包板组合在一起可以放下4寸LCD,但仍然没有足够的剩余空间来放一块ESP32开发板。因此,我们需要将ESP32开发板的一部分隐藏在LCD下方。同时,将线路也隐藏在LCD下方使其更整洁。 但我发现TTGO T8 V1.7的3D天线无法放LCD下方。由于NES控制台不需要互联网接入,我就直接把它拆了…… 注意:
步骤11:LCD改造
步骤12:固定模拟摇杆 带有引脚的模拟摇杆一侧可以非常好地固定在面包板上,但另一侧需要一些额外的引脚才能固定在面包板上。 步骤13:I2S放大器模块改造 I2S放大器模块的扬声器连接器不是2.54毫米间距(面包板孔的间距大小),需要稍微弯曲引脚接头以方便焊接。 步骤14:布局设计 在实际的面包板布线之前,我们首先先设计所有组件的布局,并仔细检查所有组件的位置是否与LCD冲突。 步骤15:引脚映射设计 这一步是可选的,只是为了使线路更加整洁(由于所有的线路都隐藏在LCD后面,这并不是必要的)。 大多数ESP32接口可以重新映射到任何GPIO引脚,除了SD_MMC。由于TTGO T8 v1.7已经内置了与SD_MMC接口连接的SD卡插槽,我想重用那些引脚连接到LCD SD卡插槽。 我在开发板下方使用了一些面包板线将一些GPIO重定向到其他面包板条,让整个布局看起来更加整洁:
注意: SPI显示器通常需要连接7个GPIO引脚,它们是CS、RESET、D/C、SCK、MOSI、MISO和LED。为了把GPIO的使用次数减少到3次,进行了一些安排:
步骤16:面包板布线 以下是连接汇总:
步骤17:可选电池 TTGO T8 v1.7开发板内置了锂电池充电和稳压电路。连接一个锂电池可以让游戏机变得更便携式,但对于原型设计来说并不是必要的。 面包板背后有一个很大的平面,可以放置一个非常大的锂电池。 步骤18:程序 操作步骤如下:
注意: 有时需要拆卸 SD 卡才能成功上传。 步骤19:ROM 如果你手头没有任何 NES rom 文件,可以在网上找到许多自制的 NES rom,例如: http://www.nesworld.com/article.php?system=nes&data=neshomebrew 我已经在“最佳自制任天堂娱乐系统游戏[1]”中选择了一个名为“Chase”的简单游戏,用于esp32-nofrendo示例。 注意: 还推荐一个名为 "BLADE BUSTER" 的自制射击游戏,但是 rom 大小不能适用于没有 PSRAM 的开发板。(nofrendo 需要将 rom 文件加载到内存中) 步骤20:上传 ROM 文件 默认的 hw_config.h 参数设置为使用 SD 文件系统,只需将 ROM 文件*.nes复制到 SD 卡中并插入即可使其正常工作。 如果更改为使用 SPIFFS 文件系统,则 esp32-nofrendo 示例已经在 data 文件夹中包含了一个 "Chase.nes" ROM 文件。 只需在 Arduino IDE 中选择 "工具" 菜单 -> "ESP32 Sketch Data Upload" 将 ROM 文件上传到 ESP32 SPIFFS。 你也可以将 ROM 文件复制到数据文件并上传。 注意: 此时,esp32-nofrendo 示例将找到第一个 *.nes 文件并加载它。 步骤21:状态保存和加载 状态保存和加载,也称为无限恢复,是一种简单的作弊技巧,可以帮助你更轻松地玩游戏。 NES没有X和Y按钮,我们要把它们用作状态保存和加载的按钮。 注意: Nofrendo 设计了 10 个状态保存和加载插槽,目前 arduino-nofrendo 只能使用第一个插槽(插槽 0)。 步骤22:预制的 ESP32 控制台 目前市面上很少有预先构建为游戏机的ESP32开发设备,例如:
步骤23:TTGO T-Watch + Game 模块
参考: https://t-watch-document-en.readthedocs.io/en/latest/introduction/index.html 步骤24:ODROID-GO
参考: https://www.hardkernel.com/shop/odroid-go/ 步骤25:M5Stack + M5Stack CardKB
注意: CardKB 一次只能读取一个按键被按下的信息,适合玩某些特定的游戏。 参考: https://m5stack.com/collections/m5-core https://m5stack.com/products/cardkb-mini-keyboard 步骤26:开始享受游戏 Arduino IDE 是一个非常易于使用的平台。esp32-nofrendo 示例只是一个起点,你可以在其上添加更多的功能,例如:
赶快动手做一个你自己的 Arduino NES 吧! 参考资料 [1]最佳自制任天堂娱乐系统游戏: http://www.nesworld.com/article.php?system=nes&data=neshomebrew_bestof 原文作者:陳亮 原文链接:https://www.instructables.com/Arduino-NES/ 译文首发于:DF创客社区 转载请注明来源信息 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed