ESP8266 - Taster

Dieses Tutorial zeigt dir, wie man ESP8266 mit einem Knopf verwendet. Im Detail werden wir lernen:

Der Knopf ist auch unter anderen Bezeichnungen bekannt, zum Beispiel Druckknopf, Taster oder Momentanschalter. Es ist ein gängiges Bauteil, das in vielen ESP8266-Projekten verwendet wird und einfach zu bedienen ist. Allerdings kann es für Anfänger aufgrund seiner mechanischen, physischen Eigenschaften und der Art und Weise, wie es verwendet werden kann, verwirrend sein. Dieses Tutorial erleichtert Anfängern den Einstieg.

Erforderliche Hardware

1×ESP8266 NodeMCU
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×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

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

Beim Arbeiten mit einem Button treten bei Anfängern häufig zwei Probleme auf:

1. Schwebendes Eingangsproblem:.

  • Symptom: Der Wert, der vom Eingangspin gelesen wird, entspricht nicht dem Zustand des Tastendrucks.
  • Cause: An dem Eingangspin wird kein Pull-up- oder Pull-down-Widerstand verwendet.
  • Solution: Verwenden Sie einen Pull-up- oder Pull-down-Widerstand gemäß den Anweisungen in diesem Tutorial.

2. Chattering-Phänomen:.

  • Symptom: Obwohl er nur einmal gedrückt wird, registriert der ESP8266-Code mehrere Tastendrücke.
  • Ursache: Der Zustand des Knopfs (oder Schalters) oszilliert aufgrund mechanischer und physikalischer Probleme rasch zwischen LOW und HIGH.
  • Lösung: Das ESP8266 - Button - Debounce Tutorial erklärt, wie man Debounce verwendet, um dieses Problem zu lösen.

Dies ist ein Faktor, der nur bei Anwendungen berücksichtigt werden sollte, die eine präzise Betätigungserkennung erfordern.

※ Notiz:

Verwechseln Sie den Knopf nicht mit dem Folgenden:

Die Pinbelegung des Tasters

Es gibt verschiedene Arten von Drucktasten, die grob in zwei Gruppen eingeteilt werden können:

  • PCB-mount push button (suitable for mounting on a breadboard)
  • Panel-mount push button
Druckknopf

Ein auf der Leiterplatte montierter Knopf hat typischerweise vier Pins.

Taster-Pinbelegung

Dennoch sind diese Pins intern paarweise verbunden. Daher müssen wir nur zwei der vier Pins verwenden, die intern nicht miteinander verbunden sind.

Es gibt vier Möglichkeiten, den Knopf anzuschließen, von denen zwei symmetrisch sind (wie im Bild zu sehen).

So verwenden Sie die Schaltfläche

Warum hat ein Knopf vier Pins, obwohl wir nur zwei davon verwenden?

Um sicherzustellen, dass es fest auf der Leiterplatte montiert ist und dem Druck standhalten kann.

Ein Panel-Montageknopf hat normalerweise zwei Stifte.

Pinbelegung eines zweipoligen Drucktasters
image source: diyables.io

Das Push-Button-Modul verfügt über einen integrierten Pull-Down-Widerstand, der sicherstellt, dass der Ausgang auf LOW bleibt, wenn der Knopf nicht gedrückt wird. Es hat drei Pins:

  • GND: Verbinde diesen Pin mit der Masse.
  • VCC: Verbinde diesen Pin mit einer 3,3-V-Spannungsversorgung.
  • OUT: Verbinde diesen Pin mit einem digitalen Eingang am ESP8266.

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

Wie es funktioniert

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

ESP8266 - Taster

Der Pin eines Tasters ist entweder mit VCC oder GND verbunden. Der andere Pin ist mit einem Pin des ESP8266 verbunden. Durch das Prüfen des Zustands eines ESP8266-Pins, der als Eingang konfiguriert ist, können wir feststellen, ob der Taster gedrückt wurde oder nicht.

Zustand der Schaltfläche und des Drückzustands

Die Verbindung zwischen dem Knopf und dem ESP8266 sowie die Konfiguration des Pins des ESP8266 bestimmen die Beziehung zwischen dem Knopfzustand und dem Drückzustand.

Es gibt zwei Möglichkeiten, einen Knopf mit dem ESP8266 zu verwenden:

  1. Der Pin eines Tasters ist mit VCC verbunden, der andere ist mit einem Pin des ESP8266 verbunden, mit einem Pull-Down-Widerstand
    • Wenn der Taster gedrückt wird, ist der Zustand des ESP8266-Pins HIGH. Andernfalls ist der Zustand LOW
    • Wir können entweder einen internen oder externen Widerstand verwenden. Der interne Widerstand ist bereits im ESP8266 integriert und kann über den ESP8266-Code konfiguriert werden.
  • Der Pin eines Tasters ist mit GND verbunden, der andere ist mit einem Pin des ESP8266 verbunden, mit einem Pull-Up-Widerstand
    • Wenn der Taster gedrückt wird, wird der Pin-Zustand des ESP8266 LOW sein. Andernfalls HIGH
    • Wir können entweder einen internen oder externen Widerstand verwenden. Der interne Widerstand ist bereits im ESP8266 integriert und kann über den ESP8266-Code konfiguriert werden.

    ※ Notiz:

    Wenn wir nicht der besten Praxis folgen, ist der Zustand des Eingangspins “schwebend”, wenn der Knopf NICHT gedrückt wird. Das bedeutet, der Zustand kann HIGH oder LOW sein (instabil, nicht festgelegt), was zu einer falschen Erkennung führt.

    • Die schlechteste Praxis: Initialisiert den ESP8266-Pin als Eingang (durch die Verwendung von pinMode(BUTTON_PIN, INPUT)) und verwendet KEINE externen Pull-Down-/Pull-Up-Widerstände.
    • Die beste Praxis: Initialisiert den ESP8266-Pin als internen Pull-Up-Eingang (durch die Verwendung von pinMode(BUTTON_PIN, INPUT_PULLUP)). Dabei müssen KEINE externen Pull-Down-/Pull-Up-Widerstände verwendet werden.

    Um der Einfachheit willen verwendet dieses Tutorial den einfachsten Ansatz: Den ESP8266-Pin als internen Pull-Up-Eingang initialisieren, ohne einen externen Widerstand zu verwenden. Anfänger müssen sich keine Sorgen darüber machen, den Pull-Up-/Pull-Down-Widerstand anzuschließen. Alles, was sie tun müssen, ist den ESP8266-Code zu schreiben.

    Verdrahtungsdiagramm

    • Verdrahtungsdiagramm zwischen ESP8266 und PCB-montiertem Taster
    ESP8266 NodeMCU-Tasterverdrahtungsdiagramm

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

    Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

    • Verdrahtungsdiagramm zwischen ESP8266 und panelmontierter Knopf
    ESP8266 NodeMCU Zweipoliger Drucktaster Verdrahtungsdiagramm

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

    Wie man einen Button programmiert

    • Verwenden Sie die Funktion pinMode(), um den ESP8266-Pin auf einen internen Pull-Up-Eingang zu setzen. Zum Beispiel Pin D7:
    pinMode(D7, INPUT_PULLUP);
    • Greifen Sie auf den Zustand des ESP8266-Pins zu, indem Sie die Funktion digitalRead() verwenden.
    int button_state = digitalRead(BUTTON_PIN);

    ※ Notiz:

    Zwei gängige Anwendungsfälle stehen zur Verfügung:

    • Der erste besteht darin, eine Aktion auszuführen, wenn der Eingangszustand HIGH ist, und im Gegenzug etwas zu tun, wenn der Eingangszustand LOW ist.
    • Der zweite besteht darin, eine Aktion auszuführen, wenn sich der Eingangszustand von LOW auf HIGH (oder HIGH auf LOW) ändert.

    Je nach Anwendung wählen wir einen von ihnen aus. Zum Beispiel, wenn wir einen Knopf verwenden möchten, um eine LED zu steuern:

    • Wenn die LED eingeschaltet sein soll, wenn der Knopf gedrückt ist, und ausgeschaltet, wenn der Knopf nicht gedrückt ist, sollte der erste Anwendungsfall verwendet werden.
    • Wenn das Ziel ist, dass die LED bei jedem Drücken des Knopfes zwischen EIN und AUS wechselt, sollte der zweite Anwendungsfall angewendet werden.

    Wie man die Zustandsänderung von LOW zu HIGH erkennt

    const int BUTTON_PIN = D7; // Der ESP8266-Pin D7, der mit dem Knopf verbunden ist int prev_button_state = HIGH; // Der vorherige Zustand des Eingangspins int button_state; // Der aktuelle Wert des Eingangspins void setup() { // Initialisiere die serielle Schnittstelle zur Kommunikation mit dem Serial Monitor. Serial.begin(9600); // Initialisiere den Pushbutton-Pin als Pull-Up-Eingang // Der Pull-Up-Eingangspin ist HIGH, wenn der Schalter offen ist und LOW, wenn der Schalter geschlossen ist. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // Lese den Zustand des Schalters/Knopfs ein: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // Speichere den letzten Zustand prev_button_state = button_state; }

    ESP8266-Quellcode

    Schnelle Schritte

    Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diesen Schritten:

    • Schau dir das Tutorial Wie richtet man die Umgebung für ESP8266 in der Arduino IDE ein an, falls dies dein erstes Mal mit ESP8266 ist.
    • Verdrahte die Bauteile wie im Diagramm gezeigt.
    • Schließe das ESP8266-Board mit einem USB-Kabel an deinen Computer an.
    • Öffne die Arduino IDE auf deinem Computer.
    • Wähle das richtige ESP8266-Board aus, z. B. NodeMCU 1.0 (ESP-12E Module), und seinen jeweiligen COM-Port.
    • Verbinde das ESP8266-Board über ein USB-Kabel mit deinem Computer.
    • Starte die Arduino IDE und wähle das richtige Board und den richtigen Port aus.
    • Kopiere den untenstehenden Code und öffne ihn in der Arduino IDE.
    #define BUTTON_PIN D7 // The ESP8266 pin D7 connected to button void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the ESP8266 pin as a pull-up input: HIGH when the button is open, LOW when pressed. 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); }
    • Klicken Sie in der Arduino-IDE auf die Hochladen-Schaltfläche, um den Code zu kompilieren und auf das ESP8266-Board hochzuladen.
    Wie man Code auf den ESP8266 NodeMCU mit der Arduino-IDE hochlädt.
    • Öffne den seriellen Monitor.
    • Drücke den Knopf mehrmals und lasse ihn los.
    • Schau dir das Ergebnis im seriellen Monitor an.
    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.

    Code-Erklärung

    Schau dir die Zeilen-für-Zeile-Erklärung an, die in den Kommentaren des Quellcodes enthalten ist!

    ESP8266-Code bearbeiten

    Lassen Sie uns den Code so ändern, dass er erkennen kann, wann ein Drücken- und Loslassen-Ereignis auftritt.

    Schnelle Schritte

    • Verdrahten Sie die Komponenten gemäß dem Diagramm.
    • Schließen Sie das ESP8266-Board über ein USB-Kabel an Ihren Computer an.
    • Öffnen Sie die Arduino-IDE auf Ihrem Computer.
    • Wählen Sie das richtige ESP8266-Board aus, zum Beispiel NodeMCU 1.0 (ESP-12E-Modul), und den jeweiligen COM-Port.
    • Passen Sie den Code wie folgt an:
    /* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-button */ #define BUTTON_PIN D7 // The ESP8266 pin D7 connected to button int prev_button_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); // Configure the ESP8266 pin as a pull-up input: HIGH when the button is open, LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_button_state = button_state; }
    • Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code zu kompilieren und auf den ESP8266 hochzuladen.
    Arduino-IDE Code hochladen
    • Öffne den seriellen Monitor.
    • Drücke den Knopf und halte ihn gedrückt.
    • Lass den Knopf los und beobachte das Ergebnis im seriellen Monitor.
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Notiz:

    Auch wenn Sie den Knopf nur einmal drücken und loslassen, kann die Ausgabe im seriellen Monitor mehrere gedrückte und losgelassene Ereignisse anzeigen. Dies ist das erwartete Verhalten des Knopfes. Dies wird als das "Prellungsphänomen" bezeichnet. Für weitere Informationen verweisen Sie bitte auf das ESP8266 - Button Debounce Tutorial.

    ※ Notiz:

    • Wir haben eine Bibliothek entwickelt, die ezButton heißt, um Anfängern das Verwenden zu erleichtern, insbesondere bei der Verwendung mehrerer Taster. Weitere Informationen zur ezButton-Bibliothek finden Sie hier.
    • Wenn Sie das Taster-Modul verwenden, setzen Sie den Pin mithilfe von pinMode(BUTTON_PIN, INPUT) in den Eingangsmodus. Mit dieser Einrichtung gibt das Modul LOW aus, wenn der Taster nicht gedrückt ist, und HIGH, wenn der Taster gedrückt ist.

    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.

    Fordere dich selbst heraus

    • Wenn der Knopf gedrückt wird, schalten Sie die LED ein.
    • Wenn der Knopf nicht gedrückt wird, schalten Sie die LED aus.
    • Jedes Mal, wenn der Knopf gedrückt wird, schalten Sie die LED zwischen EIN und AUS.

    Zusätzliches Wissen

    1. In welchen Fällen sollten wir keinen Pull-down- bzw. Pull-up-Widerstand für einen Eingangspin verwenden? 2. Wann sollten wir keinen Pull-down-/Pull-up-Widerstand für einen Eingangspin verwenden?
    • Wenn der Sensor entweder geschlossene oder offene Zustände hat, ist ein Pull-up- oder Pull-down-Widerstand erforderlich, damit diese Zustände niedrig bzw. hoch werden. Beispiele für solche Sensoren sind Taster, Schalter, Magnetschalter (Türsensor).
    • Auf der anderen Seite hat der Sensor zwei definierte Spannungspegel (niedrig und hoch); dann ist ein Pull-up- oder Pull-down-Widerstand nicht erforderlich. Beispiele für solche Sensoren sind Bewegungssensoren und Berührungssensoren.

    Funktionsreferenzen

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