A Bluetooth gamepad "host" for the ESP32 / ESP32-S3 / ESP32-C3.
Add Bluetooth gamepad support to your projects easily.
Choose your target platform:
Platform | Start here | Further info | Community projects |
---|---|---|---|
Arduino IDE | Doc | Controller for Tello drone | |
Arduino using ESP-IDF toolchain | Template project | Doc | Lego Robot (video), gbaHD Shield (a GameBoy consolizer) |
Arduino + NINA coprocessor | Arduino Library | Doc | Philips CD-i meets Bluetooth |
CircuitPython + AirLift coprocessor | CircuitPython Library | Doc | Quico console, Controlling 4 servos (video) |
Unijoysticle | Unijoysticle2 | Doc | |
MightyMiggy | Unijoysticle for Amiga | Doc | |
Custom | Doc |
- Supports most, if not all, modern Bluetooth gamepads and mice (see below)
- Fast (very low latency)
- Small footprint
- Uses only one core (CPU0). The remaining one is free to use.
- C11 based
- Open Source (see below)
- Sony DualSense (PS5)
- Sony DUALSHOCK 4 (PS4)
- Sony DUALSHOCK 3 (PS3)
- Nintendo Switch Pro controller
- Nintendo Switch JoyCon
- Nintendo Wii U controller
- Nintendo Wii Remote + accessories
- Xbox Wireless controller (models 1708, 1914, adaptive)
- Android controllers
- Steam controller
- Stadia controller
- PC/Window controller
- 8BitDo controllers
- iCade
- Mouse
- Keyboards
- And more
NOTE: Original ESP32 supports all listed controllers. ESP32-S3 and ESP32-C3 support only a subset.
See: Supported gamepads, supported mice and supported keyboards
-
Install ESP-IDF
Install the ESP32 toolchain. Use version 4.4 or 5.0. Might work on newer / older ones, but not tested.
-
Clone repo
git clone --recursive https://gitlab.com/ricardoquesada/bluepad32.git
-
Integrate BTStack into ESP32
cd ${BLUEPAD32}/external/btstack/port/esp32 # This will install BTstack as a component inside Bluepad32 source code (recommended). # Remove "IDF_PATH=../../../../src" if you want it installed in the ESP-IDF folder IDF_PATH=../../../../src ./integrate_btstack.py
-
Compile Bluepad32
Choose target platform (default is Unijoysticle):
cd ${BLUEPAD32}/src idf.py menuconfig
The Bluepad32 options are in:
Components config
->Bluepad32
(find it at the very bottom) ->Target platform
And compile it:
idf.py build
-
Flash it
idf.py flash monitor
Bluepad32 is open source, licensed under Apache 2.
However, Bluepad32 depends on the great BTStack library. Which is free to use for open source projects. But commercial for closed-source projects. Contact them for details. They are very friendly + helpful (Iโm not affiliated with them).