ESP8266 - LED - Blinken ohne Verzögerung

Stellen wir uns vor, dass der ESP8266 zwei Aufgaben zu erfüllen hat: das Blinken einer LED und die Überwachung des Zustands eines Tasters, der jederzeit gedrückt werden kann. Wenn wir die Funktion delay() verwenden (wie in einem früheren Tutorial erläutert), könnte der ESP8266 möglicherweise einige der Tastendrücke verpassen. Mit anderen Worten wäre der ESP8266 nicht in der Lage, die zweite Aufgabe vollständig auszuführen.

Dieses Tutorial zeigt dir, wie du den ESP8266 dazu bringst, eine LED blinken zu lassen, und den Zustand eines Knopfs zu überwachen, ohne auch nur einen einzigen Knopfdruck zu verpassen.

Wir werden drei Beispiele durchgehen und die Unterschiede zwischen ihnen vergleichen:

Diese Methode beschränkt sich nicht nur auf das Blinken der LED und das Prüfen des Zustands des Knopfs. Sie ermöglicht es dem ESP8266 im Allgemeinen, mehrere Aufgaben gleichzeitig auszuführen, ohne sich gegenseitig zu blockieren.

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×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
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.

Kaufhinweis: Um den Verdrahtungsprozess zu vereinfachen, empfehlen wir die Verwendung des LED Module, das mit einem eingebauten Widerstand geliefert wird.

Über LED und Taster

Wenn Sie mit LED und Taster nicht vertraut sind (Pinbelegung, Funktionalität, Programmierung ...), können Ihnen die folgenden Tutorials helfen:

Verdrahtungsdiagramm

ESP8266 NodeMCU-LED-Schaltplan

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.

ESP8266 Code - Mit Verzögerung

/* * 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-led-blink-without-delay */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button #define LED_PIN D7 // The ESP8266 pin D7 connected to led #define BLINK_INTERVAL 1000 // interval at which to blink LED (milliseconds) int led_state = LOW; // led_state used to set the LED int prev_button_state = LOW; // will store last time button was updated void setup() { Serial.begin(9600); // Configure the ESP8266 pin as a digital output pin pinMode(LED_PIN, OUTPUT); // Configure the ESP8266 pin as a digital input pin pinMode(BUTTON_PIN, INPUT); } void loop() { // if the LED is off turn it on and vice-versa: led_state == (led_state == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN, led_state); delay(BLINK_INTERVAL); // If button is pressed during this time, ESP8266 CANNOT detect int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // print out the state of the button: Serial.println(button_state); // save the last state of button prev_button_state = button_state; } // DO OTHER WORKS HERE }

Schnelle Schritte

Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir das Tutorial wie man die Umgebung für ESP8266 in der Arduino IDE einrichtet an, falls du ESP8266 zum ersten Mal verwendest.
  • Verdrahte die Komponenten wie im Diagramm gezeigt.
  • Schließe das ESP8266-Board über ein USB-Kabel an deinen Computer an.
  • Öffne die Arduino IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, z. B. NodeMCU 1.0 (ESP-12E-Modul), und seinen jeweiligen COM-Port.
  • Stecke das USB-Kabel in das ESP8266-Board und in den PC.
  • Starte die Arduino IDE, wähle das richtige Board und den richtigen Port aus.
  • Kopiere den Code und öffne ihn in der Arduino IDE.
  • Klicke in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code zu kompilieren und auf den ESP8266 hochzuladen.
Wie man Code auf dem ESP8266 NodeMCU mit der Arduino-IDE hochlädt
  • Öffne den seriellen Monitor.
  • Drücke den Knopf viermal.
  • Schau dir die LED an; sie wechselt jede Sekunde zwischen Ein und Aus.
  • Schau dir die Ausgabe im seriellen Monitor an.
COM6
Send
1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Im seriellen Monitor wurden einige Drückzeiten nicht registriert. Das liegt daran, dass der ESP8266 während einer Verzögerung keine Aufgaben ausführen kann. Folglich kann er das Drückereignis nicht erkennen.

ESP8266 Code - Ohne Verzögerung

/* * 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-led-blink-without-delay */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button #define LED_PIN D7 // The ESP8266 pin D7 connected to led #define BLINK_INTERVAL 1000 // interval at which to blink LED (milliseconds) int led_state = LOW; // led_state used to set the LED int prev_button_state = LOW; // will store last time button was updated unsigned long prev_time_ms = 0; // will store last time LED was updated void setup() { Serial.begin(9600); // Configure the ESP8266 pin as a digital output pin pinMode(LED_PIN, OUTPUT); // Configure the ESP8266 pin as a digital input pin pinMode(BUTTON_PIN, INPUT); } void loop() { // check to see if it's time to blink the LED; that is, if the difference // between the current time and last time you blinked the LED is bigger than // The interval at which you want to blink the LED. unsigned long time_ms = millis(); if (time_ms - prev_time_ms >= BLINK_INTERVAL) { // if the LED is off turn it on and vice-versa: led_state == (led_state == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN, led_state); // save the last time you blinked the LED prev_time_ms = time_ms; } // check button state's change int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // print out the state of the button: Serial.println(button_state); // save the last state of button prev_button_state = button_state; } // DO OTHER WORKS HERE }

Schnelle Schritte

  • Verbinden Sie die Bauteile wie im Diagramm gezeigt.
  • Verbinden Sie das ESP8266-Board mit Ihrem Computer über ein USB-Kabel.
  • Öffnen Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das richtige ESP8266-Board aus, z. B. NodeMCU 1.0 (ESP-12E-Modul), und den entsprechenden COM-Port.
  • Führen Sie den Code aus und drücken Sie den Knopf viermal.
  • Schauen Sie sich die LED an, die sich in regelmäßigen Abständen von einer Sekunde abwechselnd ein- und ausschaltet.
  • Überprüfen Sie die Ausgabe im seriellen Monitor.
COM6
Send
1 0 1 0 1 0 1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Alle Vorkommnisse von dringenden Angelegenheiten wurden identifiziert.

Code-Erklärung

Schau dir die zeilenweise Erklärung in den Kommentaren des Quellcodes an!

Weitere Aufgaben hinzufügen

Der untenstehende ESP8266-Code tut

  • Lässt zwei LEDs mit unterschiedlichen Intervallen blinken.
  • Prüft den Zustand des Tasters.
/* * 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-led-blink-without-delay */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button #define LED_PIN_1 D6 // The ESP8266 pin D7 connected to led #define LED_PIN_2 D7 // The ESP8266 pin D7 connected to led #define BLINK_INTERVAL_1 1000 // interval at which to blink LED 1 (milliseconds) #define BLINK_INTERVAL_2 500 // interval at which to blink LED 2 (milliseconds) int led_state_1 = LOW; // led_state used to set the LED 1 int led_state_2 = LOW; // led_state used to set the LED 2 int prev_button_state = LOW; // will store last time button was updated unsigned long prev_time_ms_1 = 0; // will store last time LED 1 was updated unsigned long prev_time_ms_2 = 0; // will store last time LED 2 was updated void setup() { Serial.begin(9600); // Configure the ESP8266 pin as a digital output pin pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); // Configure the ESP8266 pin as a digital input pin pinMode(BUTTON_PIN, INPUT); } void loop() { unsigned long time_ms = millis(); // check to see if it's time to blink the LED 1 if (time_ms - prev_time_ms_1 >= BLINK_INTERVAL_1) { // if the LED is off turn it on and vice-versa: led_state_1 == (led_state_1 == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN_1, led_state_1); // save the last time you blinked the LED prev_time_ms_1 = time_ms; } // check to see if it's time to blink the LED 2 if (time_ms - prev_time_ms_2 >= BLINK_INTERVAL_2) { // if the LED is off turn it on and vice-versa: led_state_2 == (led_state_2 == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN_2, led_state_2); // save the last time you blinked the LED prev_time_ms_1 = time_ms; } // check button state's change int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // print out the state of the button: Serial.println(button_state); // save the last state of button prev_button_state = button_state; } // DO OTHER WORKS HERE }

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.

Erweiterbarkeit

Diese Methode ermöglicht dem ESP8266, mehrere Aufgaben gleichzeitig auszuführen, ohne dass eine Aufgabe die andere blockiert. Zum Beispiel das Senden einer Anfrage ins Internet und das Warten auf die Antwort, während gleichzeitig LED-Indikatoren blinken und der Abbruchtaste überwacht wird.

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