使用ESP32C6开发板和自制的3D打印零件,从零开始制作一个Xbox手柄
这是我自制的一款Xbox手柄,完全从零开始制作。它以ESP32-C6开发板作为主MCU,搭配定制的按键板、模拟摇杆以及特制外壳,打造了一款DIY无线Xbox手柄。
使用这款手柄就像使用任何Xbox手柄一样,只需通过蓝牙配对,打开Steam,设置按键映射,然后就可以用它来玩游戏了。
在演示过程中,我试玩了《Broforce》和《辐射:新维加斯》,两者都运行良好。
本文将介绍该项目的完整构建过程。让我们开始构建吧。
所需材料
本项目所使用的组件如下
•定制PCB(由PCBWAY提供)
•ESP32 C6 开发套件 V1
•4x44 触摸开关
•12x1222 按键开关
•M2螺丝
•模拟摇杆扩展板
•3.7V 500mAh 14500锂离子电池
•PCM模块
•手持式TIG焊机
•3D打印零件
设计
在设计我们的控制器时,我希望采用一个简洁的设计,遵循Xbox手柄的按键布局。我基本保持了按键布局不变,但将整体造型从传统的手柄设计改为圆润的长方体形状,并带有弧形背部。该设计极简,为了美观,我计划使用两种颜色打印部件。
整个设计均使用 Autodesk Fusion 360 创建。
零件
我们从将所有硬件(如ESP32板、模拟摇杆、开关PCB和锂电池)排列成类似普通Xbox手柄的布局开始设计过程。按钮和摇杆的位置严格遵循了Xbox手柄的布局,其余组件则根据其在设计中的最佳位置进行布置。
根据这一布局,外壳被设计成围绕组件排列的结构。
XBOXBOXBOX 按键 SUDO PCB
现在来一个巧妙的小技巧:你知道吗?你可以用3D打印自己制作的PCB。虽然不是完整的PCB,但可以打印出能固定通孔元件的电路板。我正是这样设计了Xbox按钮的PCB。
为此,我在设计上加装了一个12×12的按钮,并添加了四个用于开关线缆的安装孔,以及两个额外的孔位,用于将电路板固定到控制器外壳上。
这里的思路是使用普通PLA打印这个电路板,将开关安装在上面,让开关的引脚固定住所有部件。然后在接线时,直接将电线焊接到开关的引脚上。这个“PCB”仅起到固定作用,确保开关能够稳固地安装到位。
3D打印部件
前后机身部分采用黑色PLA打印,所有按钮则使用红色PLA打印,以营造出红黑双色的视觉效果。
此处所有打印均使用HYPE PLA红色和黑色线材,所有部件均采用0.4毫米喷嘴、15%填充率、0.2毫米层高进行打印。
硬件
本项目所使用的硬件相当简单。我们以ESP32-C6开发板作为主控制器,该设备提供了大量GPIO引脚,其中大多数在本次构建中得到了使用。
我们还定制了D-pad和扳机按钮的PCB,用于作为按键输入板。
对于模拟控制,我们使用了从亚马逊购买的通用模拟摇杆,它们被用作控制器左右两侧的模拟摇杆。
PCB开关板
在本项目PCB设计中,我使用了两个专为类似项目设计的按钮板。这类项目需要添加按钮功能。其原理很简单:在PCB上放置多个按钮,将所有按钮的一侧连接到GND,另一侧则连接至一个接口,该接口可与微控制器相连接以获取按钮输入信号。
这些电路板主要用于类似本例的概念验证组装。电路板的布局、轮廓和按钮位置均根据开关板的CAD文件尺寸进行设计。
PCBWAY 服务
在完成设计后,我生成了PCB Gerber文件,并将其发送至PCBWay进行制作。我为触发器和D-pad的PCB都选择了紫色基板,搭配白色阻焊层。
质量非常出色,表面干净,丝网印刷清晰锐利,所有细节都与设计完美契合。
过去十年间,PCBWay凭借可靠的PCB制造和组装服务建立了良好声誉,已成为全球工程师和制造商的首选。
说实话,如果你在制作定制PCB时不考虑PCBWay,那只会让自己事倍功半。他们还提供CNC加工和3D打印服务。
PCB组装
这两个按钮板的组装过程也很简单,唯一需要的部件是一个4×4的按钮开关。在我们的制作中,需要两个四键板和两个双键板,总共12个按钮。每个按钮都逐一被放置到四个板上各自指定的位置。
之后,每块电路板都被翻转过来,我们使用焊锡笔将所有开关永久固定到位,完成了按钮板的组装过程。
电源组件
为了控制器的电源,我们希望使用比普通18650电池更小的电池。使用锂聚合物电池是一个选择,但它们的容量不足以支持设备长时间运行游戏。
相反,我们决定采用不同外形的锂离子电池。我们选用了14500电池,它本质上是18650电池的缩小版,容量约为前者的二分之一。
这里我们使用的是一个3.7V 500mAh的锂离子电池。
电池裸装,不带任何PCM电路。当锂电单体使用时,若没有专用的充放电电路,则必须配备PCM电路。该PCM电路可提供低通、高通和短路保护功能,以保护电池,防止其像鞭炮一样爆炸。
为了将PCM添加到电池单元中,我使用了一种新工具:便携式TIG焊机。这种工具在处理电池单元时非常实用,因为它能确保我们不会用烙铁直接接触锂电池的电极。使用高温烙铁触碰电极可能会损坏电池并降低其容量。
我们是如何将PCM与电池单元连接起来的:
•PCM预装有两条镍条。我们将PCM与电池单元一起放置,并裁剪掉镍条的多余部分。
•然后,我们将金属条与电池端子对齐进行弯曲。使用TIG焊机,先将镍条点焊到正极上。为了增强连接强度,我们进行了两到三个焊接点。
•之后,我们将电池翻转,并对负极重复同样的操作。
•连接完成后,我们把导线接到了PCM的P+和P−端子上,然后用万用表检查是否获得了输出电压。这确认了我们的电池工作正常。
这是为什么这个PCM很重要:我们将把该电池单元连接到ESP32开发板的5V输入端。这意味着当我们插入Type-C数据线时,电池会从5V开始充电。但如果电池电压超过4.2V,电池可能会发生爆炸。PCM可以防止这种情况发生。当电压达到4.2V时,它会切断B+和P+之间的连接,从而停止充电过程。
低压保护也是如此。当电池电压达到约2.2V时,PCM会切断电源,这是推荐的最低放电限值。
前部车身总成
我们从前面壳体内部开始组装,将方向键和XYAB按钮安装到相应位置。
接下来,将按钮板放在D-pad和XYAB按钮上,并与螺丝凸起对齐。然后,我们为每块PCB使用了四颗M2螺丝进行固定。
同样,模拟式操纵杆模块被安装在相应位置上,并使用M2螺钉固定。我们在此处采用了垫圈头螺钉,以确保操纵杆模块牢固固定。
XBOXBOXBOX 按键 SUDO PCB PCB PCB 装配
Xbox按钮已就位,我们在其上方放置了3D打印的开关PCB。对准两个安装螺丝凸起后,用两颗M2螺钉将其固定。
肩部与扳机按钮PCB
扳机键和肩部按键的按钮板已正确安装到位。
我们在顶部结构中设计了两条支撑肋条,使PCB板可以轻松滑入其中,并通过压力固定牢固地保持位置。
布线
这个设置的布线过程相当简单直接。在布线时,我们需要大量的跳线。我使用了单芯银涂层铜线,因为它与焊盘连接良好,而且由于是单芯线,因此不会出现单根导线焊接不牢而意外短路到相邻连接器的问题。
我们首先将所有按钮板和两个模拟摇杆的GND连接到ESP32-C6开发套件的GND引脚上。
接下来,将ESP32的3V3引脚连接到两个模拟摇杆的VCC引脚上。
联系
•将左摇杆X连接到GPIO0
•左摇杆 Y Y Y 轴连接至 GPIO1
•右摇杆X连接至GPIO2
•右侧摇杆 Y Y Y 轴连接至 GPIO3
按钮连接
•GPIO10 为 A A A 按钮
•GPIO11 为 B B B 按钮
•GPIO13 为 X X X 按钮
•GPIO18 为 Y Y Y 按钮
•GPIO15 为 LB LB LB 按钮
•GPIO23 为 RB RB RB 按钮
•GPIO6 为左摇杆点击(LSLS 点击)
•GPIO7 为右摇杆点击(RSRS 点击)
•GPIO8 为 Xbox Xbox Xbox 指南 / / 家庭按钮
代码与测试运行
这是我为这个项目准备的代码,很简单。
我们的草图将ESP32-C6开发套件转变为一个功能完整的无线游戏手柄。为此,我们使用了BleGamepad库,该库通过蓝牙的HID协议模拟出标准即插即用的Xbox风格无线控制器。
我们将代码上传到ESP32-C6开发套件,上传后在电脑上搜索时,设备显示为蓝牙游戏手柄。我们连接后打开了Gamepad Tester网站,这是一个测试有线和无线控制器的优秀工具。
每次我们按下按钮或移动摇杆时,都能看到它显示为按钮输入或轴向移动,从而确认设置正常工作。
最终组装
我们首先将锂电池的正负极连接到ESP32-C6的5V和GND引脚上,以开始最终组装过程。
随后,将ESP32-C6板放入后部机身的指定位置,并使用热熔胶枪将其固定。
接下来,将肩部和扳机按钮安装到前后两个机身部分。之后,将两个机身半部分拼接在一起,并使用四颗M2螺钉固定,完成装配过程。
我们的控制器现在已经完成了。
结果
这是我们构建的最终成果:一款可在 Windows 和 Mac 上使用的 Xbox Xbox 手柄。它甚至应该也能在 Linux 上运行,不过我还没测试过这一点。
要配对控制器,我们进入蓝牙设置,此时设备会显示为“无线控制器”。完成配对后打开Gamepad Tester,这是一款非常实用的网页游戏手柄测试工具。通过移动模拟摇杆和按下按钮,我们可以查看所有输入是否被正确记录,从而确认设置已完美生效。
接下来,我们打开 Steam。由于这个控制器默认不直接使用 XInput,而是作为无线 HID 控制器工作,因此我们需要先手动映射按键。进入 Steam 中的控制器设置,逐一为每个按键分配对应功能,跳过没有的按键,而我们的控制器只有两个按键。
完成映射后,只要我们将控制器与Steam配对,就能正常使用。甚至双击控制器上的Steam按钮,也能让Steam进入大图模式。
使用这个控制器,我们测试了两款游戏:《Broforce》和《辐射:新维加斯》。我注意到左右摇杆存在一定的输入延迟,但除此之外,其他功能似乎都运行正常。
现在,我的设计有个问题:它并不比Xbox手柄好。
当然,它确实能用,但看起来甚至不像一个廉价的商用控制器。它感觉非常像DIY产品,说实话,这完全没问题,因为它本身有其优势。最大的优势之一就是任何人都可以自己动手制作,并根据自己的需求进行定制。而且和大多数商用控制器不同,它是开源的。
这个项目更多是一个概念验证。未来,我会准备一个简化版本,减少布线,并将所有功能集成到一块单板上。可以不再使用ESP32开发套件,而是直接使用ESP32芯片本身。此外,还可以加入更高品质的摇杆和更优质的按钮。仍有很大的改进空间。
目前,这个项目已经完成。特别感谢你们一路支持到这一步,我很快就会带来一个新项目。
本文编译自hackster.io





