ESP32 - Joystick
In diesem Tutorial werden wir lernen, wie man einen Joystick mit dem ESP32 verwendet. Genauer gesagt werden wir Folgendes lernen:
- Wie ein Joystick funktioniert
- Wie man einen Joystick mit dem ESP32 verbindet und dafür programmiert
- Wie man die Werte des Joysticks in steuerbare Werte umwandelt, z. B. XY-Koordinaten sowie die Auf- bzw. Abwärtsrichtung und die Links-/Rechtsrichtung des Motors

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
1 | × | DIYables ESP32 Starter-Kit (ESP32 enthalten) | |
1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über Joystick-Sensor
Du siehst den Joystick wahrscheinlich irgendwo, zum Beispiel bei einem Gamecontroller, einem Spielzeugcontroller oder sogar bei einer großen echten Maschine wie einem Baggersteuergerät.
Der Joystick besteht aus zwei Potentiometern, die zueinander rechtwinklig angeordnet sind, und einem Druckknopf. Daher liefert er die folgenden Ausgänge:
- Ein analoger Wert (von 0 bis 4095), der der horizontalen Position entspricht (X-Koordinate genannt)
- Ein analoger Wert (von 0 bis 4095), der der vertikalen Position entspricht (Y-Koordinate genannt)
- Ein digitaler Wert eines Pushbuttons (HIGH oder LOW)
Die Kombination aus zwei analogen Werten kann zweidimensionale Koordinaten erzeugen, deren Werte in der Mitte liegen, wenn der Joystick in der Ruheposition ist. Die tatsächliche Richtung der Koordinaten lässt sich einfach ermitteln, wenn Sie einen Testcode ausführen (im nächsten Teil).
Manche Anwendungen verwenden alle drei Ausgänge, andere verwenden einige der drei Ausgänge.
Pinbelegung
Ein Joystick hat fünf Pins:
- GND-Pin: muss mit GND (0 V) verbunden werden
- VCC-Pin: muss mit VCC (5 V) verbunden werden
- VRX-Pin: gibt einen analogen Wert aus, der der horizontalen Position entspricht (X-Koordinate genannt).
- VRY-Pin: gibt einen analogen Wert aus, der der vertikalen Position entspricht (Y-Koordinate genannt).
- SW-Pin: ist der Ausgang des Druckknopfs im Joystick. Er ist normalerweise offen. Wenn wir an diesem Pin einen Pull-up-Widerstand verwenden, wird der SW-Pin HIGH sein, wenn er nicht gedrückt ist, und LOW, wenn er gedrückt wird.

Wie es funktioniert
- Wenn Sie den Joystick nach links oder rechts drücken, ändert sich die Spannung am VRX-Pin. Der Spannungsbereich liegt von 0 bis 5 V (0 links und 5 V rechts). Der Spannungswert ist proportional zur Position des Joysticks; der Messwert am analogen Eingang des ESP32 liegt im Bereich von 0 bis 4095.
- Wenn Sie den Joystick nach oben oder unten drücken, ändert sich die Spannung am VRY-Pin. Der Spannungsbereich liegt von 0 bis 5 V (0 oben und 5 V unten). Der Spannungswert ist proportional zur Position des Joysticks; der Messwert am analogen Eingang des ESP32 liegt im Bereich von 0 bis 4095.
- Wenn Sie den Joystick in eine beliebige Richtung drücken, ändert sich die Spannung sowohl am VRX- als auch am VRY-Pin proportional zur Projektion der Position auf jeder Achse.
- Wenn Sie den Joystick von oben nach unten drücken, wird der Druckknopf im Inneren des Joysticks geschlossen. Wenn wir am SW-Pin einen Pull-up-Widerstand verwenden, ändert sich der Ausgang am SW-Pin von 5 V zu 0 V ⇒ Der Messwert am digitalen Pin des ESP32 ändert sich von HIGH zu LOW.
Verdrahtungsdiagramm
- Wie man ESP32 und Joystick mit dem Breadboard verbindet

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.
- So verbinden Sie ESP32 und Joystick mit Schraubklemmen-Breakout-Platine.

Wie man für Joystick programmiert
Der Joystick besteht aus zwei Teilen: analog (X- und Y-Achse) und digital (Druckknopf).
- Für die analogen Teile (X- und Y-Achse) muss lediglich der Wert vom analogen Eingangspin gelesen werden, und zwar mithilfe der [analogRead()]-Funktion.
- Für den digitalen Teil (Taster): Es handelt sich um einen Taster. Der einfachste und bequemste Weg ist die Verwendung der ezButton-Bibliothek. Diese Bibliothek unterstützt die Entprellung von Tastern und aktiviert außerdem einen internen Pull-Up-Widerstand. Weitere Informationen zum Taster finden Sie im ESP32 - Button-Tutorial. Der Code wird im nächsten Abschnitt dieses Tutorials vorgestellt.
Nachdem wir die Werte von analogen Pins gelesen haben, müssen wir sie möglicherweise in steuerbare Werte umwandeln. Der nächste Teil wird hierfür die Beispielcodes bereitstellen.
ESP32-Code
In diesem Abschnitt werden die folgenden ESP32-Beispielcodes bereitgestellt:
- Beispielcode: liest analoge Werte vom Joystick
- Beispielcode: liest analoge Werte und den Tastenstatus des Joysticks aus
- Beispielcode: wandelt analoge Werte in MOVE_LEFT-, MOVE_RIGHT-, MOVE_UP- und MOVE_DOWN-Befehle um
- Beispielcode: wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern (z. B. in einer Pan-Tilt-Kamera)
Liest analoge Werte vom Joystick
Schnelle Schritte
- Falls dies das erste Mal ist, dass Sie ESP32 verwenden, siehe wie man die Umgebung für ESP32 in der Arduino IDE einrichtet.
- Verbinden Sie die Verkabelung wie im obigen Bild.
- Schließen Sie das ESP32-Board über ein Micro-USB-Kabel an Ihren PC an.
- Öffnen Sie die Arduino IDE auf Ihrem PC.
- Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port aus.
- Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
- Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den ESP32 hochzuladen.
- Drücken Sie den Joystick-Knopf maximal bis zum Anschlag und drehen Sie ihn anschließend in einer Kreisbewegung (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- Sehen Sie das Ergebnis im Serial Monitor.
- Während Sie den Joystick drehen, beobachten Sie weiterhin den Serial Monitor
- Wenn der X-Wert 0 ist, markieren oder sich die aktuelle Position als links merken → die entgegengesetzte Richtung ist rechts
- Wenn der Y-Wert 0 ist, markieren oder sich die aktuelle Position als oben merken → die entgegengesetzte Richtung ist unten
- Klicken Sie auf das Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
- Suchen Sie nach „ezButton“, und finden Sie dann die Button-Bibliothek von ArduinoGetStarted.com.
- Klicken Sie auf die Installieren-Schaltfläche, um die ezButton-Bibliothek zu installieren.
- Kopiere den obigen Code und öffne ihn mit der Arduino IDE.
- Klicke auf die Schaltfläche Upload in der Arduino IDE, um den Code auf den ESP32 hochzuladen.
- Drücke den Joystick nach links/rechts/oben/unten.
- Drücke den Joystick von oben.
- Sieh das Ergebnis im Serial Monitor.
- Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
- Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den ESP32 hochzuladen.
- Drücken Sie den Joystick nach links/rechts/oben/unten oder in eine beliebige Richtung.
- Sehen Sie das Ergebnis im Serial Monitor.
- Der ESP32-ADC ist nicht perfekt genau und muss möglicherweise kalibriert werden, um korrekte Ergebnisse zu liefern. Jedes ESP32-Board kann etwas unterschiedlich sein, daher müssen Sie den ADC für jedes einzelne Board kalibrieren.
- Die Kalibrierung kann schwierig sein, insbesondere für Anfänger, und liefert möglicherweise nicht immer die genauen Ergebnisse, die Sie wünschen.
Vielleicht ist Ihnen aufgefallen, dass der analoge Wert nicht proportional zur Bewegung des Joysticks ist. Dieses Problem liegt nicht am Joystick selbst, sondern vielmehr am ADC des ESP32. Am Ende dieses Tutorials wird erklärt, warum dies geschieht.
Liest analoge Werte aus und liest den Knopfzustand eines Joysticks aus
Schnelle Schritte

Wandelt einen analogen Wert in Befehle zum Bewegen nach links, rechts, oben und unten um
Schnelle Schritte
※ Notiz:
Zu einem Zeitpunkt kann es keinen Befehl, einen Befehl oder zwei Befehle geben (z. B. UP und LEFT gleichzeitig).
Wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern
Die Details werden im Tutorial ESP32 - Joystick controls Servo Motor vorgestellt.
※ Notiz:
Dieses Tutorial verwendet die Funktion analogRead(), um Werte von einem ADC (Analog-Digital-Wandler) zu lesen, der an einen Joystick angeschlossen ist. Der ESP32-ADC ist gut für Projekte, die KEINE hohe Genauigkeit benötigen. Wer jedoch präzise Messungen benötigt, dem sei Folgendes zu beachten:
Für Projekte, die eine hohe Präzision benötigen, ziehen Sie den Einsatz eines externen ADC (z. B. ADS1115) mit dem ESP32 in Betracht oder die Verwendung eines Arduino-Boards, das über einen zuverlässigeren ADC verfügt. Wenn Sie den ESP32-ADC dennoch kalibrieren möchten, lesen Sie den ESP32 ADC Calibration Driver.
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.