Arduino Nano ESP32 - Taster

Der Taster ist eine grundlegende Komponente und in vielen Arduino Nano ESP32-Projekten weit verbreitet. Er ist nicht so einfach, wie es scheint (aufgrund mechanischer, physikalischer Eigenschaften). Anfänger können damit viele Schwierigkeiten haben. Dieses Tutorial erleichtert Anfängern den Einstieg. Lass uns anfangen!

※ Notiz:

Bevor wir über den Knopf sprechen, möchten wir darauf hinweisen, dass es zwei häufige Fehler gibt, die Neulinge normalerweise machen:

  1. Das schwebende Eingangsproblem:
    • Symptom: Wenn man einen Knopf an den Eingangspin des Arduino Nano ESP32 anschließt, ist der Zustand des Eingangspins zufällig und stimmt nicht mit dem Drückzustand des Buttons überein.
    • Ursache: Am Eingangspin des Buttons wird KEIN Pull-Down-Widerstand oder Pull-Up-Widerstand verwendet.
    • Lösung: ⇒ Verwende 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 Arduino Nano ESP32 liest den Zustand des Buttons und identifiziert das Drück-Ereignis durch Erkennung der Zustandsänderung (HIGH zu LOW oder LOW zu HIGH). Wenn der Button tatsächlich nur einmal gedrückt wird, erkennt der Arduino Nano ESP32-Code mehrere Drückungen statt nur einmal.
    • Ursache: Aufgrund mechanischer und physikalischer Eigenschaften wird beim einzelnen Drücken eines Knopfes der Zustand des Eingangspins schnell zwischen LOW und HIGH mehrmals umgeschaltet statt nur einmal.
    • Lösung: ⇒ Debounce. Die Details werden im Arduino Nano ESP32 - Button - Debounce Tutorial beschrieben.

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

    Erforderliche Hardware

    1×Arduino Nano ESP32
    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 Arduino Nano
    1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
    1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

    Oder Sie können die folgenden Kits kaufen:

    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 Button

    Der Druckknopf, der auch als Pushbutton, Taster oder Momentanschalter bezeichnet wird, ist eine Art Schalter, der sich schließt, wenn er gedrückt und gehalten wird, und sich öffnet, wenn er losgelassen wird. Es gibt verschiedene Arten von Druckknöpfen, die grob in zwei Gruppen eingeteilt werden:

    • PCB-mount push buttons (suitable for breadboard mounting)
    • Panel-mount push buttons
    Arduino Nano ESP32 Druckknopf

    Taster-Pinbelegung

    Ein Taster für Leiterplattenmontage hat normalerweise vier Pins, die intern paarweise verbunden sind.

    Pinbelegung des Tasters

    Wir müssen nur zwei der vier Pins verwenden, die nicht im selben verbundenen Paar liegen. Entsprechend gibt es vier Möglichkeiten, die Verdrahtung mit dem Knopf vorzunehmen (siehe unten Abbildung bimage).

    So verwenden Sie den Button

    Tatsächlich werden aufgrund der Symmetrie aus diesen vier Wegen zwei Wege. Der Rest dieses Tutorials wird zwei Pins verwenden: Pin A und Pin B, die nicht miteinander verbunden sind.

    Warum hat der Knopf vier Pins, während wir nur zwei Pins benötigen?

    ⇒ Der Knopf empfängt die Kraft, die von Benutzern ausgeübt wird. Damit er stabil und fest auf der Leiterplatte (PCB) sitzt, besitzt er vier Pins, um der Druckkraft standzuhalten.

    Ein Knopf zur Panelmontage hat in der Regel zwei Stifte.

    Pinbelegung eines Zweipin-Druckknopfs
    image source: diyables.io

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

    • GND: Verbinde diesen Pin mit Masse.
    • VCC: Verbinde diesen Pin mit einer 3,3-V-Stromversorgung.
    • OUT: Verbinde diesen Pin mit einem digitalen Eingang deines Arduino Nano ESP32.

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

    Wie der Button funktioniert

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

    Arduino Nano ESP32 - Taster

    Der Pin eines Tasters ist an einen digitalen Eingangspin des Arduino Nano ESP32 angeschlossen. Der andere Pin ist mit VCC oder GND verbunden. Im Arduino Nano ESP32-Code lässt sich durch das Auslesen des Zustands des Eingangspins ableiten, ob der Knopf gedrückt ist oder nicht.

    Eingabezustand und Betätigungszustand

    Die Beziehung zwischen dem Zustand des Eingangspins und dem Betätigungszustand des Tasters hängt davon ab, wie wir den Taster mit Arduino Nano ESP32 verbinden und wie der Pin des ESP32 eingestellt 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 wird, 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 wird, 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 ist. Dies wird als das „Floating-Eingangsproblem“ bezeichnet. Dies führt zu einer Fehlfunktion.

    Um es Anfängern einfach zu machen, empfiehlt dieses Tutorial nachdrücklich die Verwendung eines internen Pull-Up-Widerstands für den Arduino Nano ESP32-Pin. Es ist kein externer Widerstand erforderlich. Dies spart Hardware und vereinfacht den Schaltplan.

    Verdrahtungsdiagramm zwischen Taster und Arduino Nano ESP32

    • Verdrahtungsdiagramm zwischen Arduino Nano ESP32 und PCB-montierter Taster
    Arduino Nano ESP32 Taster-Verdrahtungsdiagramm

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

    • Verdrahtungsdiagramm zwischen Arduino Nano ESP32 und panelmontiertem Taster
    Arduino Nano ESP32 Zwei-Pin-Taster Verdrahtungsdiagramm

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

    Wie man einen Button programmiert

    • Initialisiert den Pin des Arduino Nano ESP32 als internen Pull-Up-Eingang, indem die Funktion pinMode() verwendet wird. Zum Beispiel Pin D2:
    pinMode(D2, INPUT_PULLUP); // Konfiguriere D2 als Eingangspin und aktiviere den internen Pull-Up-Widerstand
    • Liest den Zustand des Eingangs-Pins mit der Funktion digitalRead().
    int button_state = digitalRead(BUTTON_PIN);

    ※ Notiz:

    Es gibt zwei weit verbreitete Anwendungsfälle:

    • Der erste Anwendungsfall: Wenn der Eingangszustand HIGH ist, tue etwas. Wenn der Eingangszustand LOW ist, tue etwas anderes.
    • Der zweite Anwendungsfall: Wenn der Eingangszustand von LOW auf HIGH geändert wird, tue etwas. Wenn der Eingangszustand von HIGH auf LOW geändert wird, tue etwas anderes.

    Je nach Anwendung wird einer von ihnen verwendet. Zum Beispiel: Im Fall der Verwendung eines Tasters zur Steuerung einer LED:

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

    Der folgende Beispielcode zeigt, wie man den Zustandswechsel von LOW nach HIGH erkennt.

    #define BUTTON_PIN D2 // D2-Pin mit Pushbutton verbunden int prev_state = HIGH; // der vorherige Zustand des Eingangspins int button_state; // die aktuelle Lesung des Eingangspins void setup() { Serial.begin(9600); // initialisiere den Pushbutton-Pin als Pull-Up-Eingang pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lese den Zustand des Schalters/Knopfs aus: button_state = digitalRead(BUTTON_PIN); if(prev_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // speichere den letzten Zustand prev_state = button_state; }

    Arduino Nano ESP32-Code

    Schnelle Schritte

    Um mit dem Arduino Nano ESP32 zu beginnen, befolgen Sie diese Schritte:

    • Wenn Sie neu beim 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 gemäß dem bereitgestellten Diagramm.
    • Schließen Sie das Arduino Nano ESP32-Board mit einem USB-Kabel an Ihren Computer an.
    • Starten Sie die Arduino IDE auf Ihrem Computer.
    • Wählen Sie das Arduino Nano ESP32-Board und seinen entsprechenden COM-Port.
    • Kopieren Sie den untenstehenden Code und fügen Sie ihn in die Arduino IDE ein.
    #define BUTTON_PIN D2 // Arduino Nano ESP32 pin D2 pin connected to button void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // initialize the button pin as an pull-up input (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 button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
    • Kompiliere und lade den Code auf das Arduino Nano ESP32-Board hoch, indem du in der Arduino IDE auf die Upload-Schaltfläche klickst.
    Wie lädt man Arduino Nano ESP32-Code in der Arduino-IDE hoch?
    • Ö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
    • Überprüfen Sie das Ergebnis im seriellen 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 oben gezeigte Arduino Nano ESP32-Code enthält eine zeilenweise Erklärung. Bitte lesen Sie die Kommentare im Code!

    Arduino Nano ESP32-Code bearbeiten

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

    Schnelle Schritte

    • Wenn Sie Arduino Nano ESP32 zum ersten Mal verwenden, sehen Sie sich [wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet] an.
    • Ändern Sie den Code wie folgt.
    /* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano-esp32/arduino-nano-esp32-button */ #define BUTTON_PIN D2 // Arduino Nano ESP32 pin D2 pin connected to button int prev_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // initialize the button pin as an pull-up input (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: button_state = digitalRead(BUTTON_PIN); if (prev_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_state = button_state; }
    • Kompilieren und Code auf das Arduino Nano ESP32-Board hochladen, indem Sie in der Arduino IDE auf die Schaltfläche Hochladen klicken.
    • Öffnen Sie den seriellen Monitor in der Arduino IDE.
    • Drücken Sie den Knopf und lassen Sie ihn anschließend los.
    • Schauen Sie sich das Ergebnis im seriellen Monitor an. Es sieht wie folgt 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 losgelöste Ereignisse ausgeben, obwohl Sie nur einen Druck- und Loslassvorgang durchgeführt haben. Dies ist ein normales Verhalten des Schalters. Dieses Verhalten wird als das „Chattering-Phänomen“ bezeichnet. In einigen Anwendungen benötigen wir eine Methode, um es zu eliminieren. Mehr dazu finden Sie im Arduino Nano ESP32 - Tutorial zur Entprellung von Tastern.
    • Um es Anfängern zu erleichtern, insbesondere beim Einsatz mehrerer Taster, haben wir eine Bibliothek namens ezButton erstellt. Sie können hier mehr über die ezButton-Bibliothek erfahren.
    • Beim Verwenden des Button-Moduls setzen Sie den Pin auf pinMode(BUTTON_PIN, INPUT). Das Modul gibt LOW aus, 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-/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, um diese Zustände in zwei Zustände umzuwandeln: LOW und HIGH. Zum Beispiel Drucktaster, Schalter, magnetischer Kontaktschalter (Türsensor)...
    • NICHT SOLLEN: Wenn der Sensor zwei Spannungspegel ausgibt (NIEDRIG und HOCH), 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!