arduino环境下用ESP32连接PS2手柄

一、PS2接线说明

在这里插入图片描述

功能:
1,数据:控制器- > PlayStation 游戏机。这是一个集电极开路输出,需要一个上拉电阻(10K,或许更多)。(上拉电阻是必要的,因为控制器只能连接线对地,它不能真正把电压就行了)。
2,命令:PlayStation - >控制器。
4,地线,接电源负极。
5,电源:任何官方的索尼控制器应在 3-5V。
6,注意:各组发送/接收的字节前,此行必须被拉低,然后重新置高之后。在我们的测试中,它是不足够的,以配合永久-它被赶下来,周围每一组 Digitan 认为这是一个“片选”或“从选择”行,是用来解决不同的控制器上在同一总线上。
7,时钟: 500kH / Z,通常高。似乎是 SPI 总线的通信。我们已经得到了它的工作为 500kHz 小于 100kHz 的上升,(500K比特/秒,这还不算字节和数据包之间的延迟)。吉他英雄控制器连接时,时钟频率是 250kHz,这也是游戏站 1 使用的速率。
最后特别需要提醒的是:
按下遥控器的 MODE 键,手柄可配置成“红灯模式”或者“绿灯模式”,当遥控器侧面的 “MODE LED”亮为红灯模式,反之为绿灯模式,“红灯模式”和“绿灯模式”的主要区别是摇杆模拟值得输出。
红灯模式时:左右摇杆发送模拟值,0x00〜OxFF 之间,且摇杆按下的键值 L3、R3 有效;
绿灯模式时:左右摇杆模拟值为无效,推到极限时,对应发送 UP、RIGHT、DOWN、LEFT、△、〇、X、□,按键 L3、R3 无效。
在这里插入图片描述
引脚1DAT—>GPIO19
引脚2CMD—>GPIO23
引脚6SEL—>GPIO5
引脚7CLK—>GPIO18

二、程序说明

本程序取自一位大佬的博客https://blog.csdn.net/freewebsys/article/details/104734241

#include <PS2X_lib.h>  //for v1.6

/******************************************************************
 * set pins connected to PS2 controller:  *设置连接到PS2控制器的引脚:
 *   - 1e column: original
 *   - 2e colmun: Stef?
 * replace pin numbers by the ones you use  *用您使用的密码替换密码
 ******************************************************************/

//  ESP32 pin
// https://github.com/espressif/arduino-esp32/blob/master/docs/esp32_pinmap.png

#define PS2_DAT        19  //MISO
#define PS2_CMD        23  //MOSI
#define PS2_SEL         5  //SS
#define PS2_CLK        18  //SLK

/******************************************************************
 * select modes of PS2 controller:  *选择PS2控制器的模式:
 *   - pressures = analog reading of push-butttons
 *   - rumble    = motor rumbling
 * uncomment 1 of the lines for each mode selection
 ******************************************************************/
#define pressures   false
#define rumble      false

PS2X ps2x; // create PS2 Controller Class   //创建PS2控制器类

//right now, the library does NOT support hot pluggable controllers, meaning  //目前,该库不支持热插拔控制器,这意味着
//you must always either restart your Arduino after you connect the controller,  //您必须始终在连接控制器后重新启动Arduino,
//or call config_gamepad(pins) again after connecting the controller.  //或在连接控制器后再次调用config_gamepad(pins)。

int error = -1;
byte type = 0;
byte vibrate = 0;
int tryNum = 1;

void setup(){
   

 // 115200
  Serial.begin(115200)
  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DIY使用ESP32的手持游戏手柄并通过BLE进行通信 硬件部件: esp32× 1个 ws2812b× 6 游戏杆× 2 角度按钮× 2 按钮× 8 18560电池和电池座× 2 三向拨动开关× 1个 TP4056带保护的电池充电电路× 1个 MT3608升压转换器× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 烙铁(通用) 这是一个使用ESP32微控制器制作的DIY手持游戏手柄。您可能之前已经看过这样的游戏控制器。但大多数使用Arduino。或更具体地说,是Arduino pro micro或Leonardo开发板。因为这些板支持HID或通过USB的人机接口设备。但是esp32没有这种功能。那么我们该怎么做呢?嗯,esp32确实具有BLE或低功耗蓝牙,我们可以使用它通过蓝牙进行无线通信。 因此,我们有ESP32模块作为中央控制器,然后有USB C型端口和一个3.3v稳压器,可将5v转换为3.3v。然后我们有了编程电路,使用具有自动编程模式的ch340c usb到串行转换器和使用双工晶体管的自动复位电路。我们还具有电池充电电路,以及过充电和过放电保护功能。然后使用升压转换器ic将其升压至5v。接下来,我们有操纵杆,D-Pad按钮,触发按钮,Neopixel LED和i2c端口。最后是3向开关,可在USB电源和电池电源之间切换。 游戏手柄有 2个模拟游戏杆 2个触发按钮 2个D-Pads 6个可寻址RGB LED 和一个i2c端口 它可以使用2个18650锂离子电池运行,可以使用USB C型端口对其进行更改。它也可以用来对微控制器进行编程。该设计的灵感来自新的ps5控制器,以使其外观更好。GPIO4使用分压器连接到电池。这样我们就可以测量电池电压了。NeoPixel LED将指示控制器是否连接到设备或电池电压是否低。 该代码基于lemmingDev的BLE Gamepad库。在代码中,我为不同的输入定义了所有GPIO引脚。然后在设置中有一些初始的led动画。板子一旦连接到设备,所有的LED就会变成绿色。并且它将按先前定义的时间间隔检查电池电压。然后我们获得按钮状态,并相应地设置游戏手柄按钮。然后,我们采用模拟输入,并将其映射到合适的值。最后根据我们收到的值设置轴。上载代码后,在智能手机或PC上打开蓝牙菜单,您会看到一个新设备弹出。单击该按钮将其连接,就可以开始游戏了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值