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:
- Eine ESP32 S3 Schaltung mit einer LED und einem Taster, die mit dem Board verbunden sind
- Ein nicht blockierendes LED-Blinken mit millis() statt delay()
- Eine Überwachung des Tasterzustands, die auch während des LED-Blinkens korrekt funktioniert
- Ein Multitasking-Beispiel, bei dem zwei LEDs in unterschiedlichen Intervallen blinken und gleichzeitig der Taster erkannt wird

Wir gehen drei Beispiele durch und vergleichen die Unterschiede zwischen ihnen.
- ESP32 S3 lässt die LED mit der Funktion delay() blinken
- ESP32 S3 lässt die LED mit der Funktion millis() blinken
- ESP32 S3 lässt die LED mit der Bibliothek ezLED blinken
Mit dieser Methode kann der ESP32 S3 mehrere Aufgaben gleichzeitig erledigen. Das Blinken einer LED ist nur ein Beispiel.
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 S3 Starter-Kit (ESP32 S3 enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Kaufhinweis: Um den Verdrahtungsprozess zu vereinfachen, empfehlen wir die Verwendung des LED Module, das mit einem eingebauten Widerstand geliefert wird.
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.

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.
Schnelle Schritte
- Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
- Schaltung verdrahten: Verbinden Sie die Komponenten gemäß dem obigen Schaltplan.
- Board anschließen: Verbinden Sie den ESP32 S3 über ein USB-Type-C-Kabel mit Ihrem Computer.
- Arduino IDE öffnen: Starten Sie die Arduino IDE auf Ihrem Computer.
- Board auswählen: Wählen Sie ESP32 S3 und den zugehörigen COM-Port.
- Code kopieren: Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
- Code hochladen: Klicken Sie in der Arduino IDE auf die Schaltfläche Upload, um zu kompilieren und hochzuladen.

- Serial Monitor öffnen: Öffnen Sie den Serial Monitor über das Menü „Tools“ der Arduino IDE.

- Drücken Sie den Taster 4-mal, während die LED blinkt.
- LED beobachten: Die LED wechselt jede Sekunde zwischen EIN und AUS.
- Ausgabe im Serial Monitor prüfen:
- 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.
Schnelle Schritte
- Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
- Code hochladen: Kopieren Sie den obigen Code und laden Sie ihn auf Ihren ESP32 S3 hoch.
- Drücken Sie den Taster 4-mal, während die LED blinkt.
- LED beobachten: Die LED wechselt weiterhin jede Sekunde zwischen EIN und AUS.
- Ausgabe im Serial Monitor prüfen:
- Mit der Delay-Version vergleichen: Alle vier Tastendrücke werden jetzt korrekt erkannt und protokolliert.
- 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.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
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.
- Abfrage mehrerer Sensoren: Lesen Sie Temperatur-, Feuchtigkeits- und Bewegungssensoren in unterschiedlichen Intervallen aus, ohne dass sich die Messungen gegenseitig blockieren.
- Herzschlag-Anzeige: Lassen Sie eine Status-LED in festem Takt blinken, während der ESP32 S3 gleichzeitig WLAN-Verbindungen oder MQTT-Nachrichten verarbeitet.
- Entprellte Tastereingabe: Kombinieren Sie millis()-Timing mit dem Entprellen von Tastern, um Tastendrücke zuverlässig zu erkennen, ohne andere Aufgaben zu unterbrechen.
- Zeitgesteuerte Relaissteuerung: Schalten Sie Relais in genauen Intervallen ein und aus, etwa für Bewässerungssysteme, Beleuchtungspläne oder industrielle Automatisierung.
- Motordrehzahlregelung: Steuern Sie das PWM-Timing für Motoren oder Servos, während der ESP32 S3 gleichzeitig Sicherheitssensoren überwacht.
- 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.
- 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.
- 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.
- 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.
- 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.
- Experte: Ersetzen Sie die millis()-Timing-Logik durch die Bibliothek ezLED und vergleichen Sie Codekomplexität und Verhalten auf dem ESP32 S3.