ESP32でClassic HIDコントローラーを利用

概要

ESP32シリーズ用BLEライブラリEspBle
概要ESP32用のArduinoライブラリであるEspBleを作ってみました。ESP32の標準ライブラリは微妙なところがあるのと、API関連をEspUsbシリーズと統一したもので作り直してみました。作成物こちらのライブラリになります。まずE…

またまたEspBleの機能紹介です。長い記事を書くのは大変なので機能別に分離した記事にしています。さてBluetooth Classicでだけ使える機能として古いゲーム機用のゲームパッド接続があると思います。しかしながら最近のArduinoでは無効化されていて使えません。そこでがんばって使えるようにしてみました。

過去からの経緯

大昔はBluetooth ClassicでClassic HIDに接続することができました。なのでPS3などのデュアルショックをESP32から制御する事例などがあったと思います。しかしながらArduino-ESP32 2.0.0(2021年)ぐらいからClassic HIDが無効化されるようになりました。

2.0.0 – enable BT HID host support? ?? Issue #5582 ?? espressif/arduino-esp32
Hardware: Board: ESP32 Feather Core Installation version: 2.0.0-rc1 IDE name: Arduino IDE Flash Frequency: 80Mhz PSRAM e…

このへんの話題なのですが、ビルドエラーになったので除外されそのまま現在までその状況のままです。ただし、これはArduinoだけの問題で、ESP-IDFでは利用が可能でした。つまりBluedroid側の問題ではなく、Arduino Coreへの導入方法が問題だったみたいです。

今回Dual Hostに対応するときに自前ビルドができますのでClassic HIDを有効化して内部に組み込んでいます。そしてHIDの層はBLEとClassicで接続後はまったく同じAPIで操作が可能になっているはずです。

GitHub – ricardoquesada/bluepad32: Bluetooth gamepad, mouse and keyboard support for ESP32 and PicoW
Bluetooth gamepad, mouse and keyboard support for ESP32 and PicoW – ricardoquesada/bluepad32

ちなみにEspBleが登場する前まではArduino Coreを独自ビルドしたBluepad32などを使う必要がありました。ただし2年前にリリースが止まっているのでおすすめはしません。

まとめ

なるべくクリーンなArduino CoreでBLEとClassicを共存できるようになりましたので、共通API化で便利に使えるようになったはずです。

ただし、手元にはClassic HIDコントローラーがないので実機では試せていません。試せて動いたらおしえてください。ただし、テストではClassic HID同士で接続できることまでは確認しています。

コメント