ESP32を使って、PS4コントローラとBluetooth接続する
はじめに
今回はESP32を使って、PS4のコントローラとのBluetooth接続をしました。ロボコンで使っているところを見たことがあります。最近はSwitchのコントローラで操作しているのも見ました。
すでにライブラリがあって、Arduino IDEで実行するだけで使えるものだと思っていたのですが、コンパイルエラーが多発して結構悩みました。ネット上でも同じようなエラーに見舞われている人がいたのですが、いまいち解決方法が分からない状態が続きました。
結局のところ、Arduino IDEをインストールしなおしたら解決したので原因があまりよく分かっていません。ライブラリに少し手を加えないといけないのもあって、ややこしかったです。アップデートとかがあれば改善するかもしれませんが、同じくコンパイルエラーが起きている方の参考になれば幸いです。
▼後日ライブラリを修正して、GitHubに公開しました。
▼PS4のコントローラは、純正品を使っています。
ESP32について
ESP32は秋月電子通商で買いました。普段使っているArduino系のマイコンとは違って、WiFiやBluetoothで通信できることが特徴です。
▼秋月電子通商で買ったESP32はこちら
ESP32-DevKitC-VE ESP32-WROVER-E開発ボード 8MB: マイコン関連 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)
▼Amazonでも販売されています。
Arduino IDEの準備
▼PS4-esp32ライブラリのmasterにあたるリポジトリ。ちょっと修正が必要。このリポジトリに沿って紹介します。
GitHub - aed3/PS4-esp32: Use a ps4 controller with an esp32
2023年にリポジトリがPublic archiveになったので、今後はアップデートされないようです。
▼masterにPull requestsを出している方のリポジトリ。修正が加えられているので、もしかしたらそのまま使えるかもしれません。
GitHub - AzSaSiN/PS4-esp32: Use a ps4 controller with an esp32
基本的にはリポジトリのREADMEに書いている、Installationに従ってダウンロードします。リポジトリには英語で書いているのですが、日本語版のArduino IDEに合わせて紹介します。
まず、ESP32 boardsをArduino IDEに追加します。
- ファイル → 環境設定 → 追加のボードマネージャーのURLのところに「https://dl.espressif.com/dl/package_esp32_index.json」を書き込んでOKを押す
- ツール → ボード → ボードマネージャでesp32を検索して、インストール
別のURLを書き込むと、別のバージョンのesp32が表示されたことがあるのですが、上記のURLで問題ないです。
次に、PS4-esp32ライブラリをArduino IDEにインストールします。
- リポジトリのCode → Download ZIPからダウンロード
- スケッチ → ライブラリをインクルード→.ZIP形式のライブラリをインストールで、ダウンロードしたファイルを選択する
これでライブラリをインクルードできるのですが、このライブラリはそのままだとコンパイルエラーが起きて使えませんでした。ちょっと手を加える必要があります。
▼こちらの動画でコンパイルエラーを回避する方法が紹介されています。
この動画通りにコメントアウトすれば使えました。逆にコメントアウトしなければ使えませんでした。
プログラムを実行する
サンプルプログラムを使うのですが、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コントローラーの
接続を試みました。
結果、一度はペアリングに成功し、サンプルプログラムを動かすことができました。
しかし、二度目からペアリングすることができなくなりました。現在3つのPS4コントローラーを所持しており、3つとも一度目だけペアリングが成功しています。
コンパイル時もエラーにはならず、シリアルポートには"Ready."が表示されています。
なにか解決方法はありますでしょうか。
お手数おかけしますが
よろしければご返信お願い致します。
コメントありがとうございます。
私の方でも一度だけペアリングに成功して、二回目に接続できないことがありました。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接続での接続が登録されているデバイスを消去できます。 これでもう一度接続しなおしたら接続できました。 複数台との接続はもしかしたらできないかもしれません... お役に立てれば幸いです。
ご返信ありがとうございます。
上記の解決策を試した結果、
ペアリング成功できました!
ご助力感謝いたします!
コメント失礼します。
この投稿の方法でesp32とPS4コントローラーの接続を試みました。
しかし、ペアリングがうまくいかず、接続できませんでした。
具体的にはPS4コントローラーの白ランプが点滅した後、白ランプが2~3秒点灯し、消えてしまいます。シリアルポートには"Ready."と表示されています。
なにか解決方法はありますでしょうか。
お手数おかけしますがよろしければご返信お願い致します。
コメントありがとうございます。
私も同様の状態になったことがあって、白ランプが少しだけ点灯して消えることがありました。
そのときは上記のコメントに書いているように、Bluetooth接続に登録されたデバイスを削除して、接続しなおすと解決しました。
まずは同じ対処を試して頂けますでしょうか?
ご返信ありがとうございます。
上記のコメントの方法でデバイスを削除して、接続しなおしました。
PS4コントローラーのランプが青に点灯してペアリング成功しましたが、すぐにランプが消えて接続が解除されてしまします。何度ペアリングを試みても同じ現象になってしまいます。
お手数ですが、解決方法があればご返信お願いいたします。
上記のコメントの方法以外だと、心当たりがあるのはバッテリーとESP32への給電ですね。
PS4のコントローラのバッテリー残量が少ないと、点灯はするもののすぐに消えることがありました。
また、ESP32がBluetoothを利用するときは消費電力が増えるようなので、十分に給電できるケーブルで試すと繋がるかもしれません。
私はPS4のコントローラ用に付属していたUSBケーブルを使っています。
ご返信ありがとうございます。
PS4のバッテリーを満タンにしたらしっかりペアリングすることが出来ました!
ご助力感謝します!