ESP32 BlueTooth Gamepad

Last Updated on 4. Oktober 2026 by sfambachLink-Status: OK

Manchmal braucht es eine Fernbedienung oder einen Joystick, um ein Projekt zu testen oder einfach Spaß zu haben. Im Folgenden wird die Anbindung eines ESP32 über BlueTooth beschrieben. Zur Steuerung werden ein kleiner analoger Joystick und zwei Potis angeschlossen.

Fakten

Benötigte Hardware

  • ESP32 BLE Board (ESP32, ESP32C3, ESP32S3)
  • Taster, Joysticks, Potis …
  • Kabel zum Verdrahten
  • (Optional) Bread Board
  • (Optional) I²C Expansion Board
  • (Optional) USB Dongle für den Rechner

Benötigte Software

  • Arduino GUI
  • https://github.com/h2zero/NimBLE-Arduino
  • https://github.com/lemmingDev/ESP32-BLE-Gamepad
  • (Optional) Custom Keyboard Bibliothek
  • (Optional für Linux) bluez

Anwendungsbereiche

  • Fernbedienung
  • RC Steuerung
  • Joystick für Spiele

Ansichten

Joystick Versuchsaufbau – Verdrahtung wird unten noch näher beschrieben

Programmierung

Bibliotheken

Die folgenden beiden Bibliotheken werden benötigt. Dies kann über den Download des Zips von Git oder direkt in der Arduino GUI geschehen. Die dritte ist nicht nötig für den BlueTooth Betrieb, wird aber in meinen Beispielen verwendet.

NimBLE-ArduinoLink-Status: OK

ESP32-BLE-GamepadLink-Status: OK

CustomKeyboardLink-Status: OK

Verbindungstest

Der erste Test soll zeigen, ob eine Verbindung mit dem PC möglich ist. Hierfür habe ich einen USB-Dongle an den PC angeschlossen und mir einen ESP32 Wroom geschnappt. Das Testprogramm wird bei der ESP32-BLE-GamepadLink-Status: OK Bibliothek mitgeliefert und heißt GamepadLink-Status: OK. Das Programm simuliert in Abständen von einer halben Sekunde das Drücken und Lösen der Taste 5 (bzw. 4) sowie das Setzen der Achsenwerte.

Den Sketch für den Arduino compilieren und aufspielen. Wie der Controller in Windows Link-Status: OKoder in Linux Link-Status: OKeingebunden wird, kann in den gelinkten Beiträgen nachgesehen werden.

So sollte der Simulator dann im jeweiligen Betriebssystem aussehen.

Peripherietest

Um vorab zu überprüfen, ob die Potis und der Joystick auch funktionieren, habe ich einen Peripherietest erstellt, der einfach die entsprechenden Ports abfragt und auf der Konsole ausgibt. Er basiert auf meiner CustomKeyboard Link-Status: OKBibliothek. Mein Versuchsaufbau sieht wie folgt aus.

Versuchsaufbau

Verbindungsplan

Pinbelegung

Hier die verwendeten Pins. Diese sind im Grunde frei wählbar. Für die Potis und die Achsen werden analoge Input Pins benötigt, und da der AD-Wandler 1 nicht funktioniert, wenn Wifi oder BLE aktiv ist, habe ich Pins des ADC2 verwendet.

PeripherieESP GPIO
Poti 1 Mittelpin25
Poti 2 Mittelpin26
Joystick X Achse14
Joystick Y Achse27
Joystick Taster12
Pinbelegung am ESP32 Wroom

ACHTUNG nicht vergessen, die beiden anderen Pins der Potis mit der Versorgungsspannung und Masse zu verbinden und auch an die Stromversorgung für den Joystick denken.

Quellcode

Der Sourcecode für den Test ist unter folgendem Link zu finden:

https://github.com/sfambach/esp32/tree/6e8ab27afbf1394bf51c2333cddb67b81479e9fd/project/ESP32BLE-Joystick/src/ESP32-BLE-Gamepad_InputTestLink-Status: OK

Die Ausgabe sollte wie folgt aussehen:

Ausgabe Peripherietest

Alles zusammen

Nun bleibt nicht viel mehr als die beiden Tests zusammenzufügen und die von der Physik gelesenen Werte mit BlueTooth zu übermitteln.

Der Beispielcode ist hier zu finden:

https://github.com/sfambach/esp32/tree/e442fb75d588c93a59c3316685182d3358aa51df/project/ESP32BLE-Joystick/src/ESP32-BLE-Gamepad_FinalTestLink-Status: OK

Es werden drei Achsen X,Y, RX und RY sowie der Knopf 0 übertragen.

Getestet werden kann das Ganze wieder in Windows in der „GameController Einrichtung“ und unter Linux mit dem Tool jstest.gtk (siehe Kapitel Verbindungstest).

Probleme

Bis jetzt keine

Sonstiges

Controller unter Windows einbinden

Controller unter Linux einbinden

Fazit

Wie immer Schritt für Schritt zum Ziel. Zuerst die Bluetooth Funktionalität herstellen, danach die Peripherie anschließen und zum Schluss beides kombinieren. So fiel die Implementierung leicht. Die Bluetooth Funktionalität des ESP erscheint ausgereift. Die schlechte Analog-/Digitalwandlung muss durch Mittelwertbildung verbessert werden, aber zum Spielen sollte es ausreichen.

Verwandte Beiträge

Quellen

NimBLE-ArduinoLink-Status: OK

NimBLE-Arduino New User GuideLink-Status: OK

NimBLE-Arduino API Link-Status: OK

https://github.com/lemmingDev/ESP32-BLE-GamepadLink-Status: OK

https://en.wikipedia.org/wiki/List_of_Bluetooth_profilesLink-Status: OK

https://en.wikipedia.org/wiki/USB_human_interface_device_classLink-Status: OK

https://www.usb.org/sites/default/files/documents/hid1_11.pdfLink-Status: OK

https://github.com/nilutpolkashyap/esp32_microros_joystick/blob/main/cmd_vel_publisher_udp/cmd_vel_publisher_udp.inoLink-Status: OK

DatumÄnderungAutor
04.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Groß-/Kleinschreibung, Grammatiksfambach
03.10.2026Log-Liste eingefügtsfambach
04.01.2024Beitrag erstelltsfambach
Logbuch

2 Gedanken zu „ESP32 BlueTooth Gamepad“

  1. Hallo Karl.-Heinz
    im vorliegenden Fall habe ich nichts besonseres eingestellt, Ich verwende Ubuntu, Aber hatte auch schon so meine Probleme mit Bluetooth und anderen Linux distires wie proxmox. Eine Lösung habe ich leider icht gefunden.

    LG Stefan

  2. Guten Tag ,
    ich habe mal eine Frage .Unter Windows und Android kann ich ganz einfach pairen und connecten. unter Linux /Bacotera/Recalbox/Retropie kann ich nicht verbinden. bzw er wird andauernd getrennt . Also nicht brauchbar. Gibt es zu Linux nen Trick? könnten Sie mir da helfen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert