ESP32 S3 - LED - Blinken ohne Delay

Die einfachste Art, eine LED blinken zu lassen, ist die Funktion delay(), doch diese blockiert den ESP32 S3 während der Wartezeit für alle anderen Aufgaben. Dieses Tutorial zeigt Ihnen einen besseren Ansatz mit der Funktion millis(), mit der der ESP32 S3 eine LED blinken lässt und gleichzeitig frei bleibt, um andere Aufgaben zu erledigen.

Was Sie bauen werden:

  1. Eine ESP32 S3 Schaltung mit einer LED und einem Taster, die mit dem Board verbunden sind
  2. Ein nicht blockierendes LED-Blinken mit millis() statt delay()
  3. Eine Überwachung des Tasterzustands, die auch während des LED-Blinkens korrekt funktioniert
  4. Ein Multitasking-Beispiel, bei dem zwei LEDs in unterschiedlichen Intervallen blinken und gleichzeitig der Taster erkannt wird
ESP32 S3 - LED - Blinken ohne Delay

Wir gehen drei Beispiele durch und vergleichen die Unterschiede zwischen ihnen.

Mit dieser Methode kann der ESP32 S3 mehrere Aufgaben gleichzeitig erledigen. Das Blinken einer LED ist nur ein Beispiel.

Erforderliche Hardware

1×ESP32 S3 WROOM N16R8
1×(Alternativ) ESP32 S3 SuperMini Dev Module
1×(Alternativ) ESP32 S3 Uno-form Board
1×(Alternativ) ESP32 S3 Camera Board
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×(Alternativ) Button and LED Kit
1×220Ω Resistor
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) Screw Terminal Expansion Board for ESP32 S3
1×(Empfohlen) Breakout Expansion Board for ESP32 S3
1×(Empfohlen) Power Splitter for ESP32 S3

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 S3 Starter-Kit (ESP32 S3 enthalten)
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.

Überblick über LED and Button

LEDs und Taster sind die beiden grundlegendsten Komponenten für interaktive ESP32 S3 Projekte. Die LED liefert eine sofortige visuelle Rückmeldung Ihres Programms, während der Taster einen digitalen Eingang bereitstellt, den der ESP32 S3 in Echtzeit ausliest. Wenn Sie beide in einem nicht blockierenden Sketch kombinieren, sehen Sie, wie das auf millis() basierende Timing den ESP32 S3 auch dann reaktionsfähig für Eingaben hält, während er zeitgesteuerte Ausgaben verwaltet.

Wichtige Spezifikationen

Wir haben eigene Tutorials für jede Komponente mit detaillierter Pinbelegung, Verdrahtungsanleitung und Beispielcode:

Verdrahtungsdiagramm

Schließen Sie die LED und den Taster gemäß dem folgenden Schaltplan an Ihren ESP32 S3 an. Achten Sie darauf, dass die LED über einen 220-Ohm-Widerstand angeschlossen und die Polarität korrekt ist, bevor Sie das Board mit Strom versorgen.

ESP32 S3 LED Taster Schaltplan

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

Sicherheitshinweise

Schalten Sie den 220-Ohm-Widerstand immer in Reihe mit der LED, um den Strom zu begrenzen und sowohl die LED als auch den GPIO-Pin des ESP32 S3 vor Schäden zu schützen. Der Taster verbindet einen Anschluss mit GND und den anderen mit einem GPIO-Pin; der Sketch aktiviert den internen Pull-up-Widerstand, sodass für den Taster kein externer Widerstand nötig ist.

Komponente Pin ESP32 S3 Pin
LED Anode (langes Bein) D7
LED Kathode (kurzes Bein) 220Ω-Widerstand nach GND
Taster Ein Anschluss D5
Taster Anderer Anschluss GND

Vergleichen wir den ESP32 S3 Code, der eine LED mit und ohne die Funktion delay() blinken lässt

ESP32 S3 Code - Mit Delay

Der folgende Code lässt eine LED mit der blockierenden Funktion delay() blinken und liest außerdem in jedem Schleifendurchlauf den Tasterzustand aus. Dieser Ansatz ist zwar einfach zu schreiben, hat aber eine erhebliche Einschränkung: Der ESP32 S3 kann während der Verzögerung keine Tastendrücke oder andere Eingaben verarbeiten, sodass Ereignisse verpasst werden.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 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-s3/esp32-s3-led-blink-without-delay */ #define LED_PIN 7 // The ESP32 S3 pin GPIO7 connected to LED #define BUTTON_PIN 5 // The ESP32 S3 pin GPIO5 connected to button #define BLINK_INTERVAL 1000 // interval at which to blink LED (milliseconds) // Variables will change: int ledState = LOW; // ledState used to set the LED int previousButtonState = LOW; // will store last time button was updated void setup() { Serial.begin(9600); // set the digital pin as output: pinMode(LED_PIN, OUTPUT); // set the digital pin as an input: pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // if the LED is off turn it on and vice-versa: ledState = (ledState == LOW) ? HIGH : LOW; // set the LED with the ledState of the variable: digitalWrite(LED_PIN, ledState); delay(BLINK_INTERVAL); // If button is pressed during this time, Arduino CANNOT detect int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState != previousButtonState) { // print out the state of the button: Serial.println(currentButtonState); // save the last state of button previousButtonState = currentButtonState; } // DO OTHER WORKS HERE }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Schaltung verdrahten: Verbinden Sie die Komponenten gemäß dem obigen Schaltplan.
  3. Board anschließen: Verbinden Sie den ESP32 S3 über ein USB-Type-C-Kabel mit Ihrem Computer.
  4. Arduino IDE öffnen: Starten Sie die Arduino IDE auf Ihrem Computer.
  5. Board auswählen: Wählen Sie ESP32 S3 und den zugehörigen COM-Port.
  6. Code kopieren: Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
  7. Code hochladen: Klicken Sie in der Arduino IDE auf die Schaltfläche Upload, um zu kompilieren und hochzuladen.
So laden Sie ESP32 S3 Code in der Arduino IDE hoch
  1. Serial Monitor öffnen: Öffnen Sie den Serial Monitor über das Menü „Tools“ der Arduino IDE.
So öffnen Sie den Serial Monitor in der Arduino IDE
  1. Drücken Sie den Taster 4-mal, während die LED blinkt.
  2. LED beobachten: Die LED wechselt jede Sekunde zwischen EIN und AUS.
  3. Ausgabe im Serial Monitor prüfen:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-06-16 10:00:01] Button state: 1 [2026-06-16 10:00:02] Button state: 0 [2026-06-16 10:00:05] Button state: 1 [2026-06-16 10:00:06] Button state: 0
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2
  1. Profi-Tipp: Beachten Sie, dass Sie im Serial Monitor NICHT alle vier Tastendrücke sehen. Das liegt daran, dass der ESP32 S3 während der blockierenden delay()-Phase keine Eingaben erkennen kann – einige Tastendrücke gehen einfach verloren.

ESP32 S3 Code - Ohne Delay

Der folgende Code ersetzt delay() durch millis(), um die verstrichene Zeit zu messen, ohne den Prozessor zu blockieren. Da die Schleife ununterbrochen läuft, kann der ESP32 S3 den Tasterzustand in jedem Durchlauf prüfen, während er das Blink-Timing der LED unabhängig davon steuert.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 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-s3/esp32-s3-led-blink-without-delay */ #define LED_PIN 7 // The ESP32 S3 pin GPIO7 connected to LED #define BUTTON_PIN 5 // The ESP32 S3 pin GPIO5 connected to button #define BLINK_INTERVAL 1000 // interval at which to blink LED (milliseconds) // Variables will change: int ledState = LOW; // ledState used to set the LED int previousButtonState = LOW; // will store last time button was updated unsigned long previousMillis = 0; // will store last time LED was updated void setup() { Serial.begin(9600); // set the digital pin as output: pinMode(LED_PIN, OUTPUT); // set the digital pin as an input: pinMode(BUTTON_PIN, INPUT_PULLUP); } 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 currentMillis = millis(); if (currentMillis - previousMillis >= BLINK_INTERVAL) { // if the LED is off turn it on and vice-versa: ledState = (ledState == LOW) ? HIGH : LOW; // set the LED with the ledState of the variable: digitalWrite(LED_PIN, ledState); // save the last time you blinked the LED previousMillis = currentMillis; } // check button state's change int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState != previousButtonState) { // print out the state of the button: Serial.println(currentButtonState); // save the last state of button previousButtonState = currentButtonState; } // DO OTHER WORKS HERE }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Code hochladen: Kopieren Sie den obigen Code und laden Sie ihn auf Ihren ESP32 S3 hoch.
  3. Drücken Sie den Taster 4-mal, während die LED blinkt.
  4. LED beobachten: Die LED wechselt weiterhin jede Sekunde zwischen EIN und AUS.
  5. Ausgabe im Serial Monitor prüfen:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-06-16 10:00:01] Button state: 1 [2026-06-16 10:00:02] Button state: 0 [2026-06-16 10:00:03] Button state: 1 [2026-06-16 10:00:04] Button state: 0 [2026-06-16 10:00:05] Button state: 1 [2026-06-16 10:00:06] Button state: 0 [2026-06-16 10:00:07] Button state: 1 [2026-06-16 10:00:08] Button state: 0
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2
  1. Mit der Delay-Version vergleichen: Alle vier Tastendrücke werden jetzt korrekt erkannt und protokolliert.
  2. Profi-Tipp: Das millis()-Muster ist die Grundlage für Multitasking auf dem ESP32 S3 – beherrschen Sie es einmal, können Sie es in Ihren Projekten auf jede zeitgesteuerte Aufgabe anwenden.

Zeilenweise Code-Erklärung

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

Weitere Aufgaben hinzufügen

Der folgende Code zeigt die volle Stärke der nicht blockierenden Programmierung auf dem ESP32 S3: Zwei LEDs blinken in unterschiedlichen Intervallen, während gleichzeitig ein Taster überwacht wird – ganz ohne einen einzigen delay()-Aufruf. Jede Aufgabe verwaltet ihre eigene Zeitstempel-Variable, und die Hauptschleife durchläuft in jeder Iteration alle Aufgaben, sodass keine Aufgabe auf eine andere warten muss.

ESP32 S3 LED zwei Taster Schaltplan

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

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 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-s3/esp32-s3-led-blink-without-delay */ #define LED_PIN_1 7 // The ESP32 S3 pin GPIO7 connected to LED 1 #define LED_PIN_2 6 // The ESP32 S3 pin GPIO6 connected to LED 2 #define BUTTON_PIN 5 // The ESP32 S3 pin GPIO5 connected to button #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) // Variables will change: int ledState_1 = LOW; // ledState used to set the LED 1 int ledState_2 = LOW; // ledState used to set the LED 2 int previousButtonState = LOW; // will store last time button was updated unsigned long previousMillis_1 = 0; // will store last time LED 1 was updated unsigned long previousMillis_2 = 0; // will store last time LED 2 was updated void setup() { Serial.begin(9600); // set the digital pin as output: pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); // set the digital pin as an input: pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { unsigned long currentMillis = millis(); // check to see if it's time to blink the LED 1 if (currentMillis - previousMillis_1 >= BLINK_INTERVAL_1) { // if the LED is off turn it on and vice-versa: ledState_1 = (ledState_1 == LOW) ? HIGH : LOW; // set the LED with the ledState of the variable: digitalWrite(LED_PIN_1, ledState_1); // save the last time you blinked the LED previousMillis_1 = currentMillis; } // check to see if it's time to blink the LED 2 if (currentMillis - previousMillis_2 >= BLINK_INTERVAL_2) { // if the LED is off turn it on and vice-versa: ledState_2 = (ledState_2 == LOW) ? HIGH : LOW; // set the LED with the ledState of the variable: digitalWrite(LED_PIN_2, ledState_2); // save the last time you blinked the LED previousMillis_2 = currentMillis; } // check button state's change int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState != previousButtonState) { // print out the state of the button: Serial.println(currentButtonState); // save the last state of button previousButtonState = currentButtonState; } // DO OTHER WORKS HERE }

Anwendungsideen

Nicht blockierendes Timing mit millis() ist eines der vielseitigsten Muster in der ESP32 S3 Programmierung und weit über das einfache Blinken einer LED hinaus anwendbar.

  1. Abfrage mehrerer Sensoren: Lesen Sie Temperatur-, Feuchtigkeits- und Bewegungssensoren in unterschiedlichen Intervallen aus, ohne dass sich die Messungen gegenseitig blockieren.
  2. Herzschlag-Anzeige: Lassen Sie eine Status-LED in festem Takt blinken, während der ESP32 S3 gleichzeitig WLAN-Verbindungen oder MQTT-Nachrichten verarbeitet.
  3. Entprellte Tastereingabe: Kombinieren Sie millis()-Timing mit dem Entprellen von Tastern, um Tastendrücke zuverlässig zu erkennen, ohne andere Aufgaben zu unterbrechen.
  4. Zeitgesteuerte Relaissteuerung: Schalten Sie Relais in genauen Intervallen ein und aus, etwa für Bewässerungssysteme, Beleuchtungspläne oder industrielle Automatisierung.
  5. Motordrehzahlregelung: Steuern Sie das PWM-Timing für Motoren oder Servos, während der ESP32 S3 gleichzeitig Sicherheitssensoren überwacht.
  6. Zeitplan für die Datenprotokollierung: Erfassen Sie Sensordaten in regelmäßigen Abständen und puffern Sie diese für einen periodischen Upload per WLAN, ohne die Sensorschleife zu blockieren.

Video Tutorial

Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3 Projekt an.

Fordern Sie sich selbst heraus

Sobald das nicht blockierende Blinken auf Ihrem ESP32 S3 funktioniert, vertiefen Sie Ihr Verständnis mit diesen zunehmend anspruchsvollen Übungen.

  1. Anfänger: Ändern Sie das Blinkintervall von 1000 ms auf 250 ms und beobachten Sie, wie die LED schneller blinkt, ohne die Tastererkennung zu beeinträchtigen.
  2. Anfänger: Fügen Sie eine zweite LED hinzu und lassen Sie sie mit separaten millis()-Timern doppelt so schnell blinken wie die erste LED.
  3. Fortgeschritten: Verwenden Sie den Taster, um das Blinken der LED ein- und auszuschalten, sodass ein Druck das Blinken startet und der nächste es stoppt.
  4. Fortgeschritten: Implementieren Sie drei unabhängige millis()-Aufgaben: LED1 im Abstand von 500 ms blinken lassen, LED2 im Abstand von 300 ms blinken lassen und den Tasterzustand alle 50 ms auslesen.
  5. Experte: Ersetzen Sie die millis()-Timing-Logik durch die Bibliothek ezLED und vergleichen Sie Codekomplexität und Verhalten auf dem ESP32 S3.

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