Pourquoi votre relais s'active-t-il au démarrage de l'ESP32 ? (Et comment y remédier)

Les relais pour ESP32 oscillent au démarrage car les modules actifs à l'état bas se déclenchent lorsque les broches de strapping flottent pendant le reset. Utilisez les broches GPIO sûres et les résistances de rappel adaptées pour éviter toute commutation intempestive.
Votre relais s'active pendant une fraction de seconde au démarrage car vous utilisez très probablement un module relais actif à l'état bas (active-low) connecté à une broche de l'ESP32 qui émet un signal de débogage PWM haute fréquence, flotte à l'état haut ou sert de broche de strapping pendant la réinitialisation du microcontrôleur. Durant les 100 à 400 millisecondes qui s'écoulent avant que votre code n'exécute digitalWrite(pin, HIGH), l'optocoupleur du module relais trouve un chemin vers la masse et enclenche la bobine.
Dans une serre pédagogique ou un projet domotique de classe, un déclenchement furtif ressemble à un simple clic anodin. En pratique, après une bascule de délestage réseau (load-shedding) habituelle ou une réinitialisation consécutive à une baisse de tension (brownout), ce sursaut d'un quart de seconde peut inonder un bac de semis sans surveillance, envoyer une impulsion à un moteur 12V CC ou enclencher un équipement sous haute tension sur le secteur.
Anatomie d'un déclenchement intempestif sur un relais actif à l'état bas
La plupart des modules relais d'expérimentation vendus en Afrique du Sud sont « actifs à l'état bas » (active-low). Leur circuit d'entrée comprend une diode d'optocoupleur dont l'anode est reliée en permanence au rail d'alimentation 5V ou 3,3V via une résistance intégrée. Pour alimenter le relais, la broche du microcontrôleur doit passer à l'état bas, soit 0V (masse), permettant ainsi au courant de circuler à travers la diode.
Cela crée un scénario de défaillance vulnérable lors de la mise sous tension :
- État de haute impédance (flottant) : Lorsque l'ESP32 s'allume ou redémarre après une sous-tension, ses broches d'entrée/sortie à usage général (GPIO) s'initialisent en tant qu'entrées à haute impédance. Si des résistances de rappel à la masse (pull-down) internes ou externes tirent cette broche vers la masse, l'optocoupleur devient immédiatement passant.
- Journalisation série du chargeur d'amorçage ROM : Par défaut, le bootloader interne de l'ESP32 transmet des messages de débogage à 115 200 bauds sur certaines broches précises dès sa mise sous tension. Cette rafale de niveaux logiques est perçue par un optocoupleur comme un signal actif.
- Délai avant l'exécution de setup() : Tant que le noyau FreeRTOS n'a pas démarré et n'a pas atteint la fonction
setup()de votre programme — où vous définissez expressémentpinMode()et maintenez la broche à l'état HAUT —, l'état matériel de la broche dépend exclusivement des valeurs par défaut fixées dans le silicium de la puce Espressif.
Les broches à risque : GPIO de strapping et anomalies au démarrage
L'ESP32 standard (WROOM-32) possède plusieurs broches multifonctions que vous ne devriez jamais relier directement à un actionneur ou à un relais sans circuit externe d'appoint. Évitez tout particulièrement ces broches pour commuter des charges :
| Broche GPIO | Comportement par défaut à la mise sous tension | Pourquoi elle échoue avec un relais |
|---|---|---|
| GPIO 0 | Résistance de pull-up interne faible ; broche de strapping pour le bootloader | Tirée au niveau HAUT, mais des parasites ou une charge faible au démarrage forcent le mode flash. |
| GPIO 2 | Résistance de pull-down interne faible ; broche de strapping ; reliée à la LED intégrée | Tirée au niveau BAS au reset ; déclenche immédiatement les relais actifs à l'état bas dès la mise sous tension. |
| GPIO 5 | Émet une impulsion d'horloge PWM pendant le reset (broche de strapping) | Provoque un claquement ou un battement rapide et audible des contacts du relais au démarrage. |
| GPIO 12 | Résistance de pull-down interne faible ; broche de strapping (sélection de tension) | Tirée au niveau BAS au reset ; déclenche les modules actifs à l'état bas. Un tirage externe au niveau haut risque de bloquer définitivement le démarrage. |
| GPIO 15 | Émet les messages de débogage de la ROM (signal PWM carré silencieux) au démarrage | Déclenche les relais actifs à l'état bas jusqu'à ce que le micrologiciel soit totalement initialisé. |
Les broches GPIO 34, 35, 36 (VP) et 39 (VN) sont des entrées pures ; elles ne disposent d'aucun étage de sortie interne et ne peuvent commuter un module relais sous aucun prétexte.
Les broches GPIO sûres à utiliser
Pour obtenir un comportement au démarrage silencieux, prévisible et sans rebond de contact lors d'un rétablissement du courant, reliez la commande de votre relais à l'une des broches à usage général véritablement neutres :
- GPIO 18
- GPIO 19
- GPIO 21
- GPIO 22
- GPIO 23
- GPIO 25, 26, 27, 32, 33
Aucune de ces broches n'émet de flux série résiduel depuis la ROM, et aucune ne sert de broche critique de configuration du démarrage pendant les premières millisecondes de mise sous tension de la puce.
Corriger le micrologiciel : l'ordre des instructions est crucial
Même sur une broche sans risque, le code habituel de type Arduino introduit fréquemment un glitch microscopique en raison de l'ordre d'appel des fonctions. De nombreux élèves écrivent :
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Pour active-low : HIGH = OFF
Dès l'exécution de pinMode(..., OUTPUT), l'ESP32 positionne par défaut le registre de sortie à LOW (0V) pendant plusieurs microsecondes avant d'exécuter la ligne suivante. Sur des optocoupleurs rapides, cette brève chute suffit amplement à coller l'armature de la bobine.
Inversez l'ordre des instructions dans votre fonction de configuration afin que le tampon de sortie soit préchargé avant même que la broche ne bascule en mode sortie :
digitalWrite(RELAY_PIN, HIGH); // Prérégler l'état sur OFF
pinMode(RELAY_PIN, OUTPUT); // Activer l'étage de sortie
La solution matérielle : résistances de pull-up externes
Le micrologiciel ne peut pas vous prémunir seul contre un plantage imprévu de l'ESP32, une chute de tension sous le seuil de brownout de 2,7V ou la rampe de montée en tension initiale de l'alimentation. Si votre relais pilote une pompe à eau inductive ou une gâche de sécurité dans un atelier scolaire, la sécurité doit reposer sur le matériel.
Placez une résistance de pull-up externe de 4,7 kΩ ou 10 kΩ entre la broche de commande de l'ESP32 et la ligne 3,3V. Cela garantit que la gâchette ou l'optocoupleur reste maintenu à l'état haut pendant l'initialisation du microcontrôleur, empêchant la broche de flotter vers la zone active de déclenchement. Vous pouvez également opter pour un module relais actif à l'état haut (active-high), sur lequel une entrée flottante reste inoffensive à 0V jusqu'à ce que votre code lui applique délibérément un niveau logique de 3,3V.
Pour les enseignants qui conçoivent des systèmes de classe automatisés, des bancs d'essai ou des déploiements IoT scolaires devant tolérer les coupures de courant sans faillir, Sheen Robotics fournit des schémas de référence et des parcours pédagogiques via Sheen IoT afin d'aider vos élèves à concevoir des montages fiables dès l'étape de prototypage.



