raspberry pi
我不时地怀念80年代末和90年代孩童时期玩的电子游戏。 尽管我的大多数旧计算机和游戏机已不复存在,但我的Raspberry Pi可以完成我的复古游戏修复。 我喜欢Raspbian中包含的简单游戏,开源的RetroPie项目帮助我将Raspberry Pi变成了先进的复古游戏机。
但是,为了获得更真实的体验(例如,回到过去),我需要一个游戏手柄。 市场上有很多USB游戏手柄和操纵杆的选择,但是作为开源发烧友,制造商和工程师,我更喜欢用艰辛的方式来做。 因此,我制作了自己的简单开源硬件游戏手柄,并将其命名为ANAVI Play pHAT 。 我使用EEPROM和为映射键而创建的devicetree二进制覆盖图将其设计为Raspberry Pi的附加板。
获取游戏手柄按钮和EEPROM
有多种游戏手柄可供购买,其中有些真的很复杂。 但是,使用我创建的设计制作类似于标志性NES控制器的游戏手柄并不难。
游戏手柄使用八个“瞬时”按钮(即,只有在按下时才激活的开关):四个用于移动的触觉(轻触)开关(上,下,左,右),两个用于A和B的轻触按钮,以及两个较小的轻触按钮,用于选择和启动。 我使用了通Kong轻触开关:六个用于移动的6x6x4.3mm开关以及A和B按钮,以及两个用于开始和选择按钮的3x6x4.3mm开关。
尽管游戏板的主要目的是玩复古游戏,但附加板却足够大,可以包括家庭自动化功能,例如监视温度,湿度,光照或气压,您可以在不玩游戏时使用这些功能。 。 我添加了三个插槽,用于将I 2 C传感器连接到物理引脚3和5上的主要I 2 C总线。
硬件设计中最有趣,最重要的部分是EEPROM(电可擦可编程只读存储器)。 通Kong安装的EEPROM更容易在面包板上闪烁并焊接到游戏板上。 MagPi杂志上的文章建议使用CAT24C32 EEPROM。 如果该型号不可用,请尝试查找技术规格相似的型号。 2014年之后发布的所有Raspberry Pi型号和版本(Raspberry Pi B +及更高版本)在物理引脚27和28上都具有辅助I 2 C总线。
有了此硬件后,请使用试验板检查其是否正常运行。
创建印刷电路板
下一步是创建印刷电路板(PCB)设计并进行制造。 作为一个开源爱好者,我相信应该使用免费和开源软件来创建开源硬件。 我依靠KiCad ,这是GPLv3 +许可下的电子设计自动化(EDA)软件。 KiCad可在Windows,MacOS和GNU / Linux上运行。 (我在Ubuntu 18.04上使用KiCad版本5。)
KiCad允许您创建多达32个铜层以及14个固定用途技术层的PCB。 它还具有集成的3D查看器。 它是积极开发的,包括CERN开发人员的许多贡献,并用于工业应用; 例如,Olimex使用KiCad设计多层的复杂PCB,就像其TERES-I DIY开源硬件笔记本电脑中的那样。
KiCad工作流程包括三个主要步骤:
- 在逻辑示意图布局编辑器中设计逻辑示意图
- 绘制边缘切口,放置元件并在PCB布局编辑器中布线
- 导出Gerber和钻探文件以进行制造
如果您以前没有设计过PCB,请记住学习曲线会很陡。 浏览KiCad提供的示例和用户指南 ,以了解如何使用原理图和PCB布局编辑器。 (如果您不想从头开始做所有事情,则可以在我的GitHub存储库中克隆ANAVI Play pHAT项目。)
![KiCad示意图 KiCad schematic](https://i-blog.csdnimg.cn/blog_migrate/6934bea5c58949b7966233924953acca.png)
在KiCad的的示意性布局编辑器,树莓裨的GPIO等连接到按钮,槽用于传感器到主I 2 C,和EEPROM到辅助I 2 C.指派适当足迹到每个组件。 执行电气规则检查,如果没有错误,则生成网表 ,该网表描述了电子电路的连接性。
打开PCB布局编辑器。 它包含几层。 阅读网表。 所有组件和走线必须位于正面和底部铜层(F.Cu和B.Cu)上,并且必须在Edge.Cuts层中创建板的形式。 任何文本,包括按钮标签,都必须在丝网印刷层上。
![可印刷电路板设计 Printable circuit board design](https://i-blog.csdnimg.cn/blog_migrate/b2910afb62f7484b72ee10b888be3593.png)
最后,导出Gerber并钻取您将发送给生产PCB的公司的文件。 Gerber格式是PCB的事实上的行业标准。 它是2D二进制图像的开放ASCII矢量格式。 简而言之,它就像是用于PCB制造的PDF。
有许多公司可以制作像游戏手柄这样的简单的两层板。 对于一些原型,您可以依靠美国的 OSHPark或欧洲的Aisler 。 也有很多中国制造商,例如JLCPCB,PCBWay,ALLPCB,Seeed Studio等。 另外,如果您希望省去PCB制造和采购组件的麻烦,则可以从Crowd Supply订购ANAVI Play pHAT制造商套件,并自行焊接所有通Kong组件。
了解设备树
Devicetree是用于描述硬件组件的软件数据结构的规范。 其目的是允许编译后的Linux内核处理更广泛的体系结构家族中的各种不同的硬件配置。 引导加载程序将设备树加载到内存中,并将其传递给Linux内核。
设备树包含三个组件:
- Devicetree源(DTS)
- Devicetree Blob(DTB)和覆盖(DTBO)
- Devicetree编译器(DTC)
DTC从文本源创建二进制文件。 设备树覆盖允许将中央DTB覆盖在设备树上。 覆盖图包含许多片段。
几年来,所有新的ARM片上系统(SoC)都需要设备树,包括所有Raspberry Pi型号和版本的Broadcom SoC。 使用Raspberry Pi流行的Raspbian发行版中的默认引导加载程序,可以使用关键字device_tree =在可引导microSD卡的FAT分区上的配置文件( config.txt )中设置DTO。
自2014年以来,Raspberry Pi的排针已经扩展到40个排针。 引脚27和28专用于辅助I 2 C总线。 这样,可以从连接到这些引脚的EEPROM自动加载DTBO。 此外,可以将其他系统信息保存在EEPROM中。 此功能是Raspberry Pi Foundation对任何Raspberry Pi HAT(顶部附有硬件)附加板的要求之一。 在Raspbian和Raspberry Pi的其他GNU / Linux发行版上,启动后,可以从用户空间/ proc / device-tree / hat /中看到EEPROM的信息。
我认为,设备树是过去十年中Linux生态系统中最引人入胜的功能之一。 创建devicetree blob和覆盖图是一项高级任务,需要一些背景知识。 但是,可以为Raspberry Pi附加板创建devicetree二进制覆盖图,并在适当的EEPROM中对其进行闪存。 设备二进制覆盖图定义了游戏手柄每个键的Linux键代码。 结果是Raspberry Pi的游戏手柄,其按键在您启动Raspbian时就可以使用。
创建DTBO
创建游戏手柄的设备树二进制覆盖图的三个主要步骤:
- 使用基于Linux密钥代码的密钥映射创建devicetree源
- 使用devicetree编译编译devicetree二进制覆盖
- 使用Raspberry Pi Foundation提供的开源工具创建.eep文件并将其刷新到EEPROM中
Linux密钥代码在文件/usr/include/linux/input-event-codes.h中定义。 设备源文件应描述哪个Raspberry Pi GPIO引脚连接到哪个硬件按钮,以及在按下按钮时应触发哪个Linux键代码。 在此游戏手柄中,GPIO17(引脚11)连接到右侧的触觉按钮,GPIO4(引脚7)连接到左侧,GPIO22(引脚15)连接到向上,GPIO27(引脚13)连接到向下,GPIO5(引脚29)连接到启动, GPIO6(引脚31)到选择,GPIO19(引脚35)到A,GPIO26(引脚37)到B.
请注意,GPIO编号与插头在接头上的物理位置之间存在差异。 为了方便起见,所有引脚都位于Raspberry Pi 40引脚接头连接器的第二行。 这种方法使在KiCad中布线印刷电路板更加容易。
GitHub上提供了游戏手柄的整个devicetree源代码。 例如,以下是一个简短的代码段,演示了如何将与Raspberry Pi上物理引脚11对应的GPIO17映射到Right的轻触按钮:
button@17 {
label = "right";
linux,code = <106>;
gpios = <&gpio 17 1>;
};
要直接在Raspberry Pi上编译DTS,请在终端中执行以下命令,在Raspbian上安装devicetree编译器:
sudo apt-get update
sudo apt-get install device-tree-compiler
运行DTC并提供输出DTBO的名称和源文件的路径作为参数。 例如:
dtc -I dts -O dtb -o anavi-play-phat.dtbo anavi-play-phat.dts
Raspberry Pi Foundation为GitHub存储库提供了HAT的机械,硬件和软件规范 。 它还包括三个非常方便的工具:
- eepmake:使用设置从文本文件创建一个.eep文件
- eepdump:对调试很有用,因为它会将二进制.eep文件转储为人类可读的文本
- eepflash:将.eep二进制映像写入EEPROM或从中读取。
eeprom_settings.txt文件可以用作模板。 Raspberry Pi Foundation和MagPi杂志提供了有用的文章和教程,因此我不会赘述太多。 就像我在上面写的,推荐的EEPROM是CAT24C32,但是可以用任何具有相同技术规格的EEPROM替换。 对于爱好者来说,使用带有八针,通Kong,双列直插式(DIP)封装的EEPROM较容易,因为它可以用面包板完成。 以下示例命令创建了一个文件,准备使用Raspberry Pi GitHub存储库中的eepmake工具在EEPROM中进行刷新 :
./eepmake settings.txt settings.eep anavi-play-phat.dtbo
在继续闪烁之前,请确保EEPROM已正确连接到Raspberry Pi上的主要I 2 C总线(引脚3和5)。 (您可以查阅上面链接的MagPi杂志文章,以获取有关接线原理图的讨论。)然后运行以下命令,并按照屏幕上的说明在EEPROM中刷新.eep文件:
sudo ./eepflash.sh -w -f=settings.eep -t=24c32
在将EEPROM焊接到印刷电路板上之前,将其移至试验板上的次级I 2 C总线并进行测试以确保其能够按预期工作。 如果在测试面包板上的EEPROM时发现任何问题,请更正设置文件,将其移回主要I 2 C总线,然后再次刷新。
测试游戏手柄
有趣的来了! 现在该使用Raspbian测试附加板了,您可以从RaspberryPi.org 下载该附加板。 引导后,打开终端并输入以下命令:
cat /proc/device-tree/hat/product
cat /proc/device-tree/hat/vendor
输出应类似于以下内容:
![测试输出 Testing output](https://i-blog.csdnimg.cn/blog_migrate/e18c33b31a3b02fd2c2c7aae641ee669.png)
如果是的话,恭喜! 已成功读取EEPROM中的数据。
下一步是验证Play pHAT上的按键是否正确设置并且可以正常使用。 在终端或文本编辑器中,按八个按钮中的每个按钮,并验证它们是否按配置进行操作。
最后,该玩游戏了! 默认情况下,Raspbian的桌面包括Python Games 。 从应用程序菜单启动它们。 进行音频输出选择,然后从列表中选择一个游戏。 我最喜欢的是蠕虫般的蠕虫游戏。 作为一名前Symbian移动应用程序开发人员,我发现玩Wormy带回了诺基亚辉煌时期的回忆。
RetroPie的复古游戏
![带Play pHAT的RetroPie RetroPie with the Play pHAT](https://i-blog.csdnimg.cn/blog_migrate/b1baab50cef051f15cc10fbd074c3814.png)
Raspbian很棒,但是RetroPie为复古游戏迷提供了更多功能。 它是为玩复古游戏而优化的GNU / Linux发行版,结合了开源项目RetroArch和Emulation Station。 它适用于Raspberry Pi, Odroid C1 / C2以及运行Debian或Ubuntu的个人计算机。 它提供了用于加载ROM(游戏盒的数字版本)的仿真器。 请记住,由于版权问题,RetroPie中不包含ROM。 在启动RetroPie之后,您将必须找到合适的ROM并将其复制到Raspberry Pi。
开源硬件游戏手柄在RetroPie的菜单中可以正常工作,但是我发现启动某些游戏和模拟器后按键会失败。 调试之后,我找到了一种确保它们在游戏模拟器中正常工作的解决方案:添加Python脚本以进行按键的其他软件仿真。 该脚本在GitHub上可用。 这是如何获取它并在RetroPie上安装Python的方法:
sudo apt-get update
sudo apt-get install -y python-pip
sudo pip install evdev
cd ~
git clone https://github.com/AnaviTechnology/anavi-examples.git
最后,将以下行添加到/etc/rc.local中,以便在RetroPie引导时自动执行:
sudo python /home/pi/anavi-examples/anavi-play-phat/anavi-play-gamepad.py &
而已! 完成这些步骤后,您可以创建一个完全开源的硬件游戏手柄,作为带有40针接头的任何Raspberry Pi型号的附加板,并将其与Raspbian和RetroPie一起使用!
下一步是什么?
将免费和开源软件与开源硬件相结合虽然很有趣,但并不困难,但是需要大量时间。 在业余时间创建了开源硬件游戏手柄之后,我在我的家乡保加利亚普罗夫迪夫的Crowd Supply进行了适度的众筹活动,以进行小批量制造。 开源五金制品协会认证的ANAVI播放PHAT作为在开源硬件项目BG000007 。 甚至用于保护电路板免受灰尘侵害的丙烯酸外壳 ,都是使用免费开源软件OpenSCAD创建的开源硬件。
![压克力外壳游戏垫 Game pad in acrylic enclosure](https://i-blog.csdnimg.cn/blog_migrate/f36499ed394f170d1e3346a9fed235f8.jpeg)
如果您喜欢阅读本文,建议您尝试使用KiCad为Raspberry Pi创建自己的开源硬件附加板。 如果您没有足够的业余时间,则可以订购ANAVI Play pHAT制作工具套件 ,拿起烙铁并组装通Kong组件。 如果您对烙铁不满意,则可以订购完全组装的烙铁。
大家复古游戏快乐! 下次有人烦躁地问您可以从玩老式计算机游戏中学到什么,向他们介绍Raspberry Pi,开源硬件,Linux和devicetree。
翻译自: https://opensource.com/article/19/3/gamepad-raspberry-pi
raspberry pi