Last Updated on 9. Februar 2024 by sfambach
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
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
Programmierung
Bibliotheken
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.
Verbindungstest
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 oder in Linux eingebunden 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 Peripheriestest erstellt, der einfach die entsprechenden Ports abfragt und auf der Konsole ausgibt. Er basiert auf meiner CustomKeyboard Bibliothek. Mein Versuchaufbau sieht wie folgt aus.
Versuchsaufbau
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.
Peripherie | ESP GPIO |
---|---|
Poti 1 Mittelpin | 25 |
Poti 2 Mittelpin | 26 |
Joystick X Achse | 14 |
Joystick Y Achse | 27 |
Joystick Taster | 12 |
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 folgenden Link zu finden:
Die Ausgabe sollte wie folgt aussehen:
Alles zusammen
Nun bleibt nicht viel mehr als die beiden Test zusammen zu fügen und die von der Physik gelesenen Werte mit BlueTooth zu übermitteln.
Der Beispielcode ist hier zu finden:
Es werden drei Achsen X,Y, RX und RY sowie der Knopf 0 übertragen.
Gesteste 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 Blutooth Funktionalität herstellen, danach die Peripherie anschliessen und zum Schluß 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
- PS3-Controller unter Ubuntu 2x.04
- PS3-Controller unter Windows 10
- Bluetooth Gamecontroller unter Ubuntu 2x.04
- Bluetooth Gamecontroller unter Windows 10
Quellen
https://github.com/lemmingDev/ESP32-BLE-Gamepad
https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles
https://en.wikipedia.org/wiki/USB_human_interface_device_class
https://www.usb.org/sites/default/files/documents/hid1_11.pdf