<aside> <img src="/icons/user-circle_gray.svg" alt="/icons/user-circle_gray.svg" width="40px" /> Document rédigé par Maude Auberson-Lavoie

</aside>

Introduction

Pour plusieurs projets il peut être utile de mettre un microcontrôleur en veille pour économiser de l’énergie, surtout si notre projet fonctionne sur batterie. Voici quelques éléments trouvés lors de mes recherches sur les modes de veille et d’éveil du ESP8266.

Deep Sleep

Le mode deep sleep est le plus économe en énergie. Dans la programmation, pour entrer en deep sleep il suffit d’écrire ESP.deepSleep(*nombre de microsecondes de veille désiré*, *mode de réveil désiré*). On peux omettre le mode de réveil. Par exemple:

ESP.deepSleep(10e6); // mise en veille pour 10 secondes
ESP.deepSleep(0); //mise en veille pour un temps indéterminé
ESP.deepSleep(10e6, WAKE_RF_DISABLED); //après 10 secondes le ESP se réveillera,
// mais pas de Wifi

Pour que le ESP se réveille de lui-même après la durée choisie, la pin D0 (c’est la pin utilisée pour wake sur le D1 mini) doit être connectée à RST. Il faut les connecter après avoir téléversé le sketch, sinon cela crée une erreur de connexion et le téléversement est impossible. Si on utilise un autre microcontrôleur, il faut vérifier quelle pin est utilisée pour wake et connecter cette pin à RST. La durée choisie a une limite! La documentation n’est pas claire sur quelle est cette limite et les avis sur les forums sont divers.

Selon les tests:

Si on utilise ESP.deepSleep(0) il faudra réveiller le ESP de façon externe soit en cliquant sur le bouton reset soit en envoyant un courant LOW sur la pin RST. On pourrait par exemple avoir une RTC, un bouton ou une autre composante peu énergivore connectée à la pin RST et qui envoie LOW quand on veut réveiller le ESP.

Sur les forums, certains individus semblaient dire que le mode d’éveil sélectionné ne fait en fait aucune différence, et que même si on sélectionne de ne pas relancer le WiFi à l’éveil il sera relancé. Voir les références pour les différents mode existants et leur fonction supposée.

Autres modes

Il y a aussi le Modem Sleep, qui met seulement le module WiFi en veille, et le Light Sleep. Je n’ai pas beaucoup testé ces modes, mais ils sont expliqués dans la ressource de mischianti.org ci-dessous (dans les références).

Faire un reset dans la programmation

En Deep Sleep, toutes les fonctions programmées dans le ESP cessent de fonctionner. Mais si on est par exemple en Modem Sleep il est possible soit de réactiver le modem tel que montré dans la référence ci-dessous, soit de faire un reset complet du ESP. Cela peut être utile si on veut recommencer le programme au complet (remettre les variables à zéro, etc.). La référence ci-dessous sur Instructables explique comment le faire pour un Arduino, c’est le même principe pour un ESP.

Le fonctionnement est comme l’éveil de Deep Sleep: il faut envoyer LOW sur RST. La chose à savoir est que dans void setup(), il faut mettre la pin utilisée pour le reset à HIGH avant de l’indiquer comme OUTPUT. Sinon, on se retrouve coincé sur une boucle infinie de reset.

Par exemple, ceci reset toutes les 10 secondes si la pin 16 est connectée à RST: