ESP32 - Taster

Der Taster ist eine grundlegende Komponente und wird in vielen ESP32-Projekten häufig verwendet. Er ist nicht so einfach, wie es aussieht (aufgrund mechanischer und physikalischer Eigenschaften). Anfänger könnten damit viele Schwierigkeiten haben. Dieses Tutorial erleichtert den Anfängern den Einstieg. Lass uns anfangen!

※ Notiz:

Bevor wir über den Taster sprechen, möchten wir darauf hinweisen, dass es zwei häufige Fehler gibt, auf die Neulinge typischerweise stoßen:

  1. Das schwebende Eingangsproblem:
    • Symptom: Wenn ein Taster an einen ESP32-Eingangspin angeschlossen wird, ist der Zustand des Eingangspins zufällig und stimmt nicht mit dem Drücken des Tasters überein.
    • Ursache: Es wird kein Pull-Down-Widerstand oder Pull-Up-Widerstand am Eingangs-Pin verwendet.
    • Lösung: ⇒ Verwenden Sie einen Pull-Down-Widerstand oder einen Pull-Up-Widerstand am Eingangspin. Die Details werden später in diesem Tutorial beschrieben.
  • Das Prellen-Phänomen
    • Symptom: Der Code auf dem ESP32 liest den Zustand des Tasters und identifiziert das Drück-Ereignis, indem er die Zustandsänderung erkennt (HIGH zu LOW, oder LOW zu HIGH). Wenn der Taster tatsächlich nur einmal gedrückt wird, erkennt der ESP32-Code mehrere Drückungen statt nur einmal.
    • Ursache: Aufgrund mechanischer und physikalischer Eigenschaften wird beim einmaligen Drücken eines Tasters der Zustand des Eingangspins schnell zwischen LOW und HIGH mehrmals umgeschaltet, statt nur einmal.
    • Lösung: ⇒ Entprellen. Die Details werden im ESP32 - Button - Debounce Tutorial beschrieben.

    Das Prellen-Phänomen verursacht Fehlfunktionen nur in bestimmten Arten von Anwendungen, die exakt die Anzahl der Drückungen erkennen müssen. In einigen Anwendungen ist es harmlos.

    Erforderliche Hardware

    1×ESP32 ESP-WROOM-32 Entwicklungsmodul
    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×Breadboard-Taster mit Kappe
    1×Breadboard-Taster-Kit
    1×Panel-Drucktaster
    1×Taster-Modul
    1×Breadboard
    1×Verbindungskabel
    1×(Optional) DC-Stromanschluss
    1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
    1×(Empfohlen) Breakout Expansion Board for ESP32
    1×(Empfohlen) Stromverteiler für ESP32

    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)
    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.

    Über die Schaltfläche

    Der Druckknopf, auch als Drucktaster, taktiler Taster oder Momentanschalter bezeichnet, ist eine Art Schalter, der sich beim Drücken und Festhalten schließt und sich beim Loslassen öffnet. Verschiedene Arten von Druckknöpfen existieren, die grob in zwei Gruppen eingeteilt werden:

    • PCB-mount push buttons (suitable for breadboard mounting)
    • Panel-mount push buttons
    ESP32-Taster

    Pinbelegung des Buttons

    Ein auf einer Leiterplatte montierter Taster hat normalerweise vier Pins, die intern paarweise verbunden sind.

    Pinbelegung der Tasten

    Wir müssen nur zwei der vier Pins verwenden, die nicht im selben verbundenen Paar liegen. Dementsprechend gibt es vier Möglichkeiten, die Verkabelung mit dem Knopf vorzunehmen (siehe unten das Bild „bimage“).

    Wie man den Button benutzt

    Aufgrund der Symmetrie werden diese vier Wege zu zwei Wegen. Der Rest dieses Tutorials wird zwei Pins verwenden: Pin A und Pin B, die nicht miteinander verbunden sind.

    Warum hat der Knopf vier Pins, obwohl wir nur zwei Pins benötigen?

    Der Knopf nimmt die von Benutzern ausgeübte Kraft auf. Um ihn stabil und fest auf der Leiterplatte (PCB) zu halten, verfügt er über vier Pins, die dem Druck standhalten.

    Ein Taster zur Panelmontage hat normalerweise zwei Stifte.

    Pinbelegung eines zweipoligen Drucktasters
    image source: diyables.io

    Das Push-Button-Modul enthält einen eingebauten Pull-Down-Widerstand, der sicherstellt, dass der Ausgang LOW bleibt, wenn der Knopf nicht gedrückt wird. Es hat drei Pins:

    • GND: Verbinden Sie diesen Pin mit der Masse.
    • VCC: Verbinden Sie diesen Pin mit einer 3,3-V-Stromversorgung.
    • OUT: Verbinden Sie diesen Pin mit einem digitalen Eingang an Ihrem ESP32.

    Mit dieser Konfiguration gibt das Modul LOW aus, wenn der Knopf nicht gedrückt ist, und HIGH, wenn der Knopf gedrückt wird.

    Wie der Button funktioniert

    • Wenn der Taster gedrückt wird, ist Pin A mit Pin B verbunden.
    • Wenn der Taster nicht gedrückt wird, ist Pin A nicht mit Pin B verbunden.
    Wie der Button funktioniert

    ESP32 - Taster

    Der Pin eines Knopfes ist mit einem digitalen Eingangspin des ESP32 verbunden. Der andere Pin ist mit VCC oder GND verbunden. Im ESP32-Code kann man durch Auslesen des Zustands des Eingangspins erkennen, ob der Knopf gedrückt ist oder nicht.

    Eingabestatus und Betätigungszustand

    Der Zusammenhang zwischen dem Zustand des Eingangssignals und dem Betätigungszustand des Tasters hängt davon ab, wie wir den Taster mit dem ESP32 verbinden und wie der Pin des ESP32 konfiguriert ist. Es gibt zwei Möglichkeiten, einen Taster mit dem ESP32 zu verwenden:

    1. Der Pin eines Tasters ist mit einem digitalen Eingangspin des ESP32 verbunden, der andere Pin ist mit VCC verbunden:
      • Es muss ein Pull-Down-Widerstand verwendet werden
      • Wenn der Taster gedrückt ist, ist der Zustand des ESP32-Pins HIGH. Andernfalls ist der Zustand des ESP32-Pins LOW
  • Der Pin eines Tasters ist mit einem digitalen Eingangspin des ESP32 verbunden, der andere Pin ist mit GND verbunden:
    • Es muss ein Pull-up-Widerstand verwendet werden
    • Wenn der Taster gedrückt ist, ist der Zustand des ESP32-Pins LOW. Andernfalls ist der Zustand des ESP32-Pins HIGH

    ※ Notiz:

    Wenn weder ein Pull-Down-Widerstand noch ein Pull-Up-Widerstand verwendet wird, ist der Zustand des Eingangspins zufällig zwischen HIGH und LOW (instabil, nicht festgelegt), wenn der Taster NICHT gedrückt wird. Dies wird als das „schwebendes Eingangsproblem“ bezeichnet. Dies führt zu einer Fehlfunktion.

    Um es für Anfänger einfach zu machen, empfiehlt dieses Tutorial dringend die Verwendung eines internen Pull-up-Widerstands für den ESP32-Pin. Es ist kein externer Widerstand erforderlich. Das spart Hardware und vereinfacht das Verdrahtungsdiagramm.

    Verdrahtungsschema zwischen Taster und ESP32

    • Verdrahtungsdiagramm zwischen ESP32 und Taster auf der Leiterplatte
    ESP32-Button-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.

    • Verdrahtungsdiagramm zwischen ESP32 und panelmontiertem Taster
    ESP32 Zwei-Pin-Taster Schaltplan

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

    Wie man einen Button programmiert

    • Initialisiert den ESP32-Pin als internen Pull-Up-Eingang, indem die Funktion pinMode() verwendet wird. Zum Beispiel Pin GPIO21:
    pinMode(21, INPUT_PULLUP); // Konfiguriere GPIO21 als Eingangspin und aktiviere den internen Pull-Up-Widerstand
    • Liest den Zustand des Eingangspins mittels der digitalRead()-Funktion.
    int buttonState = digitalRead(BUTTON_PIN);

    ※ Notiz:

    Zwei weit verbreitete Anwendungsfälle:

    • Der erste Anwendungsfall: Wenn der Eingangszustand HIGH ist, mache etwas. Wenn der Eingangszustand LOW ist, mache etwas anderes.
    • Der zweite Anwendungsfall: Wenn sich der Eingangszustand von LOW nach HIGH ändert, mache etwas. Wenn sich der Eingangszustand von HIGH nach LOW ändert, mache etwas anderes.

    Je nach Anwendung wird einer von ihnen verwendet. Beispielsweise bei der Verwendung eines Tasters zur Steuerung einer LED:

    • Wenn wir die LED einschalten möchten, wenn der Taster gedrückt wird, und sie ausschalten, wenn der Taster nicht gedrückt ist, sollten wir den ersten Fall verwenden.
    • Wenn wir die LED bei jedem Drücken des Tasters zwischen EIN und AUS umschalten möchten, sollten wir den zweiten Fall verwenden.

    Der untenstehende Beispielcode zeigt, wie man den Zustandswechsel von LOW auf HIGH erkennt.

    #define BUTTON_PIN 21 // GPIO21-Pin mit Taster verbunden // Variablen werden geändert: int lastState = HIGH; // der vorherige Zustand vom Eingangspin int currentState; // der aktuelle Wert des Eingangspins void setup() { Serial.begin(9600); // initialisiere den Tasterpin als Pull-Up-Eingang pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lese den Zustand des Schalters/Tasters: currentState = digitalRead(BUTTON_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The state changed from LOW to HIGH"); // speichere den letzten Zustand lastState = currentState; }

    ESP32-Code

    Schnelle Schritte

    • Falls Sie ESP32 zum ersten Mal verwenden, lesen Sie wie man die Umgebung für ESP32 in der Arduino-IDE einrichtet.
    • Schließen Sie die Verdrahtung wie im obigen Bild an.
    • 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 untenstehenden Code und fügen Sie ihn in die Arduino-IDE ein.
    #define BUTTON_PIN 21 // GIOP21 pin connected to button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int buttonState = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(buttonState); }
    • Kompiliere und lade den Code auf das ESP32-Board, indem du auf den Hochladen-Button in der Arduino IDE klickst.
    Wie man ESP32-Code in der Arduino IDE hochlädt
    • Öffne den seriellen Monitor in der Arduino-IDE
    Wie öffnet man den seriellen Monitor in der Arduino IDE?
    • Drücken und loslassen Sie den Knopf mehrmals
    • Sehen Sie das Ergebnis im Serial Monitor. Es sieht so aus wie unten:
    COM6
    Send
    1 1 1 0 0 0 0 0 0 1 1 1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    1 ist hoch, 0 ist niedrig.

    Zeile für Zeile Code-Erklärung

    Der obige ESP32-Code enthält eine zeilenweise Erklärung. Bitte lesen Sie die Kommentare im Code!

    Ändern des ESP32-Codes

    Lassen Sie uns den Code so ändern, dass Drück- und Loslass-Ereignisse erkannt werden.

    Schnelle Schritte

    /* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 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/esp32-button */ #define BUTTON_PIN 21 // GIOP21 pin connected to button // Variables will change: int lastState = LOW; // the previous state from the input pin int currentState; // the current reading from the input pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: currentState = digitalRead(BUTTON_PIN); if (lastState == HIGH && currentState == LOW) Serial.println("The button is pressed"); else if (lastState == LOW && currentState == HIGH) Serial.println("The button is released"); // save the the last state lastState = currentState; }
    • Kompiliere und lade den Code auf das ESP32-Board hoch, indem du auf die Hochladen-Schaltfläche in der Arduino IDE klickst
    Arduino IDE Code hochladen
    • Öffne den seriellen Monitor in der Arduino-IDE
    Wie öffnet man den seriellen Monitor in der Arduino IDE?
    • Drücken Sie den Knopf und lassen Sie ihn danach los
    • Sehen Sie das Ergebnis im seriellen Monitor. Es sieht unten so aus:
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Notiz:

    • Der Serial Monitor kann mehrere gedrückte und losgelassene Ereignisse ausgeben, obwohl Sie nur einen Druck- und Loslassvorgang durchgeführt haben. Dies ist ein normales Verhalten des Tasters. Dieses Verhalten wird als „Prellen-Phänomen“ bezeichnet. In einigen Anwendungen benötigen wir eine Methode, um es zu beseitigen. Sie können mehr dazu in ESP32 - Button Debounce Tutorial lernen.
    • Um es Anfängern einfacher zu machen, insbesondere beim Einsatz mehrerer Taster, haben wir eine Bibliothek namens ezButton erstellt. Sie können hier mehr über die ezButton-Bibliothek erfahren.
    • Für das Button-Modul verwenden Sie pinMode(BUTTON_PIN, INPUT). Es liefert LOW, wenn es nicht gedrückt ist, und HIGH, wenn es gedrückt wird.

    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.

    Zusätzliches Wissen

    Wann sollte man einen Pull-Down- bzw. Pull-Up-Widerstand verwenden und wann nicht?

    • SOLLTE: Wenn der Sensor zwei Zustände hat: geschlossen und offen, benötigt er einen Pull-up- oder Pull-down-Widerstand, damit diese Zustände zu LOW und HIGH werden. Zum Beispiel Taster, Schalter, magnetischer Kontaktschalter (Türsensor)...
    • SOLLTE NICHT: Wenn der Sensor zwei Spannungspegel (LOW und HIGH) ausgibt, benötigt er keinen Pull-up- oder Pull-down-Widerstand. Zum Beispiel Bewegungssensor, Berührungssensor ...

    Sprachenreferenzen

    ※ 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!