Par Jeremy Cook
L'ESP32 est un appareil incroyable : il est capable de traiter des informations à des fréquences de plusieurs centaines de mégahertz, de communiquer par Wi-Fi et Bluetooth et d'exécuter un large éventail de tâches grâce à ses broches GPIO. Pourtant, on pourrait dire qu'un grand pouvoir implique... une grande…consommation électrique.
Pour être honnête, la consommation électrique de l'ESP32 est relativement faible par rapport à celle de dispositifs comparables d'il y a 10 ans. Mais pour les applications IoT modernes, surtout si une pile est nécessaire, elle peut représenter un lourd fardeau, avec une consommation de plusieurs centaines de milliampères de courant au plus fort de l'activité.
Heureusement, l'ESP32 possède également des modes de veille et d'hibernation. Utilisés avec soin, ces modes permettent de maîtriser l'appétit de l'ESP ou, au moins, de le circonscrire à de brefs pics d'activité.
Modes de veille
Le tableau suivant, tiré de la fiche technique de l'ESP32, répertorie les modes de veille profonde et les autres modes d'alimentation de l'appareil :
L'ESP32 possède cinq modes basse consommation : veille modem, veille légère, veille profonde, hibernation et mise hors tension. La veille modem et la veille profonde présentent plusieurs sous-modes, avec différents taux de consommation électrique selon leurs capacités de traitement actives. L'hibernation stoppe la quasi-totalité des fonctionnalités de la puce, à l'exception d'une horloge en temps réel destinée à la réveiller à l'issue d'une période définie. Le mode de mise hors tension est activé lorsqu'une broche CHIP_PU est réglée sur une valeur basse et nécessite une interaction externe pour reprendre les traitements.
L'avantage de tout ceci est que les modes basse consommation de l'ESP32 peuvent consommer respectivement entre 68 mA et 5 µA ou 0,068 A et 0,000005 A, indépendamment de la mise hors tension. L'inconvénient est que chaque mode limite l'utilité du l'ESP32, comme cela est expliqué ci-dessous :
Si l'on néglige les effets de tension, une petite pile rechargeable de 3,7 V et 850 mAh pourrait alimenter une ESP32 en mode de veille modem pendant environ 12,5 heures. La veille légère pourrait durer plus de 1 000 heures. Une hibernation de mi-niveau de veille profonde offre une durée de 8 500 heures (environ un an), tandis qu'un état d'hibernation pourrait en théorie être maintenu pendant près de 20 ans. Bien évidemment, l'appareil devra être réveillé de temps à autre pour être d'une quelconque utilité, mais une planification soigneuse pourrait permettre de conférer une très longue durée de vie à une configuration avec ESP32 entre deux rechargements.
Différences entre les modes de veille profonde de la carte de développement ESP32
Lorsqu'il s'agit de consommation électrique, une puce ou un module ESP32 ne représente qu'une partie de l'appareillage électronique. Si vous souhaitez expérimenter, vous utiliserez probablement une carte de développement. Pour les conceptions électroniques plus épurées, un arrangement personnalisé de pièces associées sera nécessaire pour exécuter un « objet » IoT. Correctement programmée, une ESP32 peut faire preuve d'une grande efficacité énergétique, mais l'électronique environnante doit être pensée avec soin.
Pour illustrer ce point, j'ai branché une carte de développement Adafruit HUZZAH32 ESP32à une alimentation et à un matériel de mesure du courant, ainsi qu'à une carte ESP32 DFRobot DFR0478. Toutes deux figurent dans cette publication sur une horloge vidéo composite avec ESP32 et ont manifesté des comportement différents dans ce qui pourrait être considéré comme un cas d'utilisation assez confidentiel. Le rendement énergétique pourrait aussi se révéler être un paramètre distinctif entre les deux.
Pour le vérifier, j'ai utilisé un exemple modifié de « TimerWakeUp » d'ESP32 Arduino qui passe en veille profonde, se réveille, allume le voyant LED, puis redémarre le cycle en repassant en veille. Chaque carte a reçu 5,3 V à convertir en une tension d'environ 3,3 nécessaire pour alimenter l'ESP32. La consommation a été la suivante :
HUZZAH32 : | veille = 6,6 mA | active = 43,2 mA active + LED = 44,6 mA |
DFR0478 : | veille = 0,02 mA | active = 39,7 mA active + LED = 40 mA |
Pour être honnête, une mesure du courant au niveau du port batterie dans un cas réel d'utilisation IoT aurait constitué une meilleure simulation. Il apparaît néanmoins dans ce scénario que la carte DFR0478 FireBeetle est bien plus efficace en mode veille que son homologue.
La HUZZAH32 tire 7 000 µA (7 mA) de la batterie en veille profonde, soit à peu près ce que j'avais mesuré dans mon expérience. Une analyse réalisée par Andreas Spiess a montré que la DFR0478 consommait 53 µA (0,053 mA) de courant de la batterie en mode de veille profonde. Cela fait nettement plus que ce que j'avais mesuré sur la DFR0478, mais son rapport utilise une alimentation différente et une version plus ancienne de la carte (la 2.0 au lieu de la 4.0 que j'avais testée). Cette mesure atteint également la limite inférieure de ce que mon multimètre est capable de mesurer, ce qui pourrait influer sur sa précision. Dernier bémol enfin, la FireBeetle testée utilise un module WROOM-32D ESP32, alors que la HUZZAH32 utilise un WROOM-32E.
Cela dit, la différence entre les deux cartes testées est de plusieurs ordres de grandeur, ce qui montre bien que le circuit entourant l'ESP32 peut très fortement influer sur la consommation électrique.
Consommation électrique de l'ESP32 tempérée par les modes de veille
L'ESP32 est un appareil d'une incroyable puissance qui peut nécessiter une quantité d'énergie assez importante pour fonctionner. Toutefois, avec une programmation attentive, il est possible de le faire fonctionner sur batterie pendant des semaines, des mois, voire plus. Le secret est de bien connaître les compromis qu'entraîne une conception basse consommation et de savoir ce qui peut être abandonné sans trop compromettre les performances.