ESP32 C3 Super Mini - Drehgeber

Erfahren Sie, wie Sie einen Drehgeber mit Ihrem ESP32 C3 Super Mini verwenden, um Drehrichtung und Position zu erkennen. Dieses einsteigerfreundliche Tutorial behandelt alles von der Verdrahtung bis zur Programmierung mit Interrupt-basierten Techniken.

In dieser Anleitung lernen Sie:

ESP32 C3 Super Mini - Drehgeber

Erforderliche Hardware

1×ESP32 C3 Super Mini
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Drehgeber
1×Breadboard
1×Verbindungskabel

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Überblick über Rotary Encoder

Ein Drehgeber ist ein Positionssensor, der Drehbewegungen in elektrische Signale umwandelt, um Richtung und Umfang der Drehung zu bestimmen.

Die wichtigsten Arten von Drehgebern:

  • Inkrementalgeber: Verwendet Impulssignale, um relative Positionsänderungen zu messen - perfekt zum Verfolgen von Drehungen
  • Absolutwertgeber: Liefert eindeutige Positionscodes, die die Positionsdaten auch bei Stromausfall behalten

Warum Drehgeber ideal für Einsteiger sind:

  • Einfach zu verwenden mit nur wenigen Pins
  • Liefern sowohl die Drehrichtung als auch die Erkennung von Tastendrücken
  • Können ohne mechanische Begrenzung endlos gedreht werden
  • Funktionieren hervorragend mit Interrupts für effiziente ESP32 C3 Super Mini Projekte

Dieses Tutorial konzentriert sich auf inkrementelle Drehgeber, den häufigsten Typ für Arduino- und ESP32-Projekte.

Pinbelegung des Drehgeber-Moduls

Pinbelegung des Drehgebers

Das Drehgeber-Modul hat 5 Pins, die Sie mit Ihrem ESP32 C3 Super Mini verbinden:

  • CLK-Pin (Ausgang A): Primärer Impulsausgang, der die Drehung signalisiert - gibt pro Rastklick einen vollständigen Zyklus (LOW → HIGH → LOW) aus
  • DT-Pin (Ausgang B): Sekundärer Impulsausgang, der CLK um 90 Grad nacheilt, um die Drehrichtung (im oder gegen den Uhrzeigersinn) zu bestimmen
  • SW-Pin: Anschluss des Drucktasters - normalerweise offen, liest HIGH, wenn nicht gedrückt, und LOW, wenn gedrückt (benötigt einen Pull-up-Widerstand)
  • VCC-Pin (+): Anschluss der Stromversorgung - mit 3,3V oder 5V verbinden
  • GND-Pin: Masseanschluss - mit GND (0V) verbinden

Drehgeber vs. Potentiometer

Sie könnten den Drehgeber mit einem Potentiometer verwechseln, aber sie dienen unterschiedlichen Zwecken.

Die wichtigsten Unterschiede:

  • Drehbereich: Drehgeber drehen sich endlos um 360°, während Potentiometer eine begrenzte Drehung haben (typischerweise 270°)
  • Ausgabetyp: Drehgeber geben digitale Impulse aus, während Potentiometer eine analoge Spannung ausgeben
  • Positionsverfolgung: Drehgeber verfolgen die relative Bewegung (wie weit gedreht wurde), während Potentiometer die absolute Position erfassen
  • Beste Verwendung: Drehgeber eignen sich hervorragend zum Verfolgen von Drehumfang und -richtung; Potentiometer sind besser, wenn Sie exakte Positionswerte benötigen
  • Modernes Design: Drehgeber sind die digitale Weiterentwicklung von Potentiometern mit erweiterten Fähigkeiten

Wie ein Drehgeber funktioniert

Ausgang des Drehgebers

Interner Mechanismus:

  • Eine geschlitzte Scheibe im Inneren ist mit Pin C (gemeinsame Masse) verbunden
  • Die Pins A und B stellen beim Drehen des Knopfes Kontakt mit der gemeinsamen Masse her
  • Die Reihenfolge des Kontakts zwischen A und B bestimmt die Drehrichtung
  • Dadurch entstehen zwei Impulssignale, die um 90 Grad phasenverschoben sind (Quadratur-Kodierung)

Erkennung 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
  • Durch Überwachen des Zustands von Pin B, wenn sich Pin A ändert, bestimmt der ESP32 C3 Super Mini die Drehrichtung
Wie ein Drehgeber funktioniert

Logik der Richtungserkennung:

Wenn Pin A von LOW auf HIGH wechselt:

  • Wenn Pin B HIGH ist: Knopf wurde gegen den Uhrzeigersinn gedreht
  • Wenn Pin B LOW ist: 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 DIYables-Drehgebern getestet.

Wie man einen Drehgeber programmiert

Grundlegender Ablauf beim Auslesen des Drehgebers mit dem ESP32 C3 Super Mini:

  • Der ESP32 liest fortlaufend das Signal vom CLK-Pin
  • Wenn der CLK-Zustand von LOW auf HIGH wechselt, liest der ESP32 sofort den Zustand des DT-Pins
  • Wenn der DT-Pin HIGH ist: Drehung gegen den Uhrzeigersinn erkannt → Zähler um 1 erhöhen
  • Wenn der DT-Pin LOW ist: Drehung im Uhrzeigersinn erkannt → Zähler um 1 verringern
  • Diese Methode erfasst sowohl die Richtung als auch den gesamten Drehumfang

Verdrahtungsdiagramm

Dieses Diagramm zeigt, wie Sie den Drehgeber mit Ihrem ESP32 C3 Super Mini Board verbinden.

ESP32 C3 Super Mini Drehgeber Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Verbindungstabelle:

Drehgeber-Pin ESP32 C3 Super Mini Pin
CLK D7
DT D6
SW D5
VCC 3,3V
GND GND

ESP32 C3 Super Mini Code – Drehgeber

Dieser ESP32 C3 Super Mini Code zeigt die grundlegende Funktionsweise eines Drehgebers:

Was dieser Code macht:

  • Erkennt die Drehrichtung (im oder gegen den Uhrzeigersinn)
  • Zählt Drehklicks, indem die Rastungen verfolgt werden
  • Erhöht den Zähler bei Drehung im Uhrzeigersinn
  • Verringert den Zähler bei Drehung gegen den Uhrzeigersinn
  • Erkennt Tastendrücke am Knopf des Drehgebers
/* * Dieser ESP32 C3 Super Mini Code wurde von newbiely.de entwickelt * Dieser ESP32 C3 Super Mini Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-c3/esp32-c3-super-mini-rotary-encoder */ #include <ezButton.h> // The library to use for SW pin #define CLK_PIN 7 // The ESP32 C3 SuperMini pin 7 connected to the rotary encoder's CLK pin #define DT_PIN 6 // The ESP32 C3 SuperMini pin 6 connected to the rotary encoder's DT pin #define SW_PIN 5 // The ESP32 C3 SuperMini pin 5 connected to the rotary encoder's SW pin #define DIRECTION_CW 0 // clockwise direction #define DIRECTION_CCW 1 // counter-clockwise direction int counter = 0; int direction = DIRECTION_CW; int CLK_state; int prev_CLK_state; ezButton button(SW_PIN); // create ezButton object for pin 7; void setup() { Serial.begin(115200); // Configure encoder pins as inputs pinMode(CLK_PIN, INPUT); pinMode(DT_PIN, INPUT); button.setDebounceTime(50); // set debounce time to 50 milliseconds // read the initial state of the rotary encoder's CLK pin prev_CLK_state = digitalRead(CLK_PIN); } void loop() { button.loop(); // MUST call the loop() function first // read the current state of the rotary encoder's CLK pin CLK_state = digitalRead(CLK_PIN); // If the state of CLK is changed, then pulse occurred // React to only the rising edge (from LOW to HIGH) to avoid double count if (CLK_state != prev_CLK_state && CLK_state == HIGH) { // if the DT state is HIGH // The encoder is rotating in counter-clockwise direction => decrease the counter if (digitalRead(DT_PIN) == HIGH) { counter--; direction = DIRECTION_CCW; } else { // The encoder is rotating in clockwise direction => increase the counter counter++; direction = DIRECTION_CW; } Serial.print("Rotary Encoder:: direction: "); if (direction == DIRECTION_CW) Serial.print("Clockwise"); else Serial.print("Counter-clockwise"); Serial.print(" - count: "); Serial.println(counter); } // save last CLK state prev_CLK_state = CLK_state; if (button.isPressed()) { Serial.println("The button is pressed"); } }

Hinweis: Dieser Code verwendet die ezButton-Bibliothek, um das Entprellen des Tasters zu vereinfachen und Tastendrücke zuverlässig zu erkennen.

Schnelle Schritte

  • Neu beim ESP32 C3 Mini? Absolvieren Sie zuerst unser Tutorial Erste Schritte mit dem ESP32 C3 Mini, um Ihre Entwicklungsumgebung einzurichten.
  • 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 Code auf Ihren ESP32 C3 Super Mini 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 nach unten
  • Ergebnisse ansehen: Öffnen Sie den seriellen Monitor (115200 Baud), um Drehrichtung und Zählerstand zu sehen
  • Profi-Tipp: Jeder "Klick", den Sie beim Drehen spüren, wird Rastung genannt - der Drehgeber gibt pro Rastung einen vollständigen Impuls aus

Ausgabe im seriellen Monitor:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
Rotary Encoder:: direction: CLOCKWISE - count: 1 Rotary Encoder:: direction: CLOCKWISE - count: 2 Rotary Encoder:: direction: CLOCKWISE - count: 3 Rotary Encoder:: direction: CLOCKWISE - count: 4 Rotary Encoder:: direction: CLOCKWISE - count: 5 Rotary Encoder:: direction: ANTICLOCKWISE - count: 4 Rotary Encoder:: direction: ANTICLOCKWISE - count: 3 Rotary Encoder:: direction: ANTICLOCKWISE - count: 2 Rotary Encoder:: direction: ANTICLOCKWISE - count: 1 Rotary Encoder:: direction: ANTICLOCKWISE - count: 0 The button is pressed The button is pressed
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

Code-Erklärung

Lesen Sie die ausführlichen zeilenweisen Kommentare im obigen Code, um zu verstehen, wie jeder Abschnitt funktioniert.

ESP32 C3 Super Mini Code – Drehgeber mit Interrupt

Die Polling-Methode im vorherigen Code prüft ständig die Pin-Zustände, was Rechenleistung des ESP32 C3 Super Mini verschwendet und bei langsamer Codeausführung Drehschritte verpassen kann.

Warum Interrupts für Drehgeber verwenden:

  • Beseitigt das ständige Polling - schont die Ressourcen des ESP32
  • Verpasst keine Impulse des Drehgebers, auch während anderer Aufgaben
  • Effizienter und zuverlässiger für reale Projekte
  • Ermöglicht dem ESP32 C3 Super Mini effektives Multitasking

Der folgende Code verwendet Hardware-Interrupts, um Richtung und Position des Drehgebers effizient zu lesen:

/* * Dieser ESP32 C3 Super Mini Code wurde von newbiely.de entwickelt * Dieser ESP32 C3 Super Mini Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-c3/esp32-c3-super-mini-rotary-encoder */ #include <ezButton.h> // The library to use for SW pin #define CLK_PIN 7 // The ESP32 C3 SuperMini pin 7 connected to the rotary encoder's CLK pin #define DT_PIN 6 // The ESP32 C3 SuperMini pin 6 connected to the rotary encoder's DT pin #define SW_PIN 5 // The ESP32 C3 SuperMini pin 5 connected to the rotary encoder's SW pin #define DIRECTION_CW 0 // clockwise direction #define DIRECTION_CCW 1 // counter-clockwise direction volatile int counter = 0; volatile int direction = DIRECTION_CW; volatile unsigned long last_time; // for debouncing int prev_counter; ezButton button(SW_PIN); // create ezButton object for pin 7; void IRAM_ATTR ISR_encoder() { if ((millis() - last_time) < 50) // debounce time is 50ms return; if (digitalRead(DT_PIN) == HIGH) { // The encoder is rotating in counter-clockwise direction => decrease the counter counter--; direction = DIRECTION_CCW; } else { // The encoder is rotating in clockwise direction => increase the counter counter++; direction = DIRECTION_CW; } last_time = millis(); } void setup() { Serial.begin(115200); // Configure encoder pins as inputs pinMode(CLK_PIN, INPUT); pinMode(DT_PIN, INPUT); button.setDebounceTime(50); // set debounce time to 50 milliseconds // use interrupt for CLK pin is enough // call ISR_encoder() when CLK pin changes from LOW to HIGH attachInterrupt(digitalPinToInterrupt(CLK_PIN), ISR_encoder, RISING); } void loop() { button.loop(); // MUST call the loop() function first if (prev_counter != counter) { Serial.print("Rotary Encoder:: direction: "); if (direction == DIRECTION_CW) Serial.print("CLOCKWISE"); else Serial.print("ANTICLOCKWISE"); Serial.print(" - count: "); Serial.println(counter); prev_counter = counter; } if (button.isPressed()) { Serial.println("The button is pressed"); } // TO DO: your other work here }

Wenn Sie den Knopf drehen, zeigt der serielle Monitor dieselben Drehinformationen wie im vorherigen Beispiel an, jedoch mit verbesserter Leistung.

※ Notiz:

  • Ein Interrupt reicht aus: Viele Tutorials verwenden zwei Interrupts für einen Drehgeber, aber das verschwendet Ressourcen - ein einzelner Interrupt funktioniert einwandfrei
  • Schlüsselwort volatile verwenden: Deklarieren Sie globale Variablen, die in Interrupts verwendet werden, immer als volatile, um unerwartetes Verhalten zu vermeiden
  • Interrupts einfach halten: Minimieren Sie den Code in Interrupt-Funktionen - vermeiden Sie Serial.print() oder Serial.println() in Interrupts
  • Schnelle Ausführung: Interrupt-Code sollte für beste Leistung so schnell wie möglich ausgeführt werden

ESP32 C3 Super Mini Drehgeber-Anwendungen

Drehgeber eröffnen viele spannende Projektmöglichkeiten für Ihren ESP32 C3 Super Mini.

Beliebte Projektideen mit Drehgebern:

  • Die Position eines Servomotors mit dem Drehgeber präzise steuern
  • Die LED-Helligkeit durch Drehen des Knopfes stufenlos einstellen
  • Die Drehzahl eines Schrittmotors für Robotikprojekte regeln
  • Eine digitale Lautstärkeregelung für Audiosysteme erstellen
  • Ein Menü-Navigationssystem für OLED-Displays bauen
  • Ein intelligentes Thermostat mit Temperatureinstellung per Drehknopf entwerfen
  • Eine per Drehknopf gesteuerte Farbauswahl für RGB-LEDs bauen

Video Tutorial

Sehen Sie sich das folgende Video an, um eine visuelle Schritt-für-Schritt-Anleitung zu diesem Projekt zu erhalten.

Fordern Sie sich selbst heraus

Testen Sie Ihre Fähigkeiten, indem Sie dieses ESP32 C3 Super Mini Drehgeber-Projekt erweitern.

Probieren Sie diese Herausforderungen aus:

  • Einfach: Fügen Sie eine LED hinzu, die blinkt, wenn der Taster des Drehgebers gedrückt wird
  • Einfach: Zeigen Sie den Zählerwert auf einer 7-Segment-Anzeige statt im seriellen Monitor an
  • Mittel: Steuern Sie mit dem Drehgeber den Winkel eines Servomotors (Zähler auf 0-180 Grad abbilden)
  • Mittel: Erstellen Sie einen per Drehknopf gesteuerten LED-Dimmer mit PWM
  • Fortgeschritten: Bauen Sie ein Menüsystem auf einem LCD mit Navigation und Auswahl per Drehgeber

Verwandte Tutorials

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!