ゆるエンジニアはいろいろ遊びたい

FAエンジニアが週末にいろいろ遊ぶブログです

Atom MatrixでPS4コントローラを使う

AtomMatrixでPS4コントローラを接続してみました。
まずはAtom MatrixのMACアドレスを調べます。

#include <WiFi.h>

void setup() {
  Serial.begin(115200);
  delay(2000);

  WiFi.mode(WIFI_STA);
  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress());
}

void loop() {}

書き込んで、USBケーブルを一度差しなおすとシリアルモニタに表示されるのですが、なぜか全て「0」が表示されました。
chatGPTに聞いたところ、ESP32のバージョンを落とせと言われたので、バージョン3.3.5→2.0.17にダウングレードしました。
ダウングレード後はボードの再設定をしてスケッチを書き込んだところ、MACアドレスが表示されました。

PS4との接続

SixaxisPairToolというフリーソフトを作業用PCにインストールし、PS4にAtomMatrixのMACアドレスを設定します。
sixaxispairtool.en.lo4d.com
PS4コントローラをPCに有線で接続し、SixaxisPairToolを実行すると下記のようなウィンドウが表示されます。
黒塗りの部分は現在設定されている機器のMACアドレスなので、Change Masterの枠にAtom MatrixのMACアドレスを設定します。

Atom Matrix側では、PS4Controller by Juan Pablo Marquezというライブラリをインストールして、以下のスケッチを書き込みます。

#include <PS4Controller.h>

void setup() {
  Serial.begin(115200);
  delay(2000);

  PS4.begin("00:00:00:00:00");  // ← AtomMatrixのMACアドレスを書く

  Serial.println("Waiting for PS4 Controller...");
}

void loop() {
  if (PS4.isConnected()) {
    Serial.println("PS4 Connected!");
    delay(500);
  }
}

書き込んだら、AtomMatrixの横にあるボタンを押してリセットします。
シリアルモニタで「Waiting for PS4 Contoroller・・・」と表示されたら、PS4コントローラのPSボタンのみを1回押すと、ペアリングされ「PS4 Connected!」と表示されれば成功です。
void loop()を以下のように変えれば、ボタンとスティックの入力を表示できました。

void loop() {
  if (PS4.isConnected()) {
     Serial.printf(
    "LX:%4d LY:%4d RX:%4d RY:%4d  L2:%3d R2:%3d\n",
    PS4.LStickX(), PS4.LStickY(),
    PS4.RStickX(), PS4.RStickY(),
    PS4.L2Value(), PS4.R2Value()
  );

  if (PS4.Cross())   Serial.print(" X");
  if (PS4.Circle())  Serial.print(" O");
  if (PS4.Square())  Serial.print(" □");
  if (PS4.Triangle())Serial.print(" △");
  if (PS4.L1())      Serial.print(" L1");
  if (PS4.R1())      Serial.print(" R1");
  Serial.println();
  delay(500);
  }
}

これを使えば、PS4コントローラからAtomMatrixを動かすことができますね。