## 更新日志
## <font color=red>(2024/3/3---游戏合集更新,添加了新的游戏,放在附录)</font>
## <font color=red>(2024/4/1---安装python插件有个小问题,已修改,感谢创友提醒)
## <font color=red>(2024/4/18---创友分享了一个不错的工具"Arduboy Toolset",工具安装包放在了附件)
# DIY一个自己的Arduboy!👈
![0060.gif](//image.lceda.cn/pullimage/xo1nOuZlZbgHFuWfAnXZTNXoeLtBFuUWCfVV2LaG.gif)![CyberHack.gif](//image.lceda.cn/pullimage/yIHwzlj1wDek6DO3agiahKVrAzYh8rpcZjCmDKss.gif)![virus.gif](//image.lceda.cn/pullimage/U2lY1OOwI98D83gOK0Ne9AHtgPRcQi0LunDdCCQE.gif)
### 成果展示
![0062.gif](//image.lceda.cn/pullimage/c5UWuAAdN71Vwr3StxHmDT42cFSr7ObYS6vIDov8.gif)![0003.gif](//image.lceda.cn/pullimage/l2EKxib2KU3I1N0pS8VILm0PRm3icPJgnNMzVhwb.gif)![0007.gif](//image.lceda.cn/pullimage/vB5vu2Njebg8VNVaBTWe03YPeWOuQq61mSo8LdE2.gif)![0001.gif](//image.lceda.cn/pullimage/CqXNvp9umXvxq85RR38dVOKNjI4dQvuwwNWa0KlO.gif)
# 项目介绍
### 之前用Attiny85做了一个糖果盒游戏机,但是能玩的游戏比较少,偶然间看到一篇文章,内容介绍了[国外创客](https://cn.thesouthshow.com/42158-How-to-Upload-Games-to-Arduboy-and-500-Games-to-Fl-37#menu-9https://cn.thesouthshow.com/42158-How-to-Upload-Games-to-Arduboy-and-500-Games-to-Fl-37#menu-9)制作的一款叫Arduiboy的游戏机,这款游戏机能玩上百个的游戏,精致且小巧,所以作为一个游戏爱好者绝不能错过这款游戏机。在网上一番搜索过后,发现已经有人开源过了,在立创开源平台上也看到[LiLinBai](https://oshwhub.com/lilinbai/Arduboyyou-hu-ji)的作品,自己想写一篇较详细的制作过程,正巧赶上了嘉立创的彩色丝印活动,耗时一个月制作了自己的Arduboy,希望我这次的作品能够让其他想自己做一个Arduboy的创友作为一个参考,提高工作效率。
### 官方的游戏机价格大概在三四百,排除掉已有的元器件,这次的成本没有超过70RMB💰
### 如果你喜欢这款游戏机,**你也可以自己做一个!** 接下来,我们开始🤘
# 制作过程
### 在开始之前,收集信息很重要,我在成功制作一个Arduboy后,意识到制作一个Arduboy并不难,**重要的是有一个清晰且正确的制作过程**,下面是我总结的一个制作过程(仅作参考)
![0001.png](//image.lceda.cn/pullimage/LD3Yzs6tjtZgYiYGevRRcN6WgthdG6WGLtxSpe0o.png)
# 第一步 准备开发板和元器件
### 用到的元器件仅作参考
| 元 件 | 图片 | 价格 |
| :---: | :---: | :---: |
| Pro Micro开发板 | ![0004.png](//image.lceda.cn/pullimage/9dX3d2mJ5XJkf5uugC82gfce821UHFigs8x04Jtc.png) | 20RMB |
| USBISP或者Arduino UNO | ![0008.png](//image.lceda.cn/pullimage/Xl0l6X6PEjmNED4Wb7TiwSwtSh10jx14k0Tu6Z3k.png) ![0009.png](//image.lceda.cn/pullimage/vIGrhwKgEVjX4Z0VhV4YkLs1DGLnB8hRjvaJF6Tj.png) | 10RMB或20RMB |
| 面包板 | ![0005.png](//image.lceda.cn/pullimage/Ek85Yyjts1oOj2bsqNC5K7u7W0dekpnTQsX0OIhI.png) | 4RMB |
| 杜邦线、洞洞板、轻触开关 | ![0006.png](//image.lceda.cn/pullimage/P6uV65KYq32FU8jpEbRdyDzB8SAZAuw8Sr0Wa10r.png)![0007.png](//image.lceda.cn/pullimage/Z5GKzX7M01RSENSBz2zOQFebP0BGVAgZE084fJYP.png)![0010.png](//image.lceda.cn/pullimage/UvoiRsQFG7NqAVwgeahva797lUUIU55pcXfa9Xdz.png) | 3RMB |
### 准备一块带有Atmega32U4芯片的Pro Micro开发板,烧录工具可以选择USBISP下载器或者Arduino UNO开发板(两种工具有两种烧录方法,下文有详细介绍),面包板用来搭建简易电路。
# 第二步 准备boot loader
### 这一步我找到两种方法,第一种比较麻烦,是通过Arduino IDE准备好boot loader,需要下载软件并进行相应的配置;第二种较为方便,直接从Github上下载HEX文件(也可以直接从附件中下载🚿),下面我详细讲解一下第一种方法。
## 在线安装开发板
### 1.下载[Arduino IDE](https://www.arduino.cc/en/software/OldSoftwareReleases#00xx)(我用的是版本是1.8.18)并安装驱动后打开
### 2\. 打开首选项(下面的报错不用管)
![0013.png](//image.lceda.cn/pullimage/lS9nFBuqEQH21mKvfbrRRUznvSaUQdgI6pz08Qpn.png)
### 3\. 打开管理器网址,将下面的代码复制上去
> https://raw\.githubusercontent\.com/MrBlinky/Arduboy\-homemade\-package/master/package\_arduboy\_homemade\_index\.json
![0014.png](//image.lceda.cn/pullimage/tANsGchF6mfdDD8ReklqgcMyvoy6Yn8YMhoTWjas.png)
### 4.打开开发板管理库
![0016.png](//image.lceda.cn/pullimage/fwf5L034e6y2ByaGrSVEOhlxu4iTXmXkgko4isZX.png)
### 5.搜索并安装 *arduboy*(我这里已经安装好了)
![0017.png](//image.lceda.cn/pullimage/FS8Bnd7RhIlaoo2nIXWVKBE2foNEjdFFu8HI1aFi.png)
### 6.此时Arduboy的开发板就安装好了,这样我们就有我们需要的boot loader了
![0016.png](//image.lceda.cn/pullimage/ZwfhdQZYA5ioRWtQdkTdiiqv0L8uIBtgwauoqeix.png)
## 离线安装
### 如果在线安装显示安装出错😰,那就离线安装开发板
### 1.下载附件中的 *离线安装开发板* 安装包并解压
### 2.打开Ardino IDE文件
![0028.png](//image.lceda.cn/pullimage/ifK5vfSPzq8kjcdz0TZD0y4bt2yH2tI7KZ9hBqpo.png)
### 3.将压缩包中的 *package\_arduboy\_homemade\_index\.json* 文件复制到[Arduino15]文件夹
![0021.png](//image.lceda.cn/pullimage/Nm02WaakEffinMYQ2S79C1nBFpKYXGp3cYt68c5e.png)
### 4.将压缩包里[board-package]文件夹里的压缩包全部复制到 Arduino15\staging\packages 文件夹里
![0023.png](//image.lceda.cn/pullimage/comTy9hDiogYdZpMSLXvgGArzTrIKIBT3BM1CF1b.png)
### 5.重新打开Arduino IDE后即可在开发板管理器中找到arduboy开发板
# 第三步 上传boot loader
### 这一步我总结了两种上传方式,第一种是使用刚刚配置好的 **Arduino IDE+Arduino UNO** 烧录;第二种是使用 **Progsip+USBISP** 烧录(Progsip可在附录中下载)。
### 1.Arduino IDE+Arduino UNO烧录boot loader(美味)
* ### 首先打开Arduino IDE,打开示例中的 **ArduinoISP**,然后将UNO与电脑连接。
![0029.png](//image.lceda.cn/pullimage/YLTPUXHrmySiu8b1a6uKdCdfPinmEWxKmp5wKyJd.png)
* ### 配置完开发板后上传即可,然后Arduino UNO就能够对其它开发板进行编程了
![0030.png](//image.lceda.cn/pullimage/XFfahNO3tq64MQXPk9FGFb5kK4PPZiZfKZzV9lLx.png)
* ### Arduino UNO与Pro Micro连接(接完一定要仔细检查,确保准确无误)
| Arduino UNO | Pro Micro |
| :---------: | :-------: |
| VIN | 3V3 |
| P11(MOSI) | MOSI |
| P12(MISO) | MISO |
| P13(SCK) | SCK |
| P10(SS) | RST |
| GND | GND |
* ### 配置完开发板点击烧录引导程序
![0032.png](//image.lceda.cn/pullimage/6NascbyrLMgjxsn2nGIo4p2sY4goLHM3Glj7HJax.png)
* ### 如何知道是否正确烧录了boot loader呢?可以提前将0LED与Pro Micro开发板连接起来,当boot loader烧录完成了屏幕上就会出现 **USB boot** 的图标(当时我的OLED不显示USB图标,花了挺长时间去排查,查资料说是厂商硬件问题,OLED的CS脚接GND后可以正常显示,我将OLED的CS脚接地后就可以显示了,如果你没有遇到这个问题请直接忽略这段话)
| Pro Mcro | OLED |
| :------: | :---: |
| GND | GND |
| VCC | VDD |
| SCK(P15) | SCK |
| MOSI(P16) | SDA |
| RST | RES |
| DC(P2) | DC |
| GND | CS |
![0033.png](//image.lceda.cn/pullimage/dHRxJSIS99b1fXzYPvor6IG5wg3KiG8UD2bfvDHF.png)
# 第四步 上传游戏
### 烧录好boot loader后我们就可以上传单个游戏HEX文件到Pro Micro 开发板上,因为我这里没有单独的存储模块,所以这一步我就不演示上传单个游戏了,我总结以下三种上传方式作为参考:
### 方法一: Progsip + USBISP(只能上传单个游戏)
* ### 打开Progsip,将Pro Micro开发板和USBISP连接
| USBISP下载器 | Pro Micro开发板 |
| :-------: | :----------: |
| MOSI | MOSI |
| MISO | MISO |
| VCC | 5V |
| RST | RES |
| SCK | SCK |
| GND | GND |
* ### 接着调入HEX文件
![0053.png](//image.lceda.cn/pullimage/2jUnaermhs1CjPL2b57HiZzP9Ap4eQBlDeEIP4Ur.png)
* ### 配置好熔丝后关闭,点击【自动】即可上传
![0054.PNG](//image.lceda.cn/pullimage/cstrT8jPdYg4UBlDGUuDJ47dEuyDiFh9I4Rgp4CT.png)
### 方法二: Arduino IDE(只能上传单个游戏)
* ### 这个需要有游戏的源码,编译后通过UNO上传到开发板上(源码我暂时没有找到,不过你可以自己写游戏源码)
### 方法三:<font color=Cyan>TYPE\-C \+ Python(上传单个游戏和游戏合集的制作\+上传)</font>
* ### 这里我们直接利用第三种方法上传游戏合集,这种方式需要Mr.Blinky制作的python脚本,具体内容见 <font color=Crimson>第八步</font>
# 第五步 测试游戏
### 简单来说就是通过面包板将Pro Micro开发板和轻触按键连接起来测试能否控制游戏运行,主要为了确保原理图没有错误。这里我用第四步中的第一种方法上传,下图所示中因为当时我没有大一点的面包板,所以将按键焊接在洞洞板上再插到面包板上。
![0061.gif](//image.lceda.cn/pullimage/8gudOeeZXC4r782OW8v0E7du9AcJZCAlENddb6mq.gif)
# 第六步 立创EDA 启动
### 好!到这里我们的所有准备工作就做完了,看到这里如果累了的话喝杯水休息一下,接下来!我们就可以安心的画图打板焊接了!原......啊不对!立创EDA!启动
![0034.png](//image.lceda.cn/pullimage/AtVrO6et5yCjdn0zYmU0vtgfFAEl0X4gYgQ4laPh.jpeg)
### 我参考并结合了国外创客和LiLinBai的原理图,做了些修改,
* #### 电源接口:使用常见的Type-C 16P作为电源接口,同时可以上传游戏合集,<font color=Red>**注意:焊接的时候别漏焊、虚焊、连锡,能用铁板烧就用铁板烧,焊接完一定要用万用表检查一下D+和D-是否短路或者是否与焊盘连接好了,不然后面使用数据线上传游戏合集的时候电脑识别不到芯片(我被这个问题搞惨了😂)**</font>
![0035.png](//image.lceda.cn/pullimage/InpE6ziPS4yVr0Pu73uxZBnLydN9oUUWM0RIz8A4.png)
* ### 一键开关机功能:SAM8108可实现高低电平状态的转换,输出给到稳压芯片SGM2036的使能端,从而控制整个系统电源的通断,网络标签PW同时给到两个芯片的电源输入端,肖特基二极管保证了只有其中一个电源进行供电。我找到了输入电压范围为1.6V-4.5V的SGM2036,输出3.3V电压。还有一件事!这两个芯片便宜,淘宝就能买到👀。
![0036.png](//image.lceda.cn/pullimage/5CvTnSIrnjTDp20Tgsv9fDnI5BhIQNJa2aA2GapZ.png)
* ### 锂电池充电电路:经典TP4056
* ### 电源切换电路:当外部电源接入,栅源电压差不满足导通条件,外部电源对系统供电的同时对锂电池进行充电,电源指示灯LED3常亮,充满电后LED3熄灭LED4常量;外部电源移走后,栅漏电压满足导通条件,锂电池作为电源对系统进行供电。
![0037.png](//image.lceda.cn/pullimage/lFc3P2sQT3OegwIe5gt84XelYBqHdS1psq8X7GGy.png)
* ### 主控电路:我买的芯片封装是VQFN,用烙铁焊挺舒畅的😁(TYPE-C 16P,我的一生之敌)
![0039.png](//image.lceda.cn/pullimage/Br0jaUb87CkY3XL5qIPTJ52FShLjqJuhiHa78a0i.png)
* ### OLED换成1.3寸(0.96寸的是真的费眼睛),根据数据手册改一下外部元件参数即可
![0040.png](//image.lceda.cn/pullimage/icmGzfAKZneNjymcB6g3TtAwXPcBRCIHRXqJDsv4.png)
* ### 存储芯片:存储空间16M Byte,足够存储上百个游戏
![0041.png](//image.lceda.cn/pullimage/AxIUHdWMz7sPIHUHbN76V71Y0NsAdJiqyqWrhvJV.png)
* ### 这个预留接口以通孔的形式放置在PCB上,如果你是直接买的是单独的芯片,可以通过一些较细的测试针或者单股导线来烧录boot loader(烧录方法参考上文)
![0042.png](//image.lceda.cn/pullimage/aoOkn1ktbcz2yewXmfwrk3Ji7TlNBKWsgH2UIb5U.png)
![1701840389741.png](//image.lceda.cn/pullimage/dkz6SA4uUczhW9ridYHVVIiPh760kwfc4pDlkfPj.jpeg)
* ### 控制按键换成摇杆开关,三个静音按键用作A、B键和复位键,开关按键控制开/关机。
![0038.png](//image.lceda.cn/pullimage/DbjLqW6Zd15koaxPYXpwnv1TUvB5ncObafkSiOVn.png)
### <font color=Red>**绘制完原理图一定要仔仔细细地检查,然后再去画PCB**</font>
# 第七步 BOM下单 打板 焊接 组装
### 都快2024年了!不会还有人不知道[嘉立创免费打板](https://www.jlc.com/newOrder/#/collectCoupons)吧?👈
![0056.png](//image.lceda.cn/pullimage/pm3Y4wJqUfHoDMOLc6939Qv8exk8Ui4LqHYlPlWV.jpeg)
### 记得先(薅)领完🐑免费打样券再去打板,焊接时注意安全。
# 第八步 <font color=MediumVioletRed>制作游戏合集并上传</font>
### 这位创友😛都看到这里了,不收藏+点赞+关注一下?👅
### <font color=Red>如果你想直接开玩的话,直接下载附件里我制作的游戏包或者其他创客的游戏包进行上传,也可以直接到文章末使用Arduboy Toolset工具更快的上制作上传游戏合集</font>;如果你想自己制作自己喜欢的游戏合集并上传到Aduboy上,请看下文:
* #### 根据Mr.Blinky的read.m文件中的指示,我们先要下载符合自己电脑操作系统的[python 3.7](https://www.python.org/downloads/windows/https:/www.python.org/downloads/windows/),
* #### 首先创建一个文件夹,在里面再创建几个文件夹用来给游戏分类,然后新建一个文本文件,后缀名为 ***.csv*** ,接着将flashcart-builder.py和flashcart-writer.py两个脚本复制到这里(脚本在附录)
![0057.png](//image.lceda.cn/pullimage/JggIFiOn0l4FsWG7Ps2Y6hCBJVFhlNdmPwR2dM8i.png)
* #### 安装下面两个插件:[win+r]调出命令窗口,分别输入下列代码回车即可安装
```
python -m pip install pillow
```
```
python -m pip install pyserial
```
* #### 我之前用win10安装这两个插件遇到一堆问题,但是用win11安装就很顺利😂。安装完后如下图显示
![py.png](//image.lceda.cn/pullimage/dYVQpi3O1pmBbKU5h42FerGusT0BugIto5RmWAwB.png)
* #### 接下来制作游戏合集,用记事本打开我们刚刚创建好的 ***arduboy.csv***,因为制作游戏文件主要用到游戏图片和游戏HEX文件,所以我们在[Erwin's Arduboy Collection](https://arduboy.ried.cl/)下载游戏HEX文件并在[模拟器](https://felipemanga.github.io/ProjectABE/)上运行游戏并截屏,HEX文件和游戏图片放在游戏种类文件夹里,<font color=Red>游戏图片直接右键另存为PNG格式即可</font>这样方便制作游戏合集。
![0044.gif](//image.lceda.cn/pullimage/fuMbW1OlgXDgbuGeYTrAXi5XnNXo2Dajb6ST6G21.gif)
* #### <font color=Red>注意!!!每一个游戏文件夹里都要包含游戏HEX文件和游戏图片</font>,还有就是你的图片的分辨率必须是<font color=Red>128x64,图片颜色最好是黑白的</font>,处理方式有很多,自行选择。下面我下载一个射击游戏和一个动作游戏为例演示一下
![0047.png](//image.lceda.cn/pullimage/7n4tZO9FuqgVXVcQkmGGUz0zK5gjrmqF3ShpD9OS.png)
* #### <font color=Red>重要!!!接着用记事本打开 Game.csv 文件</font>,按照下图格式编写完后保存 (附件有我的.csv文件做参考) 下图看不懂的话请评论区留言,我每天都会查看或者[如何制作游戏合集并打包](https://www.bilibili.com/video/BV1gY411h7CH/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=a506be89ba4ff25b0e4862b1407134d2)
![0048.png](//image.lceda.cn/pullimage/moTxjvh4ahPIOBgJ7718O2QeuuId0iAhsmbv7fqD.png)
* #### 接着在 ***游戏合集*** 这个文件夹内搜索栏输入\*\*\*cmd\*\*\*后回车,输入`python flashcart-builder.py Game.csv`后回车进行打包,打包信息也会显示在界面上。
![0049.gif](//image.lceda.cn/pullimage/fkIGCP1WIDy84dZanzfSjet5njeWTogIhsFs0N2f.gif)
* #### 接着我们将制作好的Arduboy通过USB连接到电脑,同时记得按下开关机键对系统上电,不然电脑识别不到芯片(曾经我一度怀疑我的焊接技术,最后没想到是没有开机😂)
![0050.png](//image.lceda.cn/pullimage/9ldLR47Xf9gg6q2G5uy9CnrvTZHxhsch3PCoW6IT.png)
* #### 接着在命令窗口再次输入`python flashcart-writer.py game-image.bin`后回车就会上传游戏合集,你可以将你喜欢的游戏加入到文本里打包并上传。
![0051.gif](//image.lceda.cn/pullimage/0ybGN5LOjaauQ9UdcZGRElEE41EJr5tNrIcjWU94.gif)
* #### 稍微加点东西进去
![0052.gif](//image.lceda.cn/pullimage/BaeTPaUFV9c3KXQJ0rbLatNpPEm2Ctvk19dG5PsB.gif)
* #### Mr.bilnky还制作了一个GUI脚本,也可以用来上传打包好游戏合集,一并放在了附件
![0051.png](//image.lceda.cn/pullimage/L5yob6LIzo8NzcbyEgl9EYxd0Nn2glgnkqy9Zacj.png)
* ### 到这里Arduboy的整个制作过程就完成了,恭喜你坚持到了这里!,现在你也有自己的Arduboy了。
## <font color=MediumVioletRed>Arduboy Toolset工具简单使用</font>
### 这个工具也是比之前的GUI脚本更方便,不但可以上传游戏合集,还可以在线选择目前已有的arduboy游戏并上传到设备上,还能直接在线制作并打包游戏合集,效率提升了很多!!!
![0058.png](//image.lceda.cn/pullimage/nvBBQX61kE3fFXBbLZrgKBlRgMsrEd4Smiaz1mp9.png)
* ### 在线上传游戏合集![0064.png](//image.lceda.cn/pullimage/QCg0mmY4uZSCXuJH1Y0chCqc0AxDrE1ezy1BRRhk.png)
![0060.png](//image.lceda.cn/pullimage/Jvk0tbgv9qE4F2uHGdPat7puNU2fDLWVKZiE0yDx.png)
* ### 在线选择和更新游戏
![0061.png](//image.lceda.cn/pullimage/jRplPPsmd54brrljupoNs3L4IbM48nucsztaAmA2.png)
* ### 更新游戏机里原有的游戏;在线选择游戏
![0062.png](//image.lceda.cn/pullimage/S1CvfvpNNTgOGXl76rc6POwMi4zKN8WSxH5QkwnA.png)
* ### 选择全部后选择更新
![0063.png](//image.lceda.cn/pullimage/aazScDJgwqHmnUL3wdXivQ8cNYxy7PtJSxd8GKNN.png)
* ### 点击OK后等待一会
![0064.png](//image.lceda.cn/pullimage/IOsar0RXrgDHLMzZyPF7AzsCrSc44arNakoVTLox.png)
* ### 可以看到最下面显示已经添加了431个游戏
![0065.png](//image.lceda.cn/pullimage/4o7yVdS3Q9EH9bq8OMuNsEAzqp4kdTq5fIylsdzZ.png)
* ### 然后直接上传游戏合集就OK了
![0066.png](//image.lceda.cn/pullimage/ut8Tctx4DwXb4o9ioI2hTEn8VaNAS7tUcTGKGCGu.png)
# 写在最后
### 本工程的原理图和PCB都是经过验证并且没有问题,请放心地参考和打板,同时也期待你有更好的优化方案。
# 参考资料
### 1️⃣如果制作过程中遇到问题的话可以去[Arduboy官网](https://www.arduboy.com/)或者[Arduboy官方论坛](https://community.arduboy.com/)去寻找解决方法(很有用!)
### 2️⃣[\[入门\]使用USBasp给arduino烧写bootloader](https://mc.dfrobot.com.cn/thread-10202-1-1.html)
### 3️⃣[Arduboy PC仿真器使用](https://blog.csdn.net/weixin_37127273/article/details/108408396)
### 4️⃣[如何将游戏上传到Arduboy和500游戏到Flash-cart:8个步骤](https://cn.thesouthshow.com/42158-How-to-Upload-Games-to-Arduboy-and-500-Games-to-Fl-37#google_vignette)(可能打不开)
116
198
收藏到专辑