M5StackなどのESP32系のマイコンボードに種々のゲームコントローラを接続する方法についてまとめる。

- 開発環境
- ゲームコントローラの分類
- 2.4GHz特小無線 (USBドングル使用)
- PlayStation4 コントローラ
- PlayStation3 コントローラ
- PlayStation5 コントローラ
- Nintendo Switch コントローラ
- Xbox コントローラ
- Bluetooth Classic HID
- BLE HID
- Bluepad32ライブラリ
- まとめ
開発環境
※ UIFlow とか Python とか知りません
※ ESP-IDF はめんどうなので避けたい
ゲームコントローラの分類
| 接続方式 | ESP32との接続 |
|---|---|
| 2.4GHz特小無線 (USBドングル使用) | × (USBモジュールで対応可? / ESP32-S3なら対応可?) |
| Bluetooth Classic | △ (無印ESP32のみ対応可) |
| BLE | 〇 (ただし製品が少ない) |
本稿では、有線式(USB) についてはふれない。ただし、USBドングルを使用する2.4GHz特小無線タイプのものと同様に扱えるはず。
2.4GHz特小無線 (USBドングル使用)
2.4GHz帯の特小無線 (特定小電力無線) を用いるタイプである。専用のUSBドングルが付属し、PC等のUSBポートに接続する。PC側からはUSB接続のHIDデバイスとして見える。つまり有線式のUSBゲームコントローラと等価である。ちなみにBluetoothやWiFiも2.4GHz帯の特定小電力無線の一種ではあるが、一般的に「特小無線」というとBluetoothやWiFiなどではない独自規格のものを指すことが多い。特小無線のゲームコントローラは、Bluetoothのものに比べて接続が安定しており遅延が少ないと言われる。価格帯は幅広く、下に挙げた安価なものから、2万円を超えるゲーマー仕様の高級機種までさまざまである。
このタイプのゲームコントローラをマイコンに接続するには、当然ながらマイコン側にUSBホスト機能が必要である。M5Stack Core / Core2など無印ESP32系のマイコンボードにはUSBホスト機能が無いので、このタイプのゲームコントローラと接続することはできない。
ただし、M5Stack用USBモジュールなどを外付けすることで対応可能かもしれない。(未検証)
また、ESP32-S3はUSBホスト機能を有しており、ゲームコントローラを接続している例がある。ただ、当方では未検証である。ATOMS3はUSBコネクタが1つしかなく、書き込みと兼用になるため不便である。ESP32-S3-DevKitCなら書き込み用USBコネクタとUSBホスト用コネクタが別々だが、USBホスト用コネクタに5V出力が出ていないので細工が必要となる。
PlayStation4 コントローラ
PlayStation 4用のコントローラ DualShock4 およびその互換機である。Bluetooth Classic のHIDプロファイルで通信する。Bluetooth Classicを使用するため、ESP32シリーズでは無印ESP32のみが対応可能で、最近のESP32-C3やESP32-S3は対応できない。M5Stack Core / Core2, ATOM Lite / Matrix などは無印ESP32系なので対応できる。
純正品のDualShock4はすでに生産終了している。生産期間は2013年~2021年ごろまで。市場在庫品や中古品は現在でも入手可能だが、価格は高めである。新品であれば定価を大きく超える1万円前後となる。また、比較的安価な互換コントローラは現在も多数出回っているが、後述のESP32用ライブラリとは相性問題があり、接続できるものとできないものがある。原因はよく分からない。下記に接続が確認できた製品を紹介する。
接続できなかったものとしては がある。ただし、そもそもメーカーの想定外の用途であるから、この製品を貶すつもりはない。
Arduino用ライブラリとしては、PS4Controller がライブラリマネージャからインストールできる。GitHubリポジトリは下記のURLである。使い方の参考になる記事も紹介しておく。
- https://github.com/pablomarquez76/PS4_Controller_Host
- https://github.com/aed3/PS4-esp32 (元になったライブラリ。こちらは開発終了。)
PlayStation3 コントローラ
PlayStation 3用のコントローラ DualShock3 である。DualShock4と同様に、Bluetooth Classic のHIDプロファイルで通信する。Bluetooth Classicを使用するため、ESP32シリーズでは無印ESP32のみが対応可能で、最近のESP32-C3やESP32-S3は対応できない。
DualShock3はとっくに生産終了している。生産期間は2007年~2017年ごろまで。ただし、現在でも中古品やジャンク品が比較的安価に入手可能である。
Arduino用ライブラリとしては、PS3 Controller Host がライブラリマネージャからインストールできる。GitHubリポジトリは下記のURLである。使い方の参考になる記事も紹介しておく。
PlayStation5 コントローラ
PlayStation 5用のコントローラ DualSense である。DualShock4と同様に、Bluetooth Classic のHIDプロファイルで通信する。Bluetooth Classicを使用するため、ESP32シリーズでは無印ESP32のみが対応可能で、最近のESP32-C3やESP32-S3は対応できない。
DualSenseは現行品であり入手しやすいが価格が非常に高い。2025年4月現在、ソニーストアで11,480円(税込)、量販店等でもおおむね1万円超となっている。
Arduino用ライブラリとしては、ps5-esp32があり、下記のURLのGitHubリポジトリから入手できる。ただし、当方では DualSense を持っていないため未確認である。
Nintendo Switch コントローラ
これらのコントローラは、Bluetooth Classic のHIDプロファイルで通信する。Bluetooth Classicを使用するため、ESP32シリーズでは無印ESP32のみが対応可能で、最近のESP32-C3やESP32-S3は対応できない。
Proコントローラについては、比較的安価な互換コントローラも多数出回っている。下記に接続が確認できた製品を紹介する。
Arduino用ライブラリとしては後述するBluepad32が利用できる。
その他、ESP-IDFでの実装例も紹介しておく。
Xbox コントローラ
Xboxのコントローラは、世代によって方式が異なる。
| 機種 | 発売年 | コントローラ |
|---|---|---|
| Xbox | 2002 | 有線式のみ |
| Xbox 360 | 2005 | 2.4GHz特小無線 |
| Xbox One | 2014 | 2.4GHz特小無線 |
| Xbox One S Xbox One X |
2016 2017 |
2.4GHz特小無線 / Bluetooth Classic |
| Xbox Series X|S | 2020 | 2.4GHz特小無線 / BLE |
【参考】Xbox Wireless Controller - Wikipedia
外観の見分け方としては、Xboxボタン(しいたけボタン) と上面パーツ側ならBluetooth対応で、前面パーツ側ならBluetooth非対応。Bluetooth対応のもので、真ん中に共有ボタン( 凵 に ↑ のマーク) があって、十字キーが丸い皿状になっていたらBLE HID、そうでないならBluetooth Classic HID。ただしこれは純正品の場合であって、互換機についてはよく確認が必要である。

Arduino用ライブラリとしては、Bluetooth ClassicタイプのものもBLEタイプのものも、後述するBluepad32が利用できる。
また、BLE対応のXboxワイヤレスコントローラ専用のArduino用ライブラリとしては、XboxSeriesXControllerESP32_asukiaaa がライブラリマネージャからインストールできる。GitHubリポジトリは下記のURLである。開発者の記事も紹介しておく。
このライブラリはBLEのスタックとして NimBLE を使用しているが、NimBLE は通常のボードパッケージで利用可能なライブラリとして配布されている。ライブラリマネージャでXboxSeriesXControllerESP32_asukiaaa をインストールすれば、NimBLEなどの依存ライブラリは自動的にインストールされる。
Bluetooth Classic HID
Bluetooth Classic のHIDプロファイルで通信するタイプである。Bluetooth Classicを使用するため、ESP32シリーズでは無印ESP32のみが対応可能で、最近のESP32-C3やESP32-S3は対応できない。
前述の通り、PlayStation 3/4/5 のコントローラや、Nintendo Switch のジョイコンやProコントローラーもBluetooth Classic HIDデバイスである。XboxのワイヤレスコントローラもBluetooth Classic対応のものはBluetooth Classic HIDデバイスとしても使用できる。また、PC用ゲームコントローラは2.4GHz特小無線と並んでこのタイプが多い。つまり、このタイプのゲームコントローラは非常に種類が多いと言える。独自ブランドでBluetooth Classic HIDのコントローラを出しているメーカーとしては8BitDoが有名である。
Arduino用ライブラリとしては後述するBluepad32が汎用性が高い。
その他、参考となる記事を紹介しておく。
BLE HID
BLE (Bluetooth Low Energy) のHIDプロファイル (HOGP) で通信するタイプである。BLEを使用するため、無印ESP32だけでなくESP32-C3やESP32-S3でも対応可能であり、利用できるマイコンボードの幅が広い。
ただし、このタイプのゲームコントローラ製品は少ない。遅延が大きいことや既存のゲーム機と互換性が無いことなどが原因ではないかと考えられる。前述の通り、最新世代のXboxワイヤレスコントローラはこのタイプであるが、この他に入手性の良いものは見つけられなかった。
Arduino用ライブラリとしては後述するBluepad32が汎用性が高い。
その他、参考となる記事を紹介しておく。
Bluepad32ライブラリ
これまでに紹介したほとんどすべてのBluetooth (Classic / BLE) のゲームコントローラに対応したライブラリとしてBluepad32 がある。 Bluepad32はArduino環境でも利用できる。Bluepad32は、PlayStation 3/4/5 コントローラ、Nintendo Switchコントローラ、Xboxコントローラ、8BitDoシリーズなど多くのコントローラをサポートしている。
ただし、Bluepad32 は btstack に依存しており、Arduinoの通常のESP32ボードパッケージやM5Stackボードパッケージでは利用できない。これらの環境ではBluetoothスタックとしてbtstackではなくBluedroidが使用されており、しかも HIDホスト機能が無効化されているようだ。そこでBluepad32プロジェクトでは、ESP32 + Bluepad32 用のボードパッケージを提供している。導入方法については下記を参照。
ただし、M5StackライブラリなどBluedroid前提で作られているライブラリを併用するとビルドエラーが生じることがあり、その場合は多少のハックが必要となる。詳しくは下記の記事を参照。
また、btstack は商用利用する場合には別途ライセンス契約が必要であることも注意されたい。
まとめ
| コントローラ | Bluetooth |
|---|---|
| PS3/4/5🎮 | BT Classic HID |
| Switch🎮 | BT Classic HID |
| Xbox🎮 旧型 | 非対応 |
| Xbox🎮 2016年型 | BT Classic HID |
| Xbox🎮 2020年型 | BLE HID |
| コントローラ種別 | 無印ESP32 | ESP32-C3 | ESP32-S3 |
|---|---|---|---|
| 2.4GHz特小無線🎮 | ※1 | ※1 | ※2 |
| BT Classic HID🎮 | Bluepad32 | × | × |
| PS3/4/5🎮 | Bluepad32 or 専用ライブラリ | × | × |
| BLE HID🎮 ※3 | Bluepad32 | ||
| Xbox🎮 2020年型 | Bluepad32 or 専用ライブラリ | ||
※1 外付けUSBホストで対応可?
※2 外付けUSBホスト or 内蔵USBホストで対応可?
※3 Xbox🎮以外ではほとんど見かけない。