RRoy 发表于 2023-8-3 14:31:06

自制一个基于ESP32的蓝牙游戏手柄

通过这个项目,你会学习到如何设计一个面包板游戏手柄电路,学习如何将这个电路作为一个游戏手柄与Android设备、电视盒子、PlayStation和计算机通信。

正文开始!(文末有视频演示)
步骤1:Doit ESP32 Devkit V1开发板


在电路方面,我选择了低成本的Doit ESP32 Devkit V1开发板,它提供了无线通信选项,比如WiFi、蓝牙和ESP-NOW。

在这个项目中用的ESP32板模型总共有30个I/O引脚。有些型号有36个I/O引脚,并且尺寸较长。Doit ESP32 Devkit V1开发板可以通过VIN引脚以4V到12V的供电电压工作。

更多详细信息可以在这里找到:https://lastminuteengineers.com/esp32-pinout-reference/
步骤2:在面包板上构建电路






除了ESP32开发板外,游戏手柄电路还需要一个摇杆模块、按钮、电阻和一些导线。

[*]带有圆形盖的12mm按键开关
[*]用于按钮的4K7电阻
[*]XY摇杆模块
[*]Doit ESP32 Devkit V1开发板
[*]面包板
[*]跳线
步骤3:设置ESP32开发板


步骤:

1、从官方Arduino网站下载并安装最新版本的Arduino IDE。

2、打开Arduino IDE,转到"Preferences" > "Board Manager URLs",粘贴共享的ESP32包链接,然后点击确定按钮。





3、导航到"Tools" > "Boards Manager"。

4、在Boards Manager中搜索"ESP32"并安装ESP32板。



5、从"Tools" > "Board"菜单中选择合适的ESP32板。

附加的Boards Manager URL:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
步骤4:BLE GamePad和NIM BLE库的源码
源码包括一个叫做"BLE GamePad"的库。如果去库的GitHub页面,你可以找到详细的解释和示例。



转到“Add Library”搜索“BLE GamePad”库并安装它。这个库还需“NIM BLE”库。如果库已经安装,我们可以仔细研究一下源代码。







GitHub地址:https://github.com/lemmingDev/ESP32-BLE-Gamepad
步骤5:游戏手柄源码


共享的游戏手柄源代码包含了总共13个按钮,这些按钮定义了标准游戏手柄的关键功能。此外,源代码还提供了三种游戏手柄模式。

这个描述块包含了mods的关键名称以及不同游戏手柄mods的按钮编号。每个键名都有一个对应的引脚编号。
/*
* ANDROID游戏手柄
* {A=1, B=2, C=3, X=4, Y=5, Z=6, L1=7, R1=8, L2=9, R2=10,
* Select=11, Start=12, PS=13, L3=14 , R3=15}
*
* PS游戏手柄模式
* {SQUARE=1, X=2, CIRCLE=3, TRIANGLE=4, L1=5, R1=6, L2=7, R2=8,
* Select=9, Start=10, L3=11, R3=12, PS=13}
*
*/

"Buttons Pins"数组代表了在开发板上使用的物理按钮引脚。"Number Buttons"常量指定了按钮的数量,并包含了每个按钮连接的引脚的值。

int buttonsPins = {X_BUTTON, CIRCLE_BUTTON, TRIANGLE_BUTTON, SQUARE_BUTTON,
                        R1_BUTTON, R2_BUTTON, L1_BUTTON, L2_BUTTON,
                        START_BUTTON, SELECT_BUTTON, PS_BUTTON,
                        R3_BUTTON, L3_BUTTON};

"Android GamePad Buttons"数组包含了在Android GamePad模式下使用的按钮的有序列表。每个按钮都被分配了一个数字。比如,按钮"A"是数字1,按钮"B"是数字2。
int androidGamepadButtons = {1, 2, 3, 4, 8, 10, 7, 9, 12, 11, 13, 15, 14};


"PS GamePad Buttons"数组包含了在PlayStation GamePad模式下使用的按钮列表。
int PS1GamepadButtons = {2, 3, 4, 1, 6, 8, 5, 7, 10, 9, 13, 12, 11};

"PC GamePad Buttons"数组包含了在计算机游戏手柄模式下使用的按钮列表。

int PCGamepadButtons = {1, 2, 4, 3, 6, 8, 5, 7, 10, 9, 0, 12, 11};

"GamePad Mode"变量包含了当前的GamePad模式。默认情况下,分配了Android模式,但这个值可以在代码中后期更改。

GamepadModes gamepadMode = ANDROID;

让我们根据面包板电路中找到的组件来更新源码。电路中有4个按钮和一个摇杆模块,我将选择"Android Gamepad"模式来测试电路。定义电路上组件的引脚,游戏手柄应该调用的关键函数,并更新引脚编号。然后上传源码。

完整代码可以在文末下载。
步骤6:使用应用程序测试面包板电路




我使用“GamePad Tester”这款Android应用来查看和测试按钮和摇杆功能。



安装应用程序,然后打开蓝牙连接并连接到ESP32。



打开应用程序,转到"Android GamePad Tester"并完成电路组件的测试。然后,通过一个游戏来真实测试电路。



这边安装了一个赛车应用程序,准备开始测试!
步骤7:印刷电路板


我用了之前设计的蝙蝠主题印刷电路板来测试作游戏手柄。





和面包板电路一样,选择了易于组装的可焊接组件。将所需的组件安装在PCB上,然后使用烙铁和焊线焊接到位。






[*]1x二极管SB560
[*]3x电容100uF 16V
[*]2x XY拇指摇杆
[*]1x稳压器7805CV(* 可选)
[*]2x LED 3mm
[*]2x电阻220R
[*]6x电阻4K7
[*]1x Doit ESP32 DevKit V1
[*]2x母头1x15 2.54
[*]2x母头1x4 2.54
[*]1x连接器
[*]4x带有圆形盖的12mm按键开关

PCB Gerber文件:pcbway.com/project/shareproject/DIY_ESP32_Bluetooth_GamePad_for_Android_PlayStation_and_PC
步骤8:测试印刷电路板


设计包括4个按钮和2个摇杆,以及每个摇杆连接的一个按钮。所以,需要为6个按钮和2个摇杆定制源代码。

然后我上传源代码。电路包括一个电压稳压器的母线头。如果你想用外部电源为电路供电,并且电源电压高于ESP32的工作范围6到12v,可以使用稳压器(*7805CV)。

你可以通过ESP32的USB输入供电,不使用稳压器,也可以通过用跳线在6到12伏特的电源范围内通过外部供电。

我用了一个空白的PCB作为盖子,避免手接触电路。将ESP32板插入电路,然后通过游戏手柄测试应用程序测试按钮和摇杆。接下来,我打开赛车游戏进行控制测试。









这部分代码也可以在文末下载。

步骤9:总结

https://dfrobot.loll.cc/video/DIY_Bluetooth_GamePad_for_Android_PlayStation_and_PC.mp4


这个电路在安卓手机上工作得非常好。我在 Android TV 和 Android TV Box 上再次测试了,结果也令人满意。在基于 Windows 的 PC 上的测试也同样成功,但是在 MacBook 上,遇到了一些连接上的问题。经过研究,我把 PS 模式分配给了操纵杆按钮,并在建立蓝牙连接时保持按下,结果连接成功,MacBook 将该电路识别为游戏控制器。我还用两个 ESP32 测试了该电路,使用 ESP-NOW 关于它们之间的通信,结果也很成功。

如果你想知道还能用这个电路做什么,可以参考下面的几个项目。

你可以在项目中使用这块 PCB,它有多种无线通讯选项,比如从 ESP32 到 ESP32,以及从蓝牙到 WiFi。







1、https://www.instructables.com/ESP32-Joystick-Hand-Controller-ESP-NOW/

2、https://www.instructables.com/ESP32-Servo-Motor-Controller-Board-Wireless-Contro/

3、https://www.instructables.com/ESP32-Mecanum-Wheels-Robot-and-Bluetooth-Gamepad-C/

原文作者:MertArduino

原文连接:https://www.instructables.com/DI ... Android-PlayStatio/

转载请注明来源信息

木子呢 发表于 2023-8-3 14:34:24

图片拍的真好看呀

ZZ小海鸥 发表于 2023-8-4 09:02:08

高深,酷

Amos Young 发表于 2023-8-4 09:14:50

图片拍的真好看呀

三春牛-创客 发表于 2023-8-19 10:22:04

厉害厉害!

三春牛-创客 发表于 2023-8-19 10:23:08

太棒了!!

派大星ym 发表于 2023-8-19 18:25:59

无敌了   

派大星ym 发表于 2023-8-19 18:27:17

6666666666666

花生编程 发表于 2023-8-27 10:23:30

厉害厉害!

花生编程 发表于 2023-8-27 10:24:55

好看,好玩!
页: [1]
查看完整版本: 自制一个基于ESP32的蓝牙游戏手柄