ESP32 - Drehencoder
In diesem Leitfaden lernen Sie, wie man den Drehencoder mit einem ESP32 verwendet. Hier ist, was wir lernen werden:
- Was sind die Unterschiede zwischen einem Drehencoder und einem Potentiometer
- Wie der Drehencoder funktioniert
- Wie man den Drehencoder mit dem ESP32 verbindet
- Wie man Code für den ESP32 schreibt, um die Drehrichtung und die Position des Drehencoders OHNE Interrupt zu lesen.
- Wie man Code für den ESP32 schreibt, um die Drehrichtung und die Position des Drehencoders MIT Interrupt zu lesen.
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 Drehencoder
Ein drehender Knopf, wie bei einem Radio, kann Signale senden, die sich in Elektrizität umwandeln. Es hilft uns zu wissen, wie weit er gedreht wurde und wo er platziert ist. Es gibt zwei Haupttypen:
- Inkrementalencoder: Dieser verwendet schnelle Signale, um zu messen, wie stark sich die Position eines Objekts verändert hat.
- Absolutencoder: Diese Art liefert für jeden Punkt einen Geheimcode, der dabei hilft, die Position eines Objekts zu bestimmen, selbst wenn die Stromversorgung ausfällt.
Diese Lektion handelt hauptsächlich vom ersten Typ, dem inkrementellen Encoder.
Pinbelegung des Drehencoder-Moduls

Ein Drehencoder-Modul hat vier Pins:
- CLK-Pin (Ausgang A): ist der Hauptimpuls, der angibt, wie viel Drehung erfolgt ist. Jedes Mal, wenn Sie den Drehknopf um eine Detent (Klick) in eine der Richtungen drehen, gibt der CLK-Pin ein Signal aus, das einen vollständigen Zyklus durchläuft (LOW → HIGH → LOW).
- DT-Pin (Ausgang B): verhält sich wie der CLK-Pin, liefert jedoch ein Signal, das dem CLK-Signal um 90 Grad hinterherhinkt. Es hilft uns, die Drehrichtung (im Uhrzeigersinn oder gegen den Uhrzeigersinn) zu bestimmen.
- SW-Pin: stammt vom Encoder-Knopf. Er ist normalerweise offen. Wenn wir diesem Pin einen Pull-up-Widerstand hinzufügen, ist der SW-Pin HIGH, wenn der Knopf nicht gedrückt ist, und LOW, wenn er gedrückt wird.
- VCC-Pin (+): muss mit VCC verbunden werden (zwischen 3,3 und 5 Volt)
- GND-Pin: muss mit GND (0 V) verbunden werden
Drehgeber gegen Potentiometer
Sie könnten den Drehencoder mit dem Potentiometer verwechseln, aber sie sind unterschiedliche Bauteile. Hier ist ein Vergleich zwischen ihnen:
- Ein Drehencoder ist wie die moderne Version eines Potentiometers, aber er kann mehr leisten.
- Ein Drehencoder kann sich in einer vollen Umdrehung drehen, ohne anzuhalten, während ein Potentiometer nur etwa drei Viertel des Kreises drehen kann.
- Ein Drehencoder erzeugt Impulse, während ein Potentiometer die analoge Spannung ausgibt.
- Ein Drehencoder ist praktisch, wenn man einfach herausfinden muss, wie weit sich der Drehknopf bewegt hat, nicht genau, wo er sich befindet. Ein Potentiometer ist praktisch, wenn man wirklich genau wissen muss, wo sich der Drehknopf befindet.
Wie ein Drehencoder funktioniert

Im Encoder befindet sich eine kleine Scheibe mit Schlitzen, die mit einem Pin namens C verbunden ist, der als gemeinsame Masse fungiert. Du hast noch zwei weitere Pins, A und B.
- Wenn Sie den Drehknopf drehen, berühren die Pins A und B den gemeinsamen Massepin C, aber die Reihenfolge, in der sie ihn berühren, hängt davon ab, in welche Richtung Sie den Drehknopf drehen (entweder im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- Diese Kontakte erzeugen zwei Signale. Sie unterscheiden sich im Timing leicht, weil der eine Pin die Masse früher berührt als der andere. Diese Signale sind um 90 Grad phasenverschoben, was als Quadraturkodierung bezeichnet wird.
- Wenn Sie den Drehknopf im Uhrzeigersinn drehen, berührt Pin A die Masse früher als Pin B. Wenn Sie ihn gegen den Uhrzeigersinn drehen, trifft Pin B zuerst die Masse, noch bevor Pin A dies tut.
- Indem wir überprüfen, wann jeder Pin die Masse berührt oder verlässt, können wir herausfinden, in welche Richtung der Drehknopf sich dreht. Das tun wir, indem wir prüfen, was mit Pin B passiert, wenn Pin A sich ändert.

Wenn A von LOW auf HIGH wechselt:
- Wenn B hoch ist, wird der Drehknopf gegen den Uhrzeigersinn gedreht.
- Wenn B niedrig ist, wird der Drehknopf im Uhrzeigersinn gedreht.
※ Notiz:
Pin A und B sind mit CLK- und DT-Pins verbunden. Je nach Hersteller kann die Reihenfolge jedoch unterschiedlich sein. Die unten aufgeführten Codes wurden mit dem Drehencoder von DIYables getestet.
So programmiert man einen Drehencoder
- ESP32 liest das Signal vom CLK-Pin
- Wenn der Zustand von LOW auf HIGH wechselt, liest der ESP32 den Zustand des DT-Pins.
- Wenn der DT-Pin HIGH ist, dreht sich der Knopf gegen den Uhrzeigersinn, der ESP32 erhöht den Zähler um 1
- Wenn der DT-Pin LOW ist, dreht sich der Knopf im Uhrzeigersinn, der ESP32 verringert den Zähler um 1
Verdrahtungsdiagramm

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.
ESP32-Code – Drehencoder
Der untenstehende ESP32-Code tut Folgendes:
- Erkennt die Richtung und den Betrag der Drehung des Drehencoders.
- Wenn festgestellt wird, dass der Knopf um eine Raststufe (Klick) im Uhrzeigersinn gedreht wird, erhöhe den Zähler um eins.
- Wenn festgestellt wird, dass der Knopf um eine Raststufe (Klick) gegen den Uhrzeigersinn gedreht wird, verringere den Zähler um eins.
- Erkennt, ob der Knopf gedrückt ist.
Um den Code für das Entprellen von Tastern zu vereinfachen, wird die ezButton-Bibliothek verwendet.
Schnelle Schritte
Wenn dies das erste Mal ist, dass Sie den ESP32 verwenden, sehen Sie sich wie man die Entwicklungsumgebung für ESP32 in der Arduino IDE einrichtet.
- Installieren Sie die ezButton-Bibliothek in der Arduino-IDE.
- 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.
- Drehen Sie den Knopf zuerst im Uhrzeigersinn, dann gegen den Uhrzeigersinn.
- Drücken Sie den Knopf.
- Sehen Sie das Ergebnis im seriellen Monitor.
Code-Erklärung
Schau dir die Kommentarzeilen im Code an.
ESP32-Code – Drehencoder mit Interrupt
Im vorherigen Code kann das Polling, um den Zustand des Pins kontinuierlich zu überprüfen, Ressourcen des ESP32 verschwenden und zu verpassten Zählwerten führen, wenn die Ausführung anderer Codeabschnitte langsam ist.
Eine effektive Lösung besteht darin, den Interrupt zu verwenden, wodurch die Notwendigkeit des Pollings entfällt. Dies ermöglicht dem ESP32, weitere Aufgaben auszuführen, ohne Zählungen zu verpassen. Der folgende ESP32-Code verwendet den Interrupt, um die Richtung und Position des Drehencoders auszulesen.
Jetzt, während Sie den Drehknopf drehen, werden Sie Informationen im Serial Monitor sehen, ähnlich dem, was Sie im vorherigen Code gesehen haben.
※ Notiz:
- Sie könnten auf Tutorials auf anderen Websites stoßen, die zwei Interrupts für einen einzelnen Encoder verwenden, aber das ist unnötig und verschwenderisch. Nur ein Interrupt ist ausreichend.
- Es ist wichtig, das Schlüsselwort volatile für globale Variablen zu verwenden, die im Interrupt verwendet werden. Wenn man dies vernachlässigt, kann das zu unerwarteten Problemen führen.
- Halten Sie den Code innerhalb des Interrupts so einfach wie möglich. Vermeiden Sie die Verwendung von Serial.print() oder Serial.println() innerhalb des Interrupts.
ESP32 Drehencoder-Anwendung
Mit dem Drehgeber können wir die folgenden Anwendungen durchführen, aber nicht darauf beschränkt sein:
- ESP32 - Drehencoder steuert die Position des Servomotors
- ESP32 - Drehencoder steuert die Helligkeit der LED
- ESP32 - Drehencoder steuert die Geschwindigkeit des Schrittmotors
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.