SSブログ

M5ATOMでDUALSHOCK4を使う(2022年版) [MCU]

[M5 ATOM-LiteでDUALSHOCK4を使う]記事の続きです。

DSC_2474_thumb.jpg

以前にM5ATOM-LiteでDUALSHOCK4を使う記事を書いたあと、ちょっとした問題が発生してたのでそのまとめとアップデートを書きます。

・最新版PS4-esp32を使う方法

前回でも書いたとおり、PS4-esp32の最新版コミットではESP-IDF 2.0系パッケージを前提としていて、Arduino IDEのESP32ボードマネージャでは使えなくなっています(※補足:最新版のESP32ボードマネージャはEspressifのgithubリポジトリから参照できます)。
これについてはEspressif提供のESP32ボードマネージャではなく、M5Stack提供のM5stackボードマネージャをインストールすることで解決できます。

Arduino IDE environment - ATOM
https://docs.m5stack.com/en/quick_start/atom/arduino

詳しい手順は上記の公式サイトに記載がありますが、ポイントとなる手順は以下のとおりです。
①ファイル→環境設定→追加のボードマネージャのURLに以下を追加
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

②ツール→ボード:XXX→ボードマネージャで"m5astack"を検索し、M5Stack officialのM5Stackの最新版をインストール

③スケッチ→ライブラリをインクルード→ライブラリを管理で"m5atom"を検索し、M5StackのM5Atomの最新版をインストール(関連ライブラリも全てアップデートする)

④スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストールでPS4-esp32の最新版コミットをインストール

ちなみに現在最新版のOct 4,2021コミットですが、切断時の処理が適切でないため PS4.attachOnDisconnect() で設定できる切断時コールバックが呼ばれないという問題があります。
まあM5ATOMで扱う範囲では切断コールバックがなくてもそこまで致命的な問題にはならないですが。


・DUALSHOCK4のペアリングの問題

DUALSHOCK4はSHARE+PS長押しで一般的なBluetoothLE ペアリング(アドバタイズ)を開始し、PCやスマホからHIDデバイスとして接続することができます。
ところが、いったんこのBLEペアリングモードを有効にしてしまうと内部処理が永続的に変化してしまうようで、単純にSixaxisPair ToolでMACアドレスを書き換えてもPS4-esp32で接続できなくなってしまいます。
これはESP32ボードマネージャ 1.0.4+ Feb 13,2021のコミットでもM5Stackボードマネージャ 2.0.2+最新版コミットでも同様で、ライブラリ側の問題の可能性は薄いと考えられます。

少し追いかけた感じではPS4-esp32の接続処理の最後まで、つまりライトバーの色が変わるところまでは通過するものの、その後のonConnect処理で失敗して切断処理に行っている模様です。なんとなーく、接続処理の最初と最後で違うMACアドレス値が参照されているような、パケット処理タスクのタイミングがズレてるような雰囲気があります(が、これ以上はパケットレベルで解析しないとよく分からないので放置)。
またPC/スマホやPS4でのペアリング処理ではまったく問題が出ないため、単純にDUALSHOCK4側の問題とも言い切れません。SixaxisPair Toolの書き込み処理に問題があるのかもしれません。
SixaxisPairToolの最新版

で、何やらMACアドレスの変更処理が怪しいぞ、ということで暫くSixaxisPair Toolsと格闘した結果、以下の手順で上手く行くようになりました。

 ①目的のMACアドレスを書き込む。
 ②MACアドレスの最終ニブルを変更したものを書き込む(例では"6"→"0"にしている)
 ③再度目的のMACアドレスを書き込む。

sixaxispair_update001.png

②で書き込むダミーのMACアドレスは何でもよいわけではなく、どうも2~5バイト目は同一でないとうまくいかないようです。MACアドレスのなんらかのハッシュ値が関係しているのかもしれません。謎です。

いかんせん原因が不明で手元の環境での試行錯誤の対処療法であり、これが万全かどうかはよく分かりませんが、症状など役に立てば幸いです。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。