2022年10月30日日曜日

ESP32でDUALSHOCK3を使ってみた

 というわけで前回修理したPS3コントローラをESP32で使ってみた。

PS3コントローラはBluetoothなんだけど、PS3本体とペアリングするときはUSBで本体に接続してペアリングされる。どうやらコントローラ内部にホストのMACアドレスを記録させてるみたい。

ESP32とペアリングするときも同様でESP32のBluetoothのMACアドレスとPS3コントローラ内部に登録されているMACアドレスが同じにならないといけない。というわけでPS3コントローラをUSBでPCに繋いでMACアドレスを登録、もしくは確認する必要があるっぽい。

そこで必要なツールがSixaxisPairTool 0.3.1
PS3コントローラ自体結構古いのでリンクが切れていることが多かったのでこちらからダウンロードさせてもらった。

インストールしてSixaxisPairToolを起動してPS3コントローラを差し込むと自動でドライバがインストールされてMACアドレスの表示、書き換えが可能になる。

Current Masterが現在コントローラに登録されているマスターのMACアドレス。ESP32のMACアドレスをこれに変更してもいいし、Change MasterにESP32のMACアドレスを入れてUpdateしても良い。どっちもやってみたんだけど、ESP32を変えるたびにこのツールで書き換えるのも面倒なので適当なMACアドレスを書き込んでおいてESP32側のMACアドレスを変更したほうが便利かも。unicast MACじゃないとESP32側で怒られるので適当なMACアドレスを作りたい場合はRandom MAC Address Generatorとかを使うといいかも。

とりあえず上記の様な適当なMACアドレスを書き込んだらArduino IDE側の設定。今回はESP32 Arduino Core 2.0.5を使用した。(Arduino IDEはWindows Store 1.8.57)
スケッチ→ライブラリをインクルード→ライブラリマネージャーを開いて
PS3 Controller Hostを検索してインストールする。
これでArduino IDE側の準備は完了。とりあえずサンプルスケッチのPS3Demoを動かしてみる。
Ps3.begin("01:02:03:04:05:06");
のところをさっきコントローラーに書き込んだMACアドレスに変更する。(大文字小文字は関係ない)
ちなみにこの01:02:03:04:05:06はunicast MACじゃないのでSixaxis Pair ToolでこのMACアドレスを書き込んでもペアリング出来ないとおもう。

今回は1a:3c:13:00:21:c2をコントローラに記録したので
Ps3.begin("01:02:03:04:05:06");
Ps3.begin("1a:3c:13:00:21:c2");
に変更した。

Sixaxis Pair ToolでESP32のBluetoothのMACアドレスを書き込む場合はサンプルスケッチの中にPs3Address.inoがあるのでそれをESP32に書き込んでシリアルコンソールからESP32のBluetooth MACアドレスが確認できる。そのMACを先程のSixaxis Pair Toolでコントローラに登録すればオッケー。
その場合はESP32のMACアドレスを書き換えなくて良いので
Ps3.begin("01:02:03:04:05:06");
のところを
Ps3.begin();
のように変更する。

変更したサンプルスケッチをESP32に書き込んで、PSボタンを押すと接続されてコントローラのLEDが変化するはず。
もしLED4個が同時に点滅してなかなかつながらない場合はツールのボード設定のところの"Erase All Flash Before Sketch Upload"をEnableにすると良い。自分はここでハマった。ESP32 Arduino Coreのバージョンを1.0.4とかに下げるとうまくつながるんだけど2.0.4とか2.0.5で接続できなくて、いろいろ試していた結果一旦すべてのFlashをクリアすると治るっぽい。2.0.5の状態でいろいろ試してみたが、一回接続されるとFlashをクリアしない設定でもちゃんと繋がるようになった。
それでもつながらない場合は多分MACアドレスの設定をミスっている。(unicast MACじゃないとか)

とりあえず今回はPS3コントローラがESP32で使えるようになった。BLEファームにアップデートしたXbox OneコントローラをBLEで接続するよりも断然ペアリングが早い。コントローラの4つのLEDもESP32側から設定できるっぽい。

Wiiのヌンチャクもi2c接続なので便利なんだけど、550円でBluetoothとバッテリ搭載されててESP32とそのまま通信できるならPS3コントローラのほうがコスパいいかもしれない。

メカナムラジコンの改造さっさと完成させてこのコントローラで遊んでみたいな。

0 件のコメント:

コメントを投稿