Bluetooth gamepad, mouse and keyboard support for ESP32 and PicoW
Bluepad32
A Bluetooth controller "host" for the ESP32, ESP32-S3, ESP32-C3, ESP32-C6, ESP32-H2, Raspberry Pi Pico W, Pico 2 W, and Posix (Linux, macOS).
Add Bluetooth gamepad, mouse and keyboard support to your projects easily.
In other words, it allows you to control a robot using a DualSense controller.
Where to start
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) |
| Pico W | Pico W example | Doc | Pico Switch, PicoNtrol |
| ESP-IDF | ESP32 example | Doc | OGX-Wireless-Lite |
| Posix (Linux, macOS) | Posix example | Doc | |
| Unijoysticle | Unijoysticle2 | Doc | |
| MightyMiggy | Unijoysticle for Amiga | Doc |
Features
- Supports most, if not all, modern Bluetooth gamepads, mice and keyboards (see below)
- Supports ESP32 and Pico W families
- Supported APIs: ESP-IDF, Pico-SDK, Arduino and CircuitPython
- Fast (very low latency)
- Small footprint
- Uses only one core (CPU0). The remaining one is free to use.
- C11 based
- Open Source (see below)
- Easy to integrate into 3rd party projects
Supported controllers
- 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
- Atari joystick
- iCade
- Mouse
- Keyboards
- And more
NOTE: Original ESP32, Pico W and Pico 2 W support all listed controllers. ESP32-S3, ESP32-C3, ESP32-C6 and ESP32-H2 only support a subset.
See: Supported gamepads, supported mice and supported keyboards
Pre-compiled binaries
Download pre-compiled binaries for Unijoysticle, Nina, AirLift, MightyMiggy:
Creating your project
See the examples folder which includes examples for:
- Bluepad32 for ESP32 (ESP32, ESP32-S3, ESP32-C3, ESP32-C6 and ESP32-H2)
- Bluepad32 for Pico W (Pico W and Pico 2 W)
- Bluepad32 for Posix (Linux, macOS)
Arduino examples are in:
Support
License
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.
If you are developing a commercial product for:
Notice: I’m not affiliated with BTstack people. They are super friendly and willing to help.