ESP32 S3 - Drehgeber
Erfahren Sie, wie Sie einen Drehgeber (Rotary Encoder) mit Ihrem ESP32 S3 verwenden, um Drehrichtung und Position zu erkennen. Dieses Tutorial führt Sie durch die Verdrahtung, einfachen Polling-Code und einen effizienteren Interrupt-basierten Ansatz – so haben Sie alles, was Sie brauchen, um einen Drehgeber in Ihre ESP32 S3 Projekte einzubinden.
Was Sie bauen werden:
- Eine Schaltung, die einen Drehgeber mit dem ESP32 S3 verbindet
- Einen Sketch, der die Drehung im und gegen den Uhrzeigersinn erkennt
- Eine Interrupt-gesteuerte Version für bessere Leistung und Zuverlässigkeit
- Eine Grundlage für praktische Anwendungen wie Menüs, Motorsteuerung und Lautstärkeregelung

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 S3 Starter-Kit (ESP32 S3 enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Überblick über Rotary Encoder
Ein Drehgeber ist ein Positionssensor, der Drehbewegungen in elektrische Signale umwandelt. So kann ein Mikrocontroller wie der ESP32 S3 sowohl die Richtung als auch das Ausmaß der Drehung bestimmen. Anders als ein Potentiometer kann sich ein Drehgeber endlos drehen, ohne an einen mechanischen Anschlag zu stoßen. Damit ist er ideal für Navigationsmenüs, Motordrehzahlsteuerung und andere Anwendungen, bei denen eine unbegrenzte Drehung erforderlich ist.
Dieses Tutorial konzentriert sich auf inkrementelle Drehgeber – den gängigsten und einsteigerfreundlichsten Typ für ESP32 S3 Projekte.
Wichtige Spezifikationen
Inkrementelle Drehgeber erzeugen zwei digitale Impulssignale (A und B), die um 90 Grad phasenverschoben sind. Durch den Vergleich, welches Signal sich zuerst ändert, kann der ESP32 S3 bestimmen, ob der Knopf im oder gegen den Uhrzeigersinn gedreht wurde. Die meisten Module haben außerdem einen integrierten Taster, der durch Herunterdrücken des Knopfs betätigt wird. Der Drehgeber kann sich ohne Endanschläge in beide Richtungen endlos drehen, und das Modul akzeptiert typischerweise eine Versorgungsspannung von 3,3V bis 5V.
Pinbelegung des Drehgebermoduls

Das Drehgebermodul hat fünf Pins, die mit Ihrem ESP32 S3 verbunden werden:
- CLK-Pin (Ausgang A): Primärer Impulsausgang, der die Drehung signalisiert – gibt pro Raststufe einen vollständigen LOW-HIGH-LOW-Zyklus aus
- DT-Pin (Ausgang B): Sekundärer Impulsausgang, der CLK um 90 Grad nacheilt und zur Bestimmung der Drehrichtung dient
- SW-Pin: Anschluss des Tasters – normalerweise offen, liefert im Ruhezustand HIGH und LOW, wenn der Knopf gedrückt wird (benötigt einen Pull-up-Widerstand)
- VCC-Pin (+): Stromversorgung – mit 3,3V am ESP32 S3 verbinden
- GND-Pin: Massebezug – mit GND verbinden
Drehgeber vs. Potentiometer
Man könnte einen Drehgeber leicht mit einem Potentiometer verwechseln, doch beide erfüllen grundlegend unterschiedliche Zwecke. Ein Potentiometer gibt eine analoge Spannung aus, die proportional zu einem festen Drehbereich (typischerweise 270°) ist, und eignet sich daher am besten zum Lesen einer absoluten Position. Ein Drehgeber gibt über eine unbegrenzte Drehung digitale Impulse aus und ist daher ideal, um relative Bewegungen zu verfolgen – wie weit und in welche Richtung der Knopf gedreht wurde.
Wichtige Unterschiede
Drehgeber drehen sich endlos um 360°, während Potentiometer einen festen mechanischen Anschlag haben. Drehgeber geben digitale Impulse aus, Potentiometer eine analoge Spannung. Drehgeber erfassen relative Bewegungen, Potentiometer absolute Positionen. Für ESP32 S3 Projekte, die Menünavigation, Motordrehzahlregelung oder einen Knopf benötigen, der sich endlos drehen lässt, ist ein Drehgeber die richtige Wahl.
Funktionsweise eines Drehgebers

Im Inneren des Drehgebers ist eine geschlitzte Scheibe mit einer gemeinsamen Masse (Pin C) verbunden. Beim Drehen des Knopfs berühren die Pins A und B abwechselnd die gemeinsame Masse und erzeugen zwei Impulsfolgen, die um 90 Grad phasenverschoben sind – ein Verfahren, das als Quadraturkodierung bezeichnet wird.
Innerer Mechanismus:
- Eine geschlitzte Scheibe im Inneren ist mit Pin C (gemeinsame Masse) verbunden
- Die Pins A und B berühren beim Drehen des Knopfs die gemeinsame Masse
- Die Reihenfolge des Kontakts von A und B bestimmt die Drehrichtung
- Es entstehen zwei um 90 Grad phasenverschobene Impulssignale (Quadraturkodierung)
Erkennen der Drehrichtung:
- Drehung im Uhrzeigersinn: Pin A berührt die Masse vor Pin B
- Drehung gegen den Uhrzeigersinn: Pin B berührt die Masse vor Pin A
- Der ESP32 S3 liest den Zustand von Pin B in dem Moment, in dem Pin A wechselt, und bestimmt daraus die Richtung

Logik der Richtungserkennung:
Wenn Pin A von LOW auf HIGH wechselt:
- Wenn Pin B HIGH ist: Der Knopf wurde gegen den Uhrzeigersinn gedreht
- Wenn Pin B LOW ist: Der Knopf wurde im Uhrzeigersinn gedreht
※ Notiz:
Die Pins A und B sind mit den Pins CLK und DT verbunden. Je nach Hersteller kann die Reihenfolge abweichen. Der folgende Code wurde mit Drehgebern von DIYables getestet.
So programmieren Sie einen Drehgeber
Der ESP32 S3 liest den Drehgeber, indem er den CLK-Pin auf Zustandsänderungen überwacht. Wenn CLK von LOW auf HIGH wechselt, liest der Sketch sofort den DT-Pin:
- Der ESP32 S3 überwacht den CLK-Pin fortlaufend
- Wenn CLK von LOW auf HIGH steigt, wird sofort der DT-Pin gelesen
- Wenn DT HIGH ist: Drehung gegen den Uhrzeigersinn → Zähler um 1 erhöhen
- Wenn DT LOW ist: Drehung im Uhrzeigersinn → Zähler um 1 verringern
- Diese Methode erfasst zuverlässig sowohl die Richtung als auch den kumulierten Drehbetrag
Verdrahtungsdiagramm
Verbinden Sie den Drehgeber wie im folgenden Diagramm gezeigt mit Ihrem ESP32 S3. Verwenden Sie kurze Jumperkabel, um die Signalleitungen sauber zu halten und Störungen zu vermeiden, die zu Fehlzählungen führen könnten.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Sicherheitshinweise
Verbinden Sie VCC immer mit dem 3,3V-Pin des ESP32 S3 statt mit 5V, um innerhalb der Spannungstoleranz der GPIOs des Boards zu bleiben. Der SW-Pin benötigt einen Pull-up-Widerstand – die meisten Drehgebermodule haben bereits einen auf der Platine, prüfen Sie das jedoch an Ihrem Modul, bevor Sie auf einen externen Widerstand verzichten.
| Drehgeber-Pin | ESP32 S3 Pin |
|---|---|
| CLK | GPIO19 |
| DT | GPIO20 |
| SW | GPIO21 |
| VCC | 3.3V |
| GND | GND |
ESP32 S3 Code – Drehgeber
Der folgende Sketch demonstriert das grundlegende Auslesen eines Drehgebers am ESP32 S3 mit einem Polling-Ansatz. Er erkennt die Drehrichtung, führt einen laufenden Zähler der Raststufen und meldet Tastendrücke – alles wird im Seriellen Monitor ausgegeben. Die ezButton-Bibliothek übernimmt die Entprellung des Tasters automatisch, sodass die Tastenerkennung ohne zusätzlichen Boilerplate-Code zuverlässig funktioniert.
Hinweis: Dieser Code verwendet die ezButton-Bibliothek, um die Entprellung des Tasters zu vereinfachen und Tastendrücke zuverlässig zu erkennen.
Schnelle Schritte
- Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
- Bibliothek installieren: Fügen Sie die ezButton-Bibliothek über den Bibliotheksverwalter der Arduino IDE hinzu
- Code öffnen: Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein
- Hochladen: Klicken Sie auf die Schaltfläche Upload, um den Sketch auf Ihren ESP32 S3 zu übertragen
- Drehung testen: Drehen Sie den Knopf des Drehgebers einige Klicks im Uhrzeigersinn und dann gegen den Uhrzeigersinn
- Taster testen: Drücken Sie den Knopf des Drehgebers herunter
- Ergebnisse ansehen: Öffnen Sie den Seriellen Monitor (115200 Baud), um Drehrichtung und Zählerstand zu sehen
- Profi-Tipp: Jeder fühlbare "Klick" beim Drehen des Knopfs wird Raststufe genannt – der Drehgeber erzeugt pro Raststufe genau einen vollständigen Impulszyklus, sodass Ihre Klickanzahl und der Zählerwert immer übereinstimmen
Ausgabe im Seriellen Monitor:
Code-Erklärung
Lesen Sie die ausführlichen zeilenweisen Kommentare im obigen Code, um zu verstehen, wie jeder Abschnitt funktioniert.
ESP32 S3 Code – Drehgeber mit Interrupt
Der Polling-Ansatz im vorherigen Sketch funktioniert gut für einfache Projekte, verbraucht aber Rechenzeit des ESP32 S3, selbst wenn der Knopf nicht bewegt wird – und kann Impulse verpassen, wenn anderer Code zu langsam läuft. Interrupts lösen beide Probleme, indem die Hardware den ESP32 S3 in dem Moment benachrichtigt, in dem ein CLK-Wechsel auftritt. So bleibt die Hauptschleife für andere Aufgaben frei.
Der folgende Sketch verwendet einen Hardware-Interrupt am CLK-Pin, um den Drehgeber effizient auszulesen. Die Richtungslogik ist identisch mit der Polling-Version, aber der Zustand des Drehgebers wird in einer Interrupt-Service-Routine (ISR) erfasst, sodass keine Impulse verloren gehen.
Wenn Sie den Knopf drehen, zeigt der Serielle Monitor dieselben Drehinformationen wie im vorherigen Beispiel an, jedoch mit besserer Leistung und Zuverlässigkeit auf dem ESP32 S3.
※ Notiz:
- Ein Interrupt genügt: Viele Tutorials hängen Interrupts sowohl an CLK als auch an DT, aber ein einziger Interrupt an CLK reicht aus und verbraucht weniger Ressourcen
- Schlüsselwort volatile verwenden: Deklarieren Sie Variablen, die in einer ISR geändert werden, immer als volatile, damit der Compiler sie nicht wegoptimiert
- ISRs kurz halten: Vermeiden Sie Aufrufe von Serial.print() oder Serial.println() innerhalb eines Interrupts – setzen Sie ein Flag oder aktualisieren Sie einen Zähler und erledigen Sie die Ausgabe in der Hauptschleife
- Schnelle Ausführung: Je kürzer und schneller Ihre ISR ist, desto zuverlässiger funktioniert das Auslesen des Drehgebers unter Last
ESP32 S3 Drehgeber-Anwendungen
Drehgeber harmonieren hervorragend mit der Rechenleistung und Konnektivität des ESP32 S3 und ermöglichen eine Vielzahl interaktiver und steuerungsorientierter Projekte.
- Servomotorsteuerung: Drehen Sie den Drehgeber, um die Servoposition präzise Klick für Klick einzustellen
- LED-Helligkeitsdimmer: Bilden Sie den Zähler des Drehgebers auf ein PWM-Tastverhältnis ab, um die Helligkeit gleichmäßig und stufenlos einzustellen
- Drehzahlsteuerung für Schrittmotoren: Regeln Sie die Schrittmotordrehzahl in Echtzeit für Robotik- und CNC-Anwendungen
- Digitale Lautstärkeregelung: Stellen Sie die Audiolautstärke in Hausautomations- oder Bluetooth-Lautsprecher-Projekten ein
- OLED-Menünavigation: Blättern Sie durch Drehen des Knopfs durch Menüeinträge und wählen Sie per Tastendruck aus
- Intelligentes Thermostat: Stellen Sie die Zieltemperatur mit dem Drehgeber ein und zeigen Sie den Wert auf einem Bildschirm an
- RGB-LED-Farbwähler: Bilden Sie die Position des Drehgebers auf den Farbton ab und durchlaufen Sie das gesamte Farbspektrum
Video-Tutorial
Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3 Projekt an.
Fordern Sie sich heraus
Da Sie nun einen funktionierenden Drehgeber am ESP32 S3 haben, probieren Sie diese Übungen aus, um Ihr Verständnis zu vertiefen und das Projekt weiterzuentwickeln.
- Anfänger: Schließen Sie eine LED an, die jedes Mal einmal blinkt, wenn der Taster des Drehgebers gedrückt wird
- Anfänger: Zeigen Sie den aktuellen Zählerwert auf einer 4-stelligen 7-Segment-Anzeige statt im Seriellen Monitor an
- Fortgeschritten: Steuern Sie mit dem Zähler des Drehgebers den Winkel eines Servomotors – bilden Sie den Zählerbereich auf 0–180 Grad ab
- Fortgeschritten: Bauen Sie einen PWM-basierten LED-Helligkeitsdimmer, der in Echtzeit auf die Drehung des Drehgebers reagiert
- Experte: Erstellen Sie ein mehrstufiges Menüsystem auf einem OLED- oder LCD-Display, mit dem Drehgeber zum Blättern und dem Taster zur Auswahl