| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- //库
- #include <ESP8266WiFi.h>
- #include <ArduinoWebsockets.h>
- #include <PS2X_lib.h>
- //定义宏
- #define PS2_DAT 12 //14
- #define PS2_CMD 13 //15
- #define PS2_SEL 14 //16
- #define PS2_CLK 16 //17
- //实例化
- using namespace websockets;
- WebsocketsClient client;
- PS2X ps2x;
- //基础配置wifi+socket+PS2
- const char* ssid = "test";
- const char* password = "dd88888888";
- const char* websockets_server_host = "caner.top";
- const uint16_t websockets_server_port = 49700;
- int error = 0; //控制器配置错误
- //重置
- void(*resetFunc) (void) = 0;
- //WIFI连接
- void WifiConnect() {
- Serial.print("WIFI连接中.");
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.print("WiFi IP:");
- Serial.println(WiFi.localIP());
- // socket连接
- SocketConnect();
- }
- //socket连接
- void SocketConnect() {
- Serial.print("服务器连接中.");
- // 连接socekt
- bool connected = client.connect(websockets_server_host, websockets_server_port, "/");
- while (!connected){
- delay(1000);
- Serial.print(".");
- connected = client.connect(websockets_server_host, websockets_server_port, "/");
- }
- Serial.println("");
- Serial.println("服务器连接成功");
- ControllerInt();
- }
- //控制器初始化
- void ControllerInt() {
- Serial.println("控制器匹配中.");
- error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false);
- while(error!=0){
- delay(1000);
- Serial.print(".");
- error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false);
- }
- Serial.println("");
- Serial.println("控制器连接成功");
- }
- //PS2操作并发送信息
- void PS2Control() {
- ps2x.read_gamepad();
- // 上
- if (ps2x.Button(PSB_PAD_UP) || ps2x.Button(PSB_TRIANGLE)){
- client.send("UP");
- Serial.println("UP");
- }
- // 右
- if (ps2x.Button(PSB_PAD_RIGHT) || ps2x.ButtonPressed(PSB_CIRCLE)){
- client.send("RIGHT");
- Serial.println("RIGHT");
- }
- // 左
- if (ps2x.Button(PSB_PAD_LEFT) || ps2x.ButtonReleased(PSB_SQUARE)){
- client.send("LEFT");
- Serial.println("LEFT");
- }
- // 下
- if (ps2x.Button(PSB_PAD_DOWN) || ps2x.NewButtonState(PSB_CROSS)){
- client.send("DOWN");
- Serial.println("DOWN");
- }
- // 功能键
- if (ps2x.NewButtonState()) {
- if (ps2x.Button(PSB_L3))
- Serial.println("L3 pressed");
- if (ps2x.Button(PSB_R3))
- Serial.println("R3 pressed");
- if (ps2x.Button(PSB_L2))
- Serial.println("L2 pressed");
- if (ps2x.Button(PSB_R2)){
- // STOP
- Serial.println("R2 pressed");
- client.send("STOP");
- Serial.println("STOP");
- }
- }
- // 车站加速+转向加速
- if (ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) {
- //print stick values if either is TRUE
- Serial.print("Stick Values:");
- Serial.print(ps2x.Analog(PSS_LY), DEC);
- Serial.print(",");
- Serial.print(ps2x.Analog(PSS_LX), DEC);
- Serial.print(",");
- Serial.print(ps2x.Analog(PSS_RY), DEC);
- Serial.print(",");
- Serial.println(ps2x.Analog(PSS_RX), DEC);
- }
- }
- // C++初始化
- void setup() {
- Serial.begin(115200);
- // 连接wifi + socket +PS2
- WifiConnect();
- }
- //C++ 死循环
- void loop() {
- // let the websockets client check for incoming messages
- if (client.available()) {
- client.poll();
- }
- // PS2控制器
- if (error > 0 )
- return;
- PS2Control();
- delay(50);
- }
|