ESP32 S3 - LED - Clignotement sans délai
La façon la plus simple de faire clignoter une LED est d'utiliser la fonction delay(), mais cela empêche l'ESP32 S3 de faire quoi que ce soit d'autre pendant l'attente. Ce tutoriel vous enseigne une meilleure approche utilisant la fonction millis(), qui permet à l'ESP32 S3 de faire clignoter une LED tout en restant libre de gérer d'autres tâches simultanément.
Ce que vous allez construire :
- Un circuit ESP32 S3 avec une LED et un bouton câblés à la carte
- Un clignotement de LED non bloquant utilisant millis() au lieu de delay()
- Un moniteur d'état de bouton qui fonctionne correctement même pendant que la LED clignote
- Un exemple multitâche faisant clignoter deux LED à des intervalles différents tout en détectant un bouton

Nous allons parcourir trois exemples et comparer les différences entre eux.
- L'ESP32 S3 fait clignoter une LED en utilisant la fonction delay()
- L'ESP32 S3 fait clignoter une LED en utilisant la fonction millis()
- L'ESP32 S3 fait clignoter une LED en utilisant la bibliothèque ezLED
Cette méthode peut être appliquée pour permettre à l'ESP32 S3 d'effectuer plusieurs tâches en même temps. Le clignotement de LED n'est qu'un exemple.
Matériel requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables ESP32 S3 (ESP32 S3 inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Note d'achat: Pour simplifier le processus de câblage, nous recommandons d'utiliser le LED Module, qui est livré avec une résistance intégrée.
À propos de la LED et du bouton
Les LED et les boutons sont les deux composants les plus fondamentaux pour construire des projets ESP32 S3 interactifs. La LED fournit un retour visuel instantané de votre programme, tandis que le bouton fournit une entrée numérique que l'ESP32 S3 lit en temps réel. Les combiner dans un programme non bloquant vous permet d'observer comment le timing basé sur millis() garde l'ESP32 S3 réactif aux entrées même pendant qu'il gère une sortie temporisée.
Spécifications clés
Nous avons des tutoriels dédiés pour chaque composant avec des brochages détaillés, des instructions de câblage et des exemples de code :
- ESP32 S3 - LED - Clignotement - Bases de la LED et clignotement simple
- ESP32 S3 - Bouton - Lire l'état du bouton de manière fiable
Schéma de câblage
Connectez la LED et le bouton à votre ESP32 S3 en suivant le schéma de câblage ci-dessous. Assurez-vous que la LED est câblée via une résistance de 220 ohms et que la polarité est correcte avant de mettre la carte sous tension.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Notes de sécurité
Placez toujours la résistance de 220 ohms en série avec la LED pour limiter le courant et protéger à la fois la LED et la broche GPIO de l'ESP32 S3 contre les dommages. Le bouton connecte une borne à GND et l'autre à une broche GPIO ; le programme active la résistance de tirage (pull-up) interne, donc aucune résistance externe n'est nécessaire pour le bouton.
| Composant | Broche | Broche ESP32 S3 |
|---|---|---|
| LED | Anode (patte longue) | D7 |
| LED | Cathode (patte courte) | Résistance 220Ω vers GND |
| Bouton | Une borne | D5 |
| Bouton | Autre borne | GND |
Comparons le code ESP32 S3 qui fait clignoter une LED avec et sans utiliser la fonction delay()
Code ESP32 S3 - Avec délai
Le code suivant fait clignoter une LED en utilisant la fonction bloquante delay() et lit également l'état d'un bouton à chaque itération de la boucle. Bien que simple à écrire, cette approche a une limitation importante : l'ESP32 S3 ne peut pas traiter les pressions de bouton ni aucune autre entrée pendant la période de délai, ce qui entraîne des événements manqués.
Étapes rapides
- Nouveau sur ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
- Câblez le circuit : Connectez les composants selon le schéma de câblage ci-dessus.
- Connectez la carte : Branchez l'ESP32 S3 à votre ordinateur à l'aide d'un câble USB Type-C.
- Ouvrez l'Arduino IDE : Lancez l'Arduino IDE sur votre ordinateur.
- Sélectionnez la carte : Choisissez ESP32 S3 et son port COM correspondant.
- Copiez le code : Copiez le code ci-dessus et collez-le dans l'Arduino IDE.
- Téléversez le code : Cliquez sur le bouton Upload dans l'Arduino IDE pour compiler et téléverser.

- Ouvrez le moniteur série : Ouvrez le moniteur série depuis le menu Tools dans l'Arduino IDE.

- Appuyez sur le bouton 4 fois pendant que la LED clignote.
- Observez la LED : La LED bascule entre ON et OFF toutes les secondes.
- Vérifiez la sortie du moniteur série :
- Astuce pro : Remarquez que vous ne verrez PAS les quatre pressions de bouton dans le moniteur série. Cela est dû au fait que l'ESP32 S3 ne peut pas détecter d'entrée pendant la période de blocage de delay() — certaines pressions sont simplement manquées.
Code ESP32 S3 - Sans délai
Le code suivant remplace delay() par millis() pour suivre le temps écoulé sans bloquer le processeur. Comme la boucle s'exécute en continu, l'ESP32 S3 peut vérifier l'état du bouton à chaque itération tout en gérant indépendamment le timing du clignotement de la LED.
Étapes rapides
- Nouveau sur ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
- Téléversez le code : Copiez le code ci-dessus et téléversez-le vers votre ESP32 S3.
- Appuyez sur le bouton 4 fois pendant que la LED clignote.
- Observez la LED : La LED bascule toujours entre ON et OFF toutes les secondes.
- Vérifiez la sortie du moniteur série :
- Comparez avec la version delay : Les quatre événements de pression de bouton sont maintenant détectés et enregistrés correctement.
- Astuce pro : Le modèle millis() est la base du multitâche sur l'ESP32 S3 — maîtrisez-le une fois et appliquez-le à toute opération temporisée dans vos projets.
Explication du code ligne par ligne
Le code ESP32 S3 ci-dessus contient une explication ligne par ligne. Veuillez lire les commentaires dans le code !
Ajouter plus de tâches
Le code suivant démontre toute la puissance de la programmation non bloquante sur l'ESP32 S3 en faisant clignoter deux LED à des intervalles différents tout en surveillant simultanément un bouton — tout cela sans un seul appel à delay(). Chaque tâche conserve sa propre variable d'horodatage, et la boucle principale parcourt toutes ces tâches à chaque itération afin qu'aucune tâche n'attende jamais une autre.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Idées d'applications
Le timing non bloquant avec millis() est l'un des modèles les plus polyvalents en programmation ESP32 S3, applicable bien au-delà du simple clignotement de LED.
- Interrogation multi-capteurs : Lisez des capteurs de température, d'humidité et de mouvement à des intervalles différents sans aucun blocage entre les lectures.
- Indicateur de battement de cœur : Faites clignoter une LED d'état à un rythme fixe pendant que l'ESP32 S3 gère simultanément des connexions WiFi ou une messagerie MQTT.
- Entrée de bouton anti-rebond : Combinez le timing millis() avec l'anti-rebond de bouton pour détecter de manière fiable les pressions sans interrompre d'autres tâches.
- Contrôle de relais temporisé : Activez et désactivez des relais à des intervalles précis pour des systèmes d'irrigation, des programmations d'éclairage, ou de l'automatisation industrielle.
- Contrôle de vitesse de moteur : Gérez le timing PWM pour des moteurs ou des servos tout en surveillant simultanément des capteurs de sécurité sur l'ESP32 S3.
- Planificateur de journalisation de données : Échantillonnez les données de capteur à intervalles réguliers et mettez-les en tampon pour un téléversement périodique via WiFi sans bloquer la boucle de capteur.
Tutoriel vidéo
Regardez le tutoriel vidéo étape par étape pour ce projet ESP32 S3 ci-dessous.
Défiez-vous
Une fois que le clignotement non bloquant fonctionne sur votre ESP32 S3, approfondissez votre compréhension avec ces exercices progressivement plus difficiles.
- Débutant : Changez l'intervalle de clignotement de 1000 ms à 250 ms et observez comment la LED clignote plus vite sans affecter la détection du bouton.
- Débutant : Ajoutez une deuxième LED et faites-la clignoter à deux fois la vitesse de la première LED en utilisant des minuteries millis() séparées.
- Intermédiaire : Utilisez le bouton pour activer et désactiver le clignotement de la LED, afin qu'une pression démarre le clignotement et la suivante l'arrête.
- Intermédiaire : Implémentez trois tâches millis() indépendantes : faites clignoter la LED1 à 500 ms, la LED2 à 300 ms, et lisez l'état d'un bouton à des intervalles de 50 ms.
- Avancé : Remplacez la logique de timing millis() par la bibliothèque ezLED et comparez la complexité du code et le comportement sur l'ESP32 S3.