ESP32を使って、PS4コントローラとBluetooth接続する

はじめに

 今回はESP32を使って、PS4のコントローラとのBluetooth接続をしました。ロボコンで使っているところを見たことがあります。最近はSwitchのコントローラで操作しているのも見ました。

 すでにライブラリがあって、Arduino IDEで実行するだけで使えるものだと思っていたのですが、コンパイルエラーが多発して結構悩みました。ネット上でも同じようなエラーに見舞われている人がいたのですが、いまいち解決方法が分からない状態が続きました。

 結局のところ、Arduino IDEをインストールしなおしたら解決したので原因があまりよく分かっていません。ライブラリに少し手を加えないといけないのもあって、ややこしかったです。アップデートとかがあれば改善するかもしれませんが、同じくコンパイルエラーが起きている方の参考になれば幸いです。

ESP32について

 ESP32は秋月電子通商で買いました。普段使っているArduino系のマイコンとは違って、WiFiやBluetoothで通信できることが特徴です。

▼秋月電子通商で買ったESP32

 ESP32-DevKitC-VE ESP32-WROVER-E開発ボード 8MB: マイコン関連 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

Arduino IDEの準備

▼PS4-esp32ライブラリのmasterにあたるリポジトリ。ちょっと修正が必要。このリポジトリに沿って紹介します。

 GitHub - aed3/PS4-esp32: Use a ps4 controller with an esp32

▼masterにPull requestsを出している方のリポジトリ。修正が加えられているので、もしかしたらそのまま使えるかもしれません。

 GitHub - AzSaSiN/PS4-esp32: Use a ps4 controller with an esp32

 基本的にはリポジトリのREADMEに書いている、Installationに従ってダウンロードします。リポジトリには英語で書いているのですが、日本語版のArduino IDEに合わせて紹介します。

 まず、ESP32 boardsをArduino IDEに追加します。

  1. ファイル → 環境設定 → 追加のボードマネージャーのURLのところに「https://dl.espressif.com/dl/package_esp32_index.json」を書き込んでOKを押す
  2. ツール → ボード → ボードマネージャでesp32を検索して、インストール

 別のURLを書き込むと、別のバージョンのesp32が表示されたことがあるのですが、上記のURLで問題ないです。

次に、PS4-esp32ライブラリをArduino IDEにインストールします。

  1.  リポジトリのCode → Download ZIPからダウンロード
  2.  スケッチ → ライブラリをインクルード→.ZIP形式のライブラリをインストールで、ダウンロードしたファイルを選択する

 これでライブラリをインクルードできるのですが、このライブラリはそのままだとコンパイルエラーが起きて使えませんでした。ちょっと手を加える必要があります。

▼こちらの動画でコンパイルエラーを回避する方法が紹介されています。

 https://youtu.be/dRysvxQfVDw?t=114(1:54~)

 この動画通りにコメントアウトすれば使えました。逆にコメントアウトしなければ使えませんでした。

プログラムを実行する

 サンプルプログラムを使うのですが、ESP32のMACアドレスをPS4コントローラに合わせるには、setup関数内にあるPS4.beginのMACアドレスを変える必要があります。

 私は動画に合わせて、PS4コントローラのMACアドレスを、ESP32のMACアドレスに書き換えました。PS4コントローラのMACアドレスの読み取りと書き込みにはSixaxisPairToolというものが必要です。

▼リポジトリのリンク先のものは使い方が分からなかったので、私はこちらからダウンロードしました。

 Download SixaxisPairTool 0.3.1 - LO4D.com

▼ESP32のMACアドレスは、動画で紹介されていたプログラムを実行すれば取得できました。

 https://github.com/un0038998/PS4Controller_ESP32

 ファイル → スケッチ例のところにPS4Controllerが追加されていると思います。ここからサンプルプログラムを開くことができます。PS4.beginのMACアドレスを変更してください。

▼PS4コントローラから受信するプログラム。ボードをESP32に設定するのを忘れずに。

最後に

 ライブラリを使うのに随分と時間がかかってしまったのですが、とにかく使うことができました。今後はPS4コントローラを使ってロボットを操作することも視野に入れていこうと思います。

ESP32を使って、PS4コントローラとBluetooth接続する” に対して6件のコメントがあります。

  1. ミクニ より:

    コメント失礼します。

    先日、管理人様の手順でesp32とPS4コントローラーの
    接続を試みました。
    結果、一度はペアリングに成功し、サンプルプログラムを動かすことができました。

    しかし、二度目からペアリングすることができなくなりました。現在3つのPS4コントローラーを所持しており、3つとも一度目だけペアリングが成功しています。
    コンパイル時もエラーにはならず、シリアルポートには"Ready."が表示されています。

    なにか解決方法はありますでしょうか。
    お手数おかけしますが
    よろしければご返信お願い致します。

    1. 管理人 より:

      コメントありがとうございます。
      私の方でも一度だけペアリングに成功して、二回目に接続できないことがありました。1つのPS4コントローラーに2つのESP32を登録したときです。PS4コントローラーの点滅が止まったものの、接続できていませんでした。

      一応解決したので、そのときの方法をお伝えします。

      ESP32用のスケッチ例に、BluetoothSerial -> bt_remove_paired_devices
      というスケッチがあります。(ボードをESP32に設定しておかないと表示されないと思います)

      このスケッチの18行目に
      #define REMOVE_BONDED_DEVICES 0 // <- Set to 0 to view all bonded devices addresses, set to 1 to remove というのがあります。 数値を1に変えると、Bluetooth接続での接続が登録されているデバイスを消去できます。 これでもう一度接続しなおしたら接続できました。 複数台との接続はもしかしたらできないかもしれません... お役に立てれば幸いです。

      1. ミクニ より:

        ご返信ありがとうございます。
        上記の解決策を試した結果、
        ペアリング成功できました!

        ご助力感謝いたします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です