Last Updated on 9 February 2024 by Suffocation
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 analog Joystick und zwei Potis angeschlossen
Facts
Benötigte Hardware
- ESP32 BLE Board (ESP32, ESP32C3, ESP32S3)
- Sensors, Joysticks, Potentiometers …
- Cable for wiring
- (Optional) Breadboard
- (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 Library
- (Optional für Linux) bluez
Areas of application
- Remote control
- RC control
- Joystick für Spiele
Views

Programming
Libraries
Die folgenden beiden Bibliotheken werden benötigt. Dies können ü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.
Connection test
Der erste Test soll zeigen ob eine Verbindung mit dem PC möglich ist. Hierfür habe ich einen USB-Dongel an den PC angelschossen umd mir einen ESP32 Wroom geschnappt. Das Testprogramm wird bei der ESP32 BLE Gamepad Bibliothek mit geliefert und heißt Gamepad. 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 or in Linux eingebunden wird, kann in den gelinkten Beiträgen nachgesehen werden.
This is how the simulator should look in the respective operating system.




Periphery test
Um vorab zu überprüfen ob die Potis und der Joystick auch funktionieren, habe ich einen Peripheriestest erstellt, der einfach die entsprechenden Ports abfragt und auf der Konsole ausgibt. Er basiert auf meiner CustomKeyboard Library. My experimental setup is as follows.
Experimental setup

Pin assignment
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.
| Periphery | ESP GPIO |
|---|---|
| Pot 1 Middle pin | 25 |
| Pot 2 Middle Pin | 26 |
| Joystick X-axis | 14 |
| Joystick Y-axis | 27 |
| Joystick button | 12 |
ATTENTION 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.
Source code
Der Sourcecode für den Test ist unter folgenden Link zu finden:
The output should look like this:

All together
Nun bleibt nicht viel mehr als die beiden Test zusammen zu fügen und die von der Physik gelesenen Werte mit BlueTooth zu übermitteln.
The example code can be found here:
Es werden drei Achsen X,Y, RX und RY sowie der Knopf 0 übertragen.
The whole thing can be tested again in Windows in the „Game Controller Setup“ and under Linux with the jstest.gtk tool (see chapter Connection test).
Problems
Not yet
Hello Karl-Heinz
In the current case, I haven't set anything specific. I'm using Ubuntu, but I've also had problems with Bluetooth and other Linux distributions like Proxmox. Unfortunately, I haven't found a solution.
LG Stefan
Good day, ,
I have a question. On Windows and Android I can easily pair and connect. On Linux /Bacotera/Recalbox/Retropie I can't connect. Or rather, it's constantly disconnected. So, it's not usable. Is there a trick for Linux? Could you help me with that?