ちょっと調べもの:ESP32C3とBluetoothの規格
はじめに
このホームページでは、度々ESP32とPS4のコントローラ(DUALSHOCK4)をBluetoothで接続する方法についてまとめています。今回の記事は、ESP32C3でもPS4のコントローラと接続したくて調べてみたという話です。
▼これがESP32C3。小型でありながら、BluetoothやWiFiに対応しています。
ひとまずESP32で使っていたPS4Controller.hで、ESP32C3用にコンパイルしてみたらエラーが出ました。GitHubではIssuesのところに問題が報告されるのですが、同じようなエラーが出ていました。
▼こちらと大体同じでした。
https://github.com/aed3/PS4-esp32/issues/52
他にもGitHub上にIssueがあったのですが、その中にPS4のコントローラとESP32C3ではBluetoothの規格が違っていたはずという意見がありました。
▼こちらのIssueです。
https://github.com/aed3/PS4-esp32/issues/32
そもそもハードウェア的に接続できないなら無理だろうということで、Bluetoothの規格について調べることにしました。
▼以前の記事
ESP32C3について
ESP32C3は、ESP32系のマイコンでも比較的新しいものです。
ESP32C3を使いたかったのは、これまで使っていたESP32よりも小型だったからです。Arduinoでもそうですが、そんなにピンをたくさん使わないので小型で良いんですよね。
また、ESP32C3にはバッテリー用の端子があります。しかもバッテリーチャージャー機能付きです。バッテリーを充電するためのモジュールは販売されていますが、それも不要になるので小型化に適していると思います。
C3にもいくつか種類があって、私が購入したのは「Seeed Studio XIAO ESP32C3」です。ちなみにArduino IDEでのボードの指定が、XIAO以外のESP32C3だと書き込めなかったので注意が必要です。
▼ESP32とESP32C3を並べるとこんな感じ。C3はアンテナ付きです。
配線が伸びているのは、ピンでバッテリーの電圧を測定するためです。Seeed Studioのフォーラムで紹介されていました。
▼こちらの投稿です。
https://forum.seeedstudio.com/t/battery-voltage-monitor-and-ad-conversion-for-xiao-esp32c/267535
▼見よう見まねではんだ付けしてみました。こういう不安定な配置ではんだ付けするのは怖いですね...
▼データシートはこちら
https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf
Bluetoothの規格について
Bluetoothにもバージョンがあります。特に問題なのは互換性が無いものがあるということです。
▼Bluetooth4.0以降と、Bluetooth3.0以前では互換性がありません。
http://qa.elecom.co.jp/faq_detail.html?id=4055
普段Bluetoothの機器を使っていても気にしないことではないでしょうか。古い規格にも対応している製品が多いのだと思います。
なおBluetooth 4.0以降はBluetooth Low Energy(BLE)、3.0以前はBluetooth Classicとも呼ばれるそうです。
▼Bluetooth ClassicとBLEの違いは、こちらが分かりやすいです。BLEではデバイスの存在や距離、方向まで特定できるのだとか。低消費電力動作でありながら、面白い機能を持っていますね。マイコンでも活用できるのでしょうか。
Bluetooth 技術概要|Bluetooth® Technology Website
https://www.tjsys.co.jp/focuson/clme-bluetooth/bt-difference.htm
▼現時点での最新バージョンはBluetooth 5.4みたいです。
https://www.silabs.com/blog/the-new-bluetooth-5-4-what-you-should-know-first
▼Arduino IDEのBLE Libraryについても触れているページ
http://marchan.e5.valueserver.jp/cabin/comp/jbox/arc212/doc21201.html#sect6
ESP32C3のBluetooth
データシートには、「Bluetooth LE: Bluetooth 5, Bluetooth mesh」と書かれています。
▼ESP32のシリーズ比較。こちらだとC3はBluetooth 5.0のみに対応しているようですね。ESP32の欄にあるBR/EDRはBluetooth Classicの別名です。
https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32c3/hw-reference/chip-series-comparison.html
PS4のコントローラのBluetooth
Sonyの技術仕様に関するページでは、「Bluetooth Ver2.1+EDR準拠」と書かれていました。意外と古いバージョンみたいですね。
▼PS4の本体は「Bluetooth v4.0」と書かれていますが、暗黙的にClassicにも対応しているのでしょうか。
https://www.playstation.com/ja-jp/ps4/tech-specs/
▼コントローラのデータ形式について詳しく書かれているページがありました。
https://www.psdevwiki.com/ps4/DS4-BT#Bluetooth_Addressing
最後に
まとめると、
- ESP32C3はBluetooth 5.0のみに対応
- PS4のコントローラはBluetooth Classic
- Bluetooth ClassicとBluetooth5.0には互換性が無い
ということで、C3とDUALSHOCK4では通信できなさそうです。
特にBluetoothについて詳しいわけではないですし、間違っている所があるかもしれません。もし接続できる方法があれば、教えていただけると助かります。
ちなみに、PS5のコントローラ(DualSense)はBluetooth 5.1だそうです。ライブラリがあれば、C3とも接続できるかもしれませんね。自分でライブラリを作成するのはやりたくないです...
▼iPhone8以降はBluetooth 5.0が搭載されているそうです。実際、C3とiPhoneのアプリで通信できました。別の記事にまとめる予定です。
https://time-space.kddi.com/ict-keywords/20190909/2738