基于ESP32的便携式游戏机
基于ESP32的便携式游戏机
- 一、项目说明
- 二、项目材料
- 三、程序测试
- 四、设置LCD屏幕
- 五、控制设置
- 六、测试电路
- 七、外壳制作
- 八、结果
视频:
ESP32 pro
一、项目说明
欢迎来到复古游戏的世界!你是否曾经想要以便携格式重温童年的经典游戏?在这个教程中,我将指导你完成制作自己的手持复古游戏机的激动人心之旅。我们将使用Raspberry Pi Zero 2W、一个3.5英寸的TFT显示屏,以及其他一些容易获得的组件,来创建一个紧凑、便携的游戏设备,它将唤起你所有的怀旧记忆。
这个项目非常适合初学者和有经验的爱好者。它结合了软件设置、硬件集成以及在制作游戏机机身时的一点创意。通过本指南的学习,你不仅将拥有一个功能齐全的游戏机,还将更深入地了解不同组件如何协同工作。
实物图:
二、项目材料
电子组件:
- Raspberry Pi Zero 2W
- 3.5英寸TFT显示屏
- 触摸开关
- 按钮
- 摇杆模块
- ESP32C3微控制器
- 跳线
制作材料:
- 纸板
- 旧报纸
- 胶水
- 水(用于制作胶水混合物)
电源和连接:
- 移动电源(用于为游戏机供电)
- USB数据线(用于连接外设)
- 蓝牙扬声器或耳机(用于音频输出)
软件:
- RetroPie操作系统(从RetroPie网站下载)
工具:
- 烙铁
- 面包板(用于原型设计)
- 工艺刀(用于切割纸板)
- 剪刀
三、程序测试
要开始,我使用Raspberry Pi Imager在microSD卡上安装了RetroPie。以下是我的做法:
- 下载并安装Raspberry Pi Imager:首先,我从官方Raspberry Pi网站下载了Raspberry Pi Imager并安装到我的电脑上。
- 选择RetroPie操作系统:我将microSD卡插入电脑并启动了Raspberry Pi Imager。我选择了“选择操作系统”,导航到“仿真和游戏操作系统”部分,并选择了“RetroPie”。我选择了与Raspberry Pi Zero 2W兼容的版本。
- 写入镜像:选择RetroPie后,我将microSD卡作为存储设备,并点击了“写入”。然后该工具下载并安装了RetroPie到microSD卡上。
安装完成后,我将microSD卡插入Raspberry Pi Zero 2W并开机。RetroPie启动了,我准备为我的手持游戏机配置系统。
四、设置LCD屏幕
为了将3.5英寸TFT LCD与RetroPie设置在一起,我需要通过终端安装必要的驱动程序。以下是我的做法:
首先,我通过在RetroPie中按F4键访问了终端。一旦进入终端,我通过输入git clone https://github.com/goodtft/LCD-show.git
并按回车键,从goodtft的GitHub仓库下载了LCD驱动程序。下载完成后,我使用cd LCD-show/
命令进入了下载的目录。在这个目录中,我找到了几个不同型号TFT显示屏的安装脚本。为了安装我的特定TFT显示屏型号的驱动程序,我运行了相应的脚本。对于我的LCD35型号,我输入了sudo ./LCD35-show
并按了回车键。
我按照安装过程中的屏幕提示进行操作,这个过程花了几分钟。安装完成后,系统提示我重启我的Raspberry Pi Zero 2W。重启后,RetroPie自动检测并配置了TFT显示屏。我通过连接的外设导航RetroPie界面来测试显示屏。这个设置使我的3.5英寸TFT显示屏能够与我的Raspberry Pi Zero 2W上的RetroPie无缝协作,提供了极佳的复古游戏体验。
关于你提到的GitHub链接,如果你在尝试访问时遇到了问题,可能是因为网络原因或者链接本身的问题。请确保链接是正确的,并且你的网络连接是稳定的。如果问题仍然存在,可能需要稍后再试,或者检查是否有任何网络限制导致你无法访问GitHub。如果你需要进一步的帮助来解决这个问题,我可以提供支持。
五、控制设置
最初,我使用触摸开关来测试控制。在最终构建时,为了更好的便利性和耐用性,我换成了按钮。然而,我面临D-pad按钮的短缺。幸运的是,我在组件盒中发现了一个摇杆模块,并决定使用它。由于Raspberry Pi不支持通过GPIO引脚的模拟数据,我使用了一个ESP32C3微控制器作为模拟到数字的转换器。
首先,我校准了摇杆模块以确保输入准确。我将摇杆模块连接到ESP32C3微控制器,然后将微控制器与Raspberry Pi进行接口连接。这个设置允许摇杆作为D-pad使用,为我的游戏提供了精确的控制。
六、测试电路
在将组件组装到最终的外壳之前,我在面包板上测试了整个电路。我将Raspberry Pi、3.5英寸TFT LCD、按钮、摇杆模块和ESP32C3微控制器连接在面包板上。在为Raspberry Pi通电后,我验证了所有组件是否能够正确协同工作。我确保显示屏能够显示RetroPie界面,按钮能够准确响应,摇杆模块能够作为D-pad工作。这一步骤对于在最终组装前识别和解决任何问题至关重要。
七、外壳制作
为了制作我的手持游戏机的外壳,我使用了用胶水和旧报纸加固的纸板。首先,我将纸板剪成适合所有组件所需的形状和大小。我将胶水和水混合成糊状,然后涂在纸板上,并用几层报纸覆盖。这种技术增强了纸板的强度,使其足够坚固,能够保护组件。一旦胶水干透,纸板变得坚固,我就直接在纸板上组装了电路。我确保所有组件,包括Raspberry Pi、LCD、按钮和摇杆,都牢固地连接在一起。这种方法为我提供了一个简单而有效的手持游戏机外壳。
八、结果
外壳完成后,我通过固定所有组件来组装最终产品。虽然内置锂离子电池会是理想的选择,但我最初使用了一个移动电源来为游戏机供电。这种设置是功能性和方便的,让我能够在不担心内部电源的情况下享受游戏。
为了测试最终产品,我通过USB数据线将移动电源连接到Raspberry Pi并打开了游戏机。移动电源有足够的容量为我的游戏会话提供足够的运行时间。我玩了一系列NES和GBA游戏,包括“口袋妖怪绿宝石”、“龙珠Z”、“超级马里奥”、“魂斗罗”、“Zippy Race”和“大金刚”。游戏机表现良好,游戏玩法流畅且响应灵敏。
尽管游戏机没有内置扬声器,但它能够连接到蓝牙扬声器和耳机进行音频输出。这增加了手持游戏机的便携性和便利性,使其成为一个真正多功能的设备,适合随时随地进行复古游戏。最终产品是我努力的令人满意的成果,将各种组件结合成一个功能性和愉快的手持游戏机。
希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。
作者:Svan.
注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!
相关文章:

基于ESP32的便携式游戏机
基于ESP32的便携式游戏机 一、项目说明二、项目材料三、程序测试四、设置LCD屏幕五、控制设置六、测试电路七、外壳制作八、结果 视频: ESP32 pro 一、项目说明 欢迎来到复古游戏的世界!你是否曾经想要以便携格式重温童年的经典游戏?在这个…...

【LeetCode 88. 合并两个有序数组】 java实现
LeetCode 88. 合并两个有序数组 题目描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 的大小等于 m n(即…...

200Kg大载重多旋无人机价格高昂技术分析
200Kg大载重多旋无人机作为一种高度专业化的航空工具,其价格相较于普通无人机显著较高,这主要是由于其在技术设计和生产过程中所需的高要求所致。以下是对其价格高昂的技术分析: 一、高性能材料与结构设计 1. 高强度轻量化材料:…...

快速理解http的get和post
在网络通信中,HTTP 协议扮演着非常重要的角色,而不同的 HTTP 方法决定了客户端与服务器之间的交互方式。 这里讲一下最常用的两种方法——GET 和 POST。 一、GET 方法 GET 方法用于从服务器获取资源。 这就像去图书馆借书——你向图书馆请求一本特定的…...

Mamba学习笔记(3)—S4原理基础
文章目录 Efficiently Modeling Long Sequences with Structured State Spaces0 Abstract1 Introduction2 Background:State Spaces2.1 State Space Models: A Continuous-time Latent State Model2.2 Addressing Long-Range Dependencies with HiPPO2.3 Discrete-t…...

好看的ppt字体推荐!分享3个制作幻灯片的常用软件!
ppt什么字体好看? 好看是一个比较主观的概念,见仁见智,在选用ppt字体时,比起关注好看,字体是否“合适”应该是优先级更高的需求。这里的合适,即PPT所选用字体的风格、呈现效果是否与PPT的主题和使用场景相…...

第6篇:无线与移动网络
目录 引言 6.1 无线网络的基础概念 6.2 无线局域网(WLAN)与IEEE 802.11 6.3 蓝牙与无线个域网(WPAN) 6.4 无线城域网(WMAN)与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络(3G/4G/5G&…...

【C++标准模版库】unordered_map和unordered_set的介绍及使用
unordered_map和unordered_set 一.unordered_set1.unordered_set类的介绍2.unordered_set和set的使用差异 二.unordered_map1.unordered_map和map的使用差异 三.unordered_multimap/unordered_multiset四.unordered_map/unordered_set的哈希相关接口 一.unordered_set 1.unord…...

深度解析Transformer:从自注意力到MLP的工作机制
深度解析Transformer:从自注意力到MLP的工作机制 以下大部分内容本来自对3Blue1Brown的视频讲解的整理组织 一、Transformer的目标 为了简化问题,这里讨论的模型目标是接受一段文本,预测下一个词。这种任务对模型提出了两大要求:…...

《米小圈动画成语》|在趣味中学习,在快乐中掌握成语知识!
作为一名家长,我一直希望孩子能够在学习的过程中既感受到乐趣,又能获得真正的知识。成语作为中华文化的精华,虽然意义深远、简洁凝练,但对于一个小学生来说,学习和理解这些言简意赅的成语无疑是一个挑战。尤其是有些成…...

linux系统之jar启动脚本
编辑linux启动脚本 执行 vi run_blog 按i 进入编辑,复制以下代码,并根据当前环境修改三个参数。以下是详细完整脚本代码: #!/bin/bash# 配置部分 JAR_PATH"/path/to/your/app.jar" # 替换为你的 JAR 文件的实际路径 L…...

简单认识Maven 2-Maven坐标
Maven坐标 在 Maven 中,坐标(Coordinates)用于唯一标识一个项目或依赖项,就像在现实世界中通过经纬度来确定一个地理位置一样。Maven 坐标由三个主要部分组成:groupId、artifactId 和 version。 groupId(…...

Xilinx UltraScale系列FPGA纯verilog图像缩放,工程项目解决方案,提供2套工程源码和技术支持
目录 1、前言工程概述免责声明FPGA高端图像处理培训 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Artix7 系列FPGA上的应用本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Zynq7000 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产…...

React(二) JSX中的this绑定问题;事件对象参数传递;条件渲染;列表渲染;JSX本质;购物车案例
文章目录 一、jsx事件绑定1. 回顾this的绑定方式2. jsx中的this绑定问题(1) 方式一:bind绑定(2) 方式二:使用 ES6 class fields 语法(3) 方式三:直接传入一个箭头函数(重要) 3.事件参数传递(1) 传递事件对象event(2) 传递其他参数 4. 事件绑定…...

前端开发攻略---取消已经发出但是还未响应的网络请求
目录 注意: 1、Axios实现 2、Fetch实现 3、XHR实现 注意: 当请求被取消时,只会本地停止处理此次请求,服务器仍然可能已经接收到了并处理了该请求。开发时应当及时和后端进行友好沟通。 1、Axios实现 <!DOCTYPE html> &…...

韩信走马分油c++
韩信走马分油c 题目算法代码 题目 把油桶里还剩下的10斤油平分,只有一个能装3斤的油葫芦和一个能装7斤的瓦罐。如何分。 算法 油壶编号0,1,2。不同倒法有:把油从0倒进0(本壶到本壶,无效)&…...

【Linux】Anaconda下载安装配置Pytorch安装配置(保姆级)
目录 Anaconda下载 Anaconda安装 conda init conda --v Conda 配置 conda 环境创建 conda info --envs conda list Pytorch安装配置 检验安装情况 检验是否可以使用GPU Anaconda下载 可以通过两种途径完成Anaconda安装包的下载 途径一:本地windows下…...

渗透测试导论
渗透测试的定义和目的 渗透测试(Penetration Testing)是一项安全演习,网络安全专家尝试查找和利用计算机系统中的漏洞。 模拟攻击的目的是识别攻击者可以利用的系统防御中的薄弱环节。 这就像银行雇用别人假装盗匪,让他们试图闯…...

鸿蒙学习笔记--搭建开发环境及Hello World
文章目录 一、概述二、开发工具下载安装2.1 下载开发工具DevEco Studio NEXT2.2 安装DevEco Studio 三、启动软件四、第一个应用Hello World4.1 创建应用4.2 创建模拟器4.3 开启Hyper-v功能4.4 启动虚拟机 剑子仙迹 诗号:何须剑道争锋?千人指,…...

【ArcGIS风暴】ArcGIS字段计算器公式汇总
在GIS数据处理中,ArcGIS的字段计算器是一个强大的工具,它可以帮助我们进行各种数值计算、文本处理和逻辑判断。本文将为您整合和分类介绍ArcGIS字段计算器中的常用公式,并通过实例说明它们的应用。 文章目录 一、数值计算类二、文本处理类三、日期和时间类四、逻辑判断类五、…...

探索秘境:如何使用智能体插件打造专属的小众旅游助手『小众旅游探险家』
文章目录 摘要引言智能体介绍和亮点展示介绍亮点展示 已发布智能体运行效果智能体创意想法创意想法创意实现路径拆解 如何制作智能体可能会遇到的几个问题快速调优指南总结未来展望 摘要 本文将详细介绍如何使用智能体平台开发一款名为“小众旅游探险家”的旅游智能体。通过这…...

机械臂力控方法概述(一)
目录 1. MoveIt 适用范围 2. 力控制框架与 MoveIt 的区别 3. 力控方法 3.1 直接力控制 (Direct Force Control) 3.2 间接力控制 (Indirect Force Control) 3.2.1 柔顺控制 (Compliant Control) 3.2.2 阻抗控制 (Impedance Control) 3.2.3 导纳控制 (Admittance Control…...

1971. 寻找图中是否存在路径
有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接&#x…...

FLINK SQL语法(1)
DDL Flink SQL DDL(Data Definition Language)是Flink SQL中用于定义和管理数据结构和数据库对象的语法。以下是对Flink SQL DDL的详细解析: 一、创建数据库(CREATE DATABASE) 语法:CREATE DATABASE [IF…...

【Fargo】1:基于libuv的udp收发程序
开发UDP处理程序 我正在开发一个基于libuv的UDP发送/接收程序,区分发送端和接收端,设计自定义包数据结构,识别和处理丢包和乱序。 创建项目需求 用户正在要求一个使用libuv的C++程序,涉及UDP发送和接收,数据包包括序列号和时间戳,接收端需要检测丢包和乱序包。 撰写代…...

WebSocket介绍和入门案例
目录 一、WebSocket 详解1. 定义与特点:2. 工作原理:3. 应用场景: 二、入门案例 一、WebSocket 详解 1. 定义与特点: WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传…...

k8s集群版本升级
Kubernetes 集群版本升级是为了获得最新的功能、增强的安全性和性能改进。然而,升级过程需要谨慎进行,特别是在生产环境中。通常,Kubernetes 集群的版本升级应遵循逐步升级的策略,不建议直接跳过多个版本。 Kubernetes 版本升级的…...

XML 和 SimpleXML 简介
XML 和 SimpleXML 简介 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它定义了一组规则,用于在文档中编码数据,以便人和机器都能理解。XML 的设计目标是既易于人类阅读,也易于机器解析。SimpleXML 是 PHP…...

MySQL 中 LIKE 语句的 `%` 和 `_` 以及 BLOB 和 TEXT 的详细解析和案例示范
1. LIKE 语句中的 % 和 _ 用法 1.1 % 通配符的用法 % 通配符代表零个或多个字符。它是 MySQL 中用于模糊匹配的强大工具之一,可以在任何字符的位置使用。 示例 1:查找以特定字符开头的记录 假设我们有一个电商订单系统的 orders 表,其中包…...

git clone卡在Receiving objects
git clone卡在Receiving objects 一直卡主 $ git clone gitxxx.git Cloning into xxx... remote: Enumerating objects: 75926, done. remote: Counting objects: 100% (18844/18844), done. remote: Compressing objects: 100% (6566/6566), done. Receiving objects: 60% (…...