ついに、ArduinoIDE1.8.10 の開発環境にて ESP32(M5STickC)でPS3のコントローラを使う事が出来たので備忘録として残しておく事にしました。

ps3_car


はじめに
PS3のコントローラは、接続先(ESP32)のBluetoothのMac Addressを記憶しなくては、なりません。

1.ESP32のBluetoothのMac Addressを調べるため、下記のスケッチを書き込み、メモしておきます。

BTmacadrs.ino
//*****************************************************
void setup(void) {
  Serial.begin(115200);
  Serial.println("-----------------------------");
  uint8_t btmac[6];
  esp_read_mac(btmac, ESP_MAC_BT);
  Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", btmac[0], btmac[1], btmac[2], btmac[3], btmac[4], btmac[5]);
}

void loop() {
}
//*****************************************************


*実行例

ps3-01


2.PS3のコントローラに、Mac Addressを記憶させるために下記のソフトを使って記憶させます。
Windows用

SixaxisPairTool[Size: 25.7 MB]


①PS3コントローラをMiniUSBケーブルでPCに繋ぎます
②SixaxisPairToolを実行し、<1.>でメモしたMac Addressを入力します。


*実行例

ps3-02


3.次に、PS3コントローラ用のライブラリをArduinoIDE1.8.10に追加します。
下記よりダウンロードして、ライブラリにzipを追加します。

download ps3 arduino library and add zip library

4.次のスケッチで、コントローラのテストを行います。
 *シリアルモニタで、各ボタン、アナログ値を確認できます。
 *シリアルプロッタのグラフで見るとジョイスティックアナログ値がよく分かります。

①PS3コントローラのPS釦を圧下し、ペアリングできる状態にします。
②スケッチを実行し、各ボタン、ジョイスティックを試験します。

ps3test.ino
//*****************************************************
#include <Ps3Controller.h>
void  setup()
{
    Serial.begin(115200);
    Ps3.begin("00:11:22:33:44:55"); //1.でメモしたmac adresに修正
    Serial.println("Ready");
}

void  loop()
{
  if  (Ps3.isConnected()){

    if (Ps3.data.button.select){
      Serial.println("select ボタン圧下");
    }
    if (Ps3.data.button.l3 ){
      Serial.println("l3 ボタン圧下");
    }
    if (Ps3.data.button.r3){
      Serial.println("r3 ボタン圧下");
    }
    if (Ps3.data.button.start){
      Serial.println("start ボタン圧下");
    }

    if (Ps3.data.button.up ){
      Serial.println("up ボタン圧下");
    }
    if (Ps3.data.button.right){
      Serial.println("right ボタン圧下");
    }
    if (Ps3.data.button.down ){
      Serial.println("down ボタン圧下");
    }
    if (Ps3.data.button.left){
      Serial.println("left ボタン圧下");
    }

    if (Ps3.data.button.l2 ){
      Serial.println("l2 ボタン圧下");
    }
    if (Ps3.data.button.r2){
      Serial.println("r2 ボタン圧下");
    }
    if (Ps3.data.button.l1 ){
      Serial.println("l1 ボタン圧下");
    }
    if (Ps3.data.button.r1){
      Serial.println("r1 ボタン圧下");
    }

    if (Ps3.data.button.cross){
      Serial.println("cross ボタン圧下");
    }
    if (Ps3.data.button.square){
      Serial.println("square ボタン圧下");
    }
    if (Ps3.data.button.triangle){
      Serial.println("triangle ボタン圧下");
    }
    if (Ps3.data.button.circle){
      Serial.println("circle ボタン圧下");
    }

    if (Ps3.data.button.ps){
      Serial.println("ps ボタン圧下");
    }
    
    Serial.print("128,-128,LX=,"); //プロッタ用基準線
    Serial.print(Ps3.data.analog.stick.lx);
    Serial.print(",LY=,");
    Serial.print(Ps3.data.analog.stick.ly);
    Serial.print(",RX=,");
    Serial.print(Ps3.data.analog.stick.rx);
    Serial.print(",RY=,");
    Serial.print(Ps3.data.analog.stick.ry);
    Serial.print(",SX=,");
    Serial.print(Ps3.data.sensor.accelerometer.x);
    Serial.print(",SY=,");
    Serial.print(Ps3.data.sensor.accelerometer.y);
    Serial.print(",SZ=,");
    Serial.print(Ps3.data.sensor.accelerometer.z); 
    Serial.println();
  }
  delay(100);
}

//*****************************************************


*シリアルモニタでの実行例

ps3-10


*シリアルプロッタでの実行例

ps3-11

以上