ESP32 - Joystick
Dieses Tutorial zeigt Ihnen, wie Sie einen Joystick mit dem ESP32 und MicroPython verwenden. Im Einzelnen lernen wir:
- Wie ein Joystick funktioniert
- Wie Sie einen Joystick mit einem ESP32 verbinden
- Wie Sie MicroPython-Code für den ESP32 schreiben, um Werte vom Joystick auszulesen
- Wie Sie MicroPython-Code für den ESP32 schreiben, um die Joystick-Daten in nützliche Daten umzuwandeln (z. B. XY-Koordinaten oder Motorrichtungen)

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 Starter-Kit (ESP32 enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Überblick über Joystick
Sie haben vielleicht schon gesehen, wie ein Joystick zur Steuerung von Spielen, Spielzeug oder sogar großen Maschinen wie Baggern verwendet wird. Der Joystick besteht aus zwei Potentiometern, die quadratisch angeordnet sind, und einem Knopf. Er liefert folgende Ausgaben:
- Einen Bereich von 0 bis 4095 für die horizontale Position (links-rechts).
- Einen Bereich von 0 bis 4095 für die vertikale Position (auf-ab).
- Den Status des Knopfes, entweder EIN (HIGH) oder AUS (LOW).
Durch die Kombination der beiden Analogwerte erzeugt der Joystick 2D-Koordinaten, die in Ruhestellung zentriert sind. Die tatsächliche Richtung dieser Koordinaten können Sie mit einem Testcode ermitteln, den wir im nächsten Abschnitt behandeln. Manche Anwendungen nutzen alle drei Ausgaben, andere nur einige davon.
Pinbelegung
Ein Joystick hat fünf Pins:
- GND-Pin: Wird mit Masse (0V) verbunden.
- VCC-Pin: Wird mit der 3,3V-Versorgung des ESP32 verbunden.
- VRX-Pin: Liefert einen Analogwert für die horizontale Position (X-Koordinate); verbinden Sie diesen Pin mit einem ADC-Pin des ESP32.
- VRY-Pin: Liefert einen Analogwert für die vertikale Position (Y-Koordinate); verbinden Sie diesen Pin mit einem ADC-Pin des ESP32.
- SW-Pin: Ist mit dem Drucktaster des Joysticks verbunden, der normalerweise offen ist. Verwenden Sie einen Pull-up-Widerstand, damit dieser Pin HIGH ist, wenn der Knopf nicht gedrückt ist, und LOW, wenn er gedrückt ist.

Funktionsweise
- Bewegung nach links/rechts:
- Wenn Sie den Joystick nach links oder rechts bewegen, ändert sich die Spannung am VRX-Pin.
- Eine Bewegung nach links senkt die Spannung auf 0 Volt, eine Bewegung nach rechts erhöht sie auf 3,3 Volt.
- Der ESP32 misst diese Spannung und wandelt sie in eine Zahl zwischen 0 und 4095 um, wobei 0V dem Wert 0 und 3,3V dem Wert 4095 entspricht.
- Bewegung nach oben/unten:
- Wenn Sie den Joystick nach oben oder unten bewegen, ändert sich die Spannung am VRY-Pin.
- Eine Bewegung nach oben senkt die Spannung auf 0 Volt, eine Bewegung nach unten erhöht sie auf 3,3 Volt.
- Der ESP32 liest diese Spannung und wandelt sie, wie beim VRX-Pin, in eine Zahl von 0 bis 4095 um.
- Kombinierte Bewegungen:
- Wenn Sie den Joystick in eine beliebige Richtung bewegen, ändert sich die Spannung sowohl am VRX- als auch am VRY-Pin, abhängig von seiner Position auf jeder Achse.
- Drücken des Joysticks:
- Wenn Sie den Joystick nach unten drücken, wird ein interner Knopf betätigt.
- Ein mit dem SW-Pin verbundener Pull-up-Widerstand bewirkt, dass die Spannung an diesem Pin beim Drücken von 3,3V auf 0V fällt.
- Der ESP32 interpretiert dies als digitales Signal und liest HIGH (3,3V), wenn nicht gedrückt, und LOW (0V), wenn gedrückt.
Wenn der Joystick bewegt wird, ändern sich die Spannungen an den Pins VRX und VRY, die der ESP32 als Werte von 0 bis 4095 liest. Das Drücken des Joysticks ändert die Spannung am SW-Pin, und der ESP32 erkennt diese Änderung als HIGH oder LOW.
Verdrahtungsdiagramm
- So verbinden Sie ESP32 und Joystick über ein Breadboard

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
- So verbinden Sie ESP32 und Joystick über ein Schraubklemmen-Breakout-Board

So programmieren Sie den Joystick
Glücklicherweise hat DIYables eine Joystick-Bibliothek entwickelt, die die Verwendung eines Joysticks mit dem ESP32 erheblich vereinfacht.
ESP32 MicroPython-Code - Zustand des Joysticks auslesen
Das folgende MicroPython-Skript:
- Liest Analogwerte von einem Joystick.
- Prüft, ob der Joystick-Knopf gedrückt oder losgelassen ist.
- Liest die Anzahl der Knopfdrücke des Joysticks.
Schnelle Schritte
So richten Sie Ihren MicroPython-Code auf dem ESP32 mit der Thonny IDE ein und führen ihn aus:
- Stellen Sie sicher, dass die Thonny IDE auf Ihrem Computer installiert ist.
- Vergewissern Sie sich, dass die MicroPython-Firmware auf Ihrem ESP32-Board installiert ist.
- Wenn Sie zum ersten Mal einen ESP32 mit MicroPython verwenden, lesen Sie die Anleitung ESP32 MicroPython Erste Schritte mit Schritt-für-Schritt-Anweisungen.
- Verbinden Sie den Joystick gemäß dem Schaltplan mit dem ESP32.
- Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
- Öffnen Sie die Thonny IDE auf Ihrem Computer.
- Gehen Sie in der Thonny IDE zu Tools Options.
- Wählen Sie im Tab Interpreter aus dem Dropdown-Menü MicroPython (ESP32) aus.
- Stellen Sie sicher, dass der richtige Port ausgewählt ist. Die Thonny IDE erkennt ihn normalerweise automatisch, eventuell müssen Sie ihn aber manuell auswählen (z. B. COM12 unter Windows oder /dev/ttyACM0 unter Linux).
- Navigieren Sie in der Thonny IDE zu Tools Manage packages.
- Suchen Sie nach “DIYables-MicroPython-Joystick” und finden Sie die von DIYables erstellte Joystick-Bibliothek.
- Klicken Sie auf DIYables-MicroPython-Joystick und dann auf die Schaltfläche Install, um die Joystick-Bibliothek zu installieren.

- Kopieren Sie den bereitgestellten MicroPython-Code und fügen Sie ihn in den Editor von Thonny ein.
- Speichern Sie den Code auf Ihrem ESP32:
- Klicken Sie auf die Schaltfläche Save oder drücken Sie Ctrl+S.
- Wählen Sie im Speicherdialog MicroPython device.
- Nennen Sie die Datei main.py.
- Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript auszuführen.
- Bewegen Sie den Joystick nach links, rechts, oben oder unten.
- Drücken Sie oben auf den Joystick.
- Sehen Sie sich die Meldung in der Shell unten in Thonny an.
Beobachten Sie bei der Verwendung des Joysticks die Meldung in der Shell unten in Thonny. Ist der X-Wert 0, bedeutet das eine Position links; andernfalls rechts. Ist der Y-Wert 0, steht das für eine Position oben; andernfalls unten.
Beachten Sie, dass der theoretische Bereich für die X/Y-Werte zwar von 0 bis 4095 reicht, die Werte in der Praxis diese Extreme aufgrund der mechanischen Eigenschaften des Joysticks aber möglicherweise nicht erreichen. Diese Abweichung ist normal und für die meisten Anwendungen akzeptabel.
※ Notiz:
Dieses Tutorial zeigt, wie Sie mit der Funktion adc.read() Werte von einem ADC (Analog-Digital-Wandler) auslesen, der mit einem Joystick verbunden ist. Der ADC des ESP32 eignet sich für Projekte, die keine hohe Präzision erfordern. Wenn Ihr Projekt jedoch genaue Messungen benötigt, beachten Sie Folgendes:
- Der ESP32-ADC ist nicht perfekt genau und muss für präzise Ergebnisse eventuell kalibriert werden. Jedes ESP32-Board kann leicht abweichen, daher ist eine Kalibrierung für jedes einzelne Board erforderlich.
- Die Kalibrierung kann besonders für Anfänger schwierig sein und liefert nicht immer genau die gewünschten Ergebnisse.
Für Projekte mit hohen Präzisionsanforderungen sollten Sie einen externen ADC (z. B. ADS1115) mit dem ESP32 verwenden oder einen Arduino wählen, der einen zuverlässigeren ADC besitzt. Wenn Sie den ESP32-ADC dennoch kalibrieren möchten, lesen Sie den ESP32 ADC Calibration Driver.
Analogwerte in die Befehle MOVE LEFT/RIGHT/UP/DOWN umwandeln
Der folgende MicroPython-Code wandelt Analogwerte in die Befehle MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN um.
Schnelle Schritte
- Kopieren Sie den obigen Code und fügen Sie ihn in den Editor der Thonny IDE ein.
- Speichern Sie das Skript auf Ihrem ESP32-Board.
- Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript auszuführen.
- Bewegen Sie den Joystick nach links, rechts, oben, unten oder in eine beliebige Richtung.
- Sehen Sie sich die Meldung in der Shell unten in Thonny an.
※ Notiz:
Es kann sein, dass kein Befehl, ein Befehl oder sogar zwei Befehle gleichzeitig ausgegeben werden, z. B. UP und LEFT zusammen.
Analogwerte in Winkel umwandeln, um zwei Servomotoren zu steuern
Details erfahren Sie im Tutorial ESP32 MicroPython Joystick steuert Servomotor.
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.