Réduire la consommation d'un ESP grâce au deepsleep

En fonctionnement, un ESP8266 consomme environ 70mA. C'est peu, mais tout de même trop pour une utilisation sur batterie ou via panneau solaire! Il est possible de réduire ce courant utilisé en passant la puce dans un de ses modes "sleep". Il existe un sleep modem, qui met en pause seulement la puce wifi, mais conserve les capacités de calcul de l'ESP. Ce mode consomme seulement 15mA. Il existe un second mode, le light sleep, qui ne consomme que 0.9mA, et qui conserve des capacités de calcul limitées. Enfin, il existe un troisiéme mode, le deepsleep. Beaucoup plus économe car il ne consomme que 20uA (0,002mA), c'est aussi le mode le plus contraignant car l'esp ne dispose plus d'aucune possibilité de calcul et d'éxécution jusqu'a son reveil.

Pour cet article, on va s'interesser surtout au mode deepsleep.

Activer le mode deepsleep

Le mode deepsleep se démarre via la commande ESP.deepsleep(durée, mode_wifi) en arduino, ou via la commande node.dsleep(1000000, 4) en lua sur nodemcu.

Dés la fin de la commande, l'esp s'arrete et se met en veille. Le premier paramétre indique le temps de la mise en veille, et le second le mode du wifi au redémarrage.

Attention: A sa sortie de veille, l'ESP ne reprendra pas a la ligne suivante du deepsleep! Il recommencera le sketch/programme a zéro! C'est a vous dans votre programme de sauvegarder/charger ce qui convient pour reprendre l'activité la ou il faut.

Reveiller l'ESP

Que l'on opte pour un reveil timé ou un reveil manuel, l'ESP a besoin d'une impulsion sur RST pour redémarrer. Si vous voulez un redémarrage via timer (1er paramétre du sleep), vous devez impérativement connecter la broche RST a D0! En effet, le timer est juste un circuit a part que l'on programme pour balancer une impulsion tout seul au bout de X millisecondes. Cette impulsion doit parvenir a la broche RST pour obtenir le résultat attendu.

L'avantage de savoir ça, c'est que si vous voulez reveiller l'ESP uniquement lors d'une action extérieure, il suffit de connecter RST a un capteur et le tour est joué.

Par exemple, il peux être une bonne idée de connecter un capteur PIR 3 broches a ce PIN RST. De cette façon, l'esp se reveillera uniquement lorsqu'une présence sera detectée. C'est trés économe car en l'abscence de détection, seul le capteur consomme de l'énergie !

Limitations

Cependant ce mode a quelques limitations:

  • Le délai max du timer est de 4294967295us, soit environ 71 minutes. si vous fournissez une valeur supérieure, l'esp risque de ne pas se réveiller, ou de se réveiller plus tot que prévu.
  • Connecter D0 a RST bloque le chargement d'un nouveau programme car l'upload utilise RST. Avec nodemcu ça ne pose pas de probléme car on programme "a la volée", mais avec l'IDE arduino c'est bloquant. Pensez soit a prévoir une connexion retirable facilement, soit a la faire uniquement au montage final!
  • Suivant la valeur demandée pour le WIFI, l'ESP recommencera tout le processus de connexion a chaque sortie de veille. Prévoyez donc une sur-consommation à cette étape, et donc prévoyez des deepsleeps relativement longs!

Qu'avez vous pensé de cet article?