Arduino Nano ESP32 - Joystick
In diesem Tutorial werden wir lernen, wie man einen Joystick mit dem Arduino Nano ESP32 verwendet. Im Detail werden wir lernen:
- Wie der Joystick funktioniert
- Wie man den Joystick an den Arduino Nano ESP32 anschließt und dafür programmiert
- Wie man die Werte des Joysticks in steuerbare Werte wie XY-Koordinaten sowie Auf- und Abwärtsrichtung sowie Links- und Rechtsrichtung des Motors umwandelt

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
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 in einem Spielcontroller, in einem Spielzeugcontroller oder sogar in einer großen echten Maschine wie einer Baggersteuerung.
Der Joystick besteht aus zwei Potentiometern, die zueinander gegenüberliegen, und einem Taster. 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 Tasters (HIGH oder LOW)
Die Kombination zweier analoger Werte kann zweidimensionale Koordinaten erzeugen, deren Mittelpunktwerte auftreten, wenn der Joystick in der Ruheposition ist. Die reale Richtung der Koordinaten lässt sich einfach identifizieren, wenn Sie einen Testcode ausführen (im nächsten Teil).
Einige Anwendungen verwenden alle drei Ausgänge. Einige Anwendungen 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 (3,3 V) verbunden werden
- VRX-Pin: liefert einen analogen Wert, der der horizontalen Position entspricht (X-Koordinate genannt)
- VRY-Pin: liefert einen analogen Wert, 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, hat der SW-Pin einen HIGH-Pegel, wenn er nicht gedrückt ist, und einen LOW-Pegel, wenn er gedrückt ist

Wie es funktioniert
- Wenn Sie den Joystick nach links/rechts drücken, ändert sich die Spannung am VRX-Pin. Der Spannungsbereich reicht von 0 bis 3,3 V (0 links, 3,3 V rechts). Der Spannungswert ist proportional zur Position des Joysticks ⇒ Der Messwert am analogen Pin des ESP32 liegt im Bereich von 0 bis 4095.
- Wenn Sie den Joystick nach oben/unten drücken, ändert sich die Spannung am VRY-Pin. Der Spannungsbereich reicht von 0 bis 3,3 V (0 oben, 3,3 V unten). Der Spannungswert ist proportional zur Position des Joysticks ⇒ Der Messwert am analogen Pin des ESP32 liegt im Bereich von 0 bis 4095.
- Wenn Sie den Joystick in eine beliebige Richtung drücken, ändern sich die Spannungen an VRX- und VRY-Pins proportional zur Projektion der Position auf jeder Achse.
- Wenn Sie den Joystick von oben nach unten drücken, schließt sich der Drucktaster im Inneren des Joysticks. Wenn wir am SW-Pin einen Pull-up-Widerstand verwenden, ändert sich der Pegel am SW-Pin von 3,3 V zu 0 V ⇒ Der Messwert am digitalen Pin des ESP32 ändert sich von HIGH zu LOW.
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wie man Joysticks programmiert
Der Joystick besteht aus zwei Teilen: analog (X- und Y-Achsen) und digital (Druckknopf).
- Für die analogen Teile (X- und Y-Achsen) muss lediglich der Wert vom analogen Eingangspin mithilfe der Funktion analogRead() gelesen werden.
- Für den digitalen Teil (Pushbutton): Es handelt sich um einen Knopf. 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 Button finden Sie im Arduino Nano ESP32 - Button-Tutorial. Der Code wird im nächsten Abschnitt dieses Tutorials vorgestellt.
Nachdem wir die Werte von den Analogeingängen gelesen haben, müssen wir sie möglicherweise in steuerbare Werte umwandeln. Der nächste Teil wird dazu Beispielcodes bereitstellen.
Arduino Nano ESP32 Code
Dieser Abschnitt wird die folgenden Arduino Nano ESP32-Beispielcodes bereitstellen:
- Beispielcode: liest analoge Werte vom Joystick
- Beispielcode: liest den Knopfzustand vom Joystick
- Beispielcode: wandelt analoge Werte in die Befehle MOVE_LEFT, MOVE_RIGHT, MOVE_UP und MOVE_DOWN um
- Beispielcode: wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern (z. B. in Pan-Tilt-Kamera)
Liest analoge Werte vom Joystick
Schnelle Schritte
Um mit dem Arduino Nano ESP32 zu beginnen, befolgen Sie diese Schritte:
- Wenn Sie neu bei Arduino Nano ESP32 sind, lesen Sie das Tutorial darüber, wie Sie die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichten: wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
- Verdrahten Sie die Bauteile entsprechend dem bereitgestellten Diagramm.
- Schließen Sie das Arduino Nano ESP32-Board über ein USB-Kabel an Ihren Computer an.
- Öffnen Sie die Arduino IDE auf Ihrem Computer.
- Wählen Sie das Arduino Nano ESP32-Board und den entsprechenden COM-Port aus.
- Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
- Klicken Sie auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf das Arduino Nano ESP32 hochzuladen.
- Drücken Sie den Joystick maximal bis zum Anschlag und drehen Sie ihn anschließend in einer Kreisbewegung (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- Prüfen Sie das Ergebnis im seriellen Monitor.
- Während du den Daumen am Joystick drehst, beobachte weiterhin den Serial Monitor
- Wenn der X-Wert 0 ist, markiere oder merke die aktuelle Position als Linksrichtung – die entgegengesetzte Richtung ist rechts
- Wenn der Y-Wert 0 ist, markiere oder merke die aktuelle Position als Richtung nach oben – die entgegengesetzte Richtung davon ist Richtung nach unten
- Öffne den Bibliotheks-Manager, indem du auf das Bibliotheks-Manager-Symbol in der linken Navigationsleiste der Arduino IDE klickst
- Suche „ezButton“, dann finde die Button-Bibliothek von ArduinoGetStarted.com
- Klicke 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 Upload-Schaltfläche in der Arduino IDE, um den Code auf den Arduino Nano ESP32 hochzuladen
- Drücke den Joystick-Knopf nach links/rechts/oben/unten
- Drücke den Joystick-Knopf von oben
- Schau dir das Ergebnis im Serial Monitor an.
- Kopiere den obigen Code und öffne ihn mit der Arduino IDE.
- Klicke auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf den Arduino Nano ESP32 hochzuladen.
- Bewege den Joystick nach links/rechts/oben/unten oder in eine beliebige Richtung.
- Schau dir das Ergebnis im Serial Monitor an.
- Der ADC des Arduino Nano ESP32 ist nicht perfekt genau und muss möglicherweise kalibriert werden, um korrekte Ergebnisse zu liefern. Jedes Arduino Nano ESP32-Board kann sich leicht unterscheiden, daher ist für jedes einzelne Board eine Kalibrierung notwendig.
- Die Kalibrierung kann herausfordernd sein, insbesondere für Anfänger, und liefert möglicherweise nicht immer die exakten Ergebnisse, die Sie wünschen.
Sie haben möglicherweise bemerkt, dass der analoge Wert nicht proportional zur Joystick-Bewegung ist. Dieses Problem liegt nicht am Joystick selbst, sondern am ADC des Arduino Nano ESP32. Am Ende dieses Tutorials wird erklärt, warum das passiert.
Liest analoge Werte und den Knopfzustand eines Joysticks aus
Schnelle Schritte

Konvertiert einen analogen Wert in Bewegungsbefehle nach links/rechts/oben/unten
Schnelle Schritte
※ Notiz:
Zu einem Zeitpunkt kann es keinen Befehl, einen Befehl oder zwei Befehle geben (z. B. UP und LEFT gleichzeitig)
Konvertiert analoge Werte in Winkel, um zwei Servomotoren zu steuern
Die Details werden im Tutorial Arduino Nano ESP32 - Joystick-Steuerung des Servo-Motors vorgestellt.
※ Notiz:
Dieses Tutorial verwendet die Funktion analogRead(), um Werte von einem ADC (Analog-Digital-Wandler) zu lesen, der an einen Sensor oder eine Komponente angeschlossen ist. Der ADC des Arduino Nano ESP32 eignet sich für Projekte, die keine hohe Genauigkeit erfordern. Für Projekte, die präzise Messungen erfordern, beachten Sie Folgendes:
Für Projekte mit hoher Präzision ziehen Sie in Erwägung, einen externen ADC (z. B. ADS1115) mit dem Arduino Nano ESP32 zu verwenden oder einen anderen Arduino zu nutzen, wie zum Beispiel den Arduino Uno R4 WiFi, der über einen zuverlässigeren ADC verfügt. Wenn Sie den ADC des Arduino Nano ESP32 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.