Esp32-Client.ino 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. //库
  2. #include <ESP8266WiFi.h>
  3. #include <ArduinoWebsockets.h>
  4. #include <PS2X_lib.h>
  5. //定义宏
  6. #define PS2_DAT 12 //14
  7. #define PS2_CMD 13 //15
  8. #define PS2_SEL 14 //16
  9. #define PS2_CLK 16 //17
  10. //实例化
  11. using namespace websockets;
  12. WebsocketsClient client;
  13. PS2X ps2x;
  14. //基础配置wifi+socket+PS2
  15. const char* ssid = "test";
  16. const char* password = "dd88888888";
  17. const char* websockets_server_host = "caner.top";
  18. const uint16_t websockets_server_port = 49700;
  19. int error = 0; //控制器配置错误
  20. //重置
  21. void(*resetFunc) (void) = 0;
  22. //WIFI连接
  23. void WifiConnect() {
  24. Serial.print("WIFI连接中.");
  25. WiFi.begin(ssid, password);
  26. while (WiFi.status() != WL_CONNECTED) {
  27. delay(500);
  28. Serial.print(".");
  29. }
  30. Serial.println("");
  31. Serial.print("WiFi IP:");
  32. Serial.println(WiFi.localIP());
  33. // socket连接
  34. SocketConnect();
  35. }
  36. //socket连接
  37. void SocketConnect() {
  38. Serial.print("服务器连接中.");
  39. // 连接socekt
  40. bool connected = client.connect(websockets_server_host, websockets_server_port, "/");
  41. while (!connected){
  42. delay(1000);
  43. Serial.print(".");
  44. connected = client.connect(websockets_server_host, websockets_server_port, "/");
  45. }
  46. Serial.println("");
  47. Serial.println("服务器连接成功");
  48. ControllerInt();
  49. }
  50. //控制器初始化
  51. void ControllerInt() {
  52. Serial.println("控制器匹配中.");
  53. error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false);
  54. while(error!=0){
  55. delay(1000);
  56. Serial.print(".");
  57. error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false);
  58. }
  59. Serial.println("");
  60. Serial.println("控制器连接成功");
  61. }
  62. //PS2操作并发送信息
  63. void PS2Control() {
  64. ps2x.read_gamepad();
  65. // 上
  66. if (ps2x.Button(PSB_PAD_UP) || ps2x.Button(PSB_TRIANGLE)){
  67. client.send("UP");
  68. Serial.println("UP");
  69. }
  70. // 右
  71. if (ps2x.Button(PSB_PAD_RIGHT) || ps2x.ButtonPressed(PSB_CIRCLE)){
  72. client.send("RIGHT");
  73. Serial.println("RIGHT");
  74. }
  75. // 左
  76. if (ps2x.Button(PSB_PAD_LEFT) || ps2x.ButtonReleased(PSB_SQUARE)){
  77. client.send("LEFT");
  78. Serial.println("LEFT");
  79. }
  80. // 下
  81. if (ps2x.Button(PSB_PAD_DOWN) || ps2x.NewButtonState(PSB_CROSS)){
  82. client.send("DOWN");
  83. Serial.println("DOWN");
  84. }
  85. // 功能键
  86. if (ps2x.NewButtonState()) {
  87. if (ps2x.Button(PSB_L3))
  88. Serial.println("L3 pressed");
  89. if (ps2x.Button(PSB_R3))
  90. Serial.println("R3 pressed");
  91. if (ps2x.Button(PSB_L2))
  92. Serial.println("L2 pressed");
  93. if (ps2x.Button(PSB_R2)){
  94. // STOP
  95. Serial.println("R2 pressed");
  96. client.send("STOP");
  97. Serial.println("STOP");
  98. }
  99. }
  100. // 车站加速+转向加速
  101. if (ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) {
  102. //print stick values if either is TRUE
  103. Serial.print("Stick Values:");
  104. Serial.print(ps2x.Analog(PSS_LY), DEC);
  105. Serial.print(",");
  106. Serial.print(ps2x.Analog(PSS_LX), DEC);
  107. Serial.print(",");
  108. Serial.print(ps2x.Analog(PSS_RY), DEC);
  109. Serial.print(",");
  110. Serial.println(ps2x.Analog(PSS_RX), DEC);
  111. }
  112. }
  113. // C++初始化
  114. void setup() {
  115. Serial.begin(115200);
  116. // 连接wifi + socket +PS2
  117. WifiConnect();
  118. }
  119. //C++ 死循环
  120. void loop() {
  121. // let the websockets client check for incoming messages
  122. if (client.available()) {
  123. client.poll();
  124. }
  125. // PS2控制器
  126. if (error > 0 )
  127. return;
  128. PS2Control();
  129. delay(50);
  130. }