ESP8266-Diminuer la consommation
Cette page présente différents moyens de diminuer la consommation d'un ESP8266 afin d'augmenter la durée de vie d'un module équipé de ce microcontrôleur lorsqu'il est alimenté sur une baterie.
Les informations présentées dans cette page ont été largement inspirées par celle ci : Reducing WiFi power consumption on ESP8266, part 2
Introduction
Au réveil et par défaut, le Wifi est activé. Ceci implique une consommation minimum de l’ESP de 70 mA même si le Wifi n’est pas utilisé. Or, dans les IOT qui mesurent des données, envoient ces données par Wifi puis se rendorment, la consommation est un paramètre essentiel. Il pourrait être intéressant de réduire celle-ci autant que faire se peut.
Ainsi, pendant la phase de setup et de mesure il n’est nul besoin de laisser le Wifi en fonctionnement.
Lors des essais suivants, les mesures de courant ont été enregistrées à l'aide de l'Analyseur de courant simplifié.
Test 1 : démarrage simple (wifi activé par défaut)
Montage utilisé
Programme utilisé
void setup() { } void loop() { }
Mesure de courant
Pour mémoire, les durées sont estimées, a précision de l'analyseur de courant n'étant pas suffisamment précise.
Test 2 : démarrage avec arrêt du Wifi
Montage utilisé
Identique au précédent test
Programme utilisé
#include <ESP8266WiFi.h> void setup() { WiFi.mode( WIFI_OFF ); WiFi.forceSleepBegin(); delay( 1 ); } void loop() { }
Mesure de courant
Pour mémoire, les durées sont estimées, a précision de l'analyseur de courant n'étant pas suffisamment précise.
La réduction de consommation est notable : 21 mA au lieu de 77mA soit 27,3% de la consommation du premier test.
Avant de pouvoir utiliser la connection Wifi à nouveau, il sera nécessaire de réveiller la fonction Wifi de l'ESP :
WiFi.forceSleepWake(); delay( 1 );
Test 3 : Interdiction Wifi lors du réveil
Sur les courbes précédentes, on constate un pic de consommation lors du boot (jusqu'à 175 mA). Bien que cette phase soit très courte, il sera quand même intéressant de la limiter. Ceci est possible en interdisant l'activation de la fonction Wifi avant d'endormir l'ESP.
ESP.deepSleep( SLEEPTIME, WAKE_RF_DISABLED );
Dans cet essai la broche GPIO16 a été reliée à la broche RES afin que le compteur interne réalise un Reset de l'ESP à la fin de la pause de deep sleep.
Programme utilisé
#include <ESP8266WiFi.h> void setup() { WiFi.mode( WIFI_OFF ); WiFi.forceSleepBegin(); delay( 1 ); delay(100); // on ne fait rien pendant 100 ms ESP.deepSleep( 1000000, WAKE_RF_DISABLED ); //deep sleep 100 ms } void loop() { }
Mesure de courant
On constate qu'à la mise sous tension apparait un pic de consommation important mais que ce pic n'est plus présent lors des réveils successifs.
L'économie d'énergie est approximativement de 1,4 µAh à chaque réveil (130 mA pendant 38 ms)
Conclusion
Au réveil si le Wifi est activé (même s'il n'est pas utilisé : consommation 77 mA
Si l'on désactive le Wifi au rveil, la consommation chute à 21 mA
On peut gagner quelques microampère/heure en désactivant le Wifi avant de mettre l'ESP en deep Sleep
TEST 4 : modification de la sortie GPIO15
La sortie GPIO15 est reliée à la masse via une résistance de 12 kilo ohms. Selon la configuration de cette broche la consommation évolue. Les consommations suivantes sont données pour une phase de fonctionnement comme dans le test 2.
INPUT => 21 mA
OUTPUT (LOW) => 21 mA
OUTPUT (HIGH) => 22 mA
Pour éviter une surconsommation inutile et, dans la mesure où le circuit l'autorise, il vaut mieux maintenir cette sortie en entrée ou à l'état bas si elle est en sortie.