D'après la datasheet de l'ESP32, le courant consommé en mode deep sleep (RTC) est d'environ 10µA. Cette page explique comment nous avons mesuré le courant réellement consommé par l'ESP32 FireBeetle DFR0654 en mode deep sleep. Une comparaison des mesures de différentes cartes ESP32 est consultable sur cette page.
Ces mesures ont été faites avec les versions suivantes :
Nous avons utilisé un multimètre Matrehit Energy qui peut mesurer des courant à partir de 10nA.
Le code source utilisé pour basculer en mode deep sleep est présenté ci-dessous. L'ESP32 reste 10 secondes en fonctionnement normal, puis bascule en mode deep sleep pendant 10 secondes avant de recommencer.
// Convert from microseconds to seconds
#define uS_TO_S_FACTOR 1000000ULL
// Duration of each cycle (deep sleep and wakeup)
#define TIME_TO_SLEEP 10
// Setup() is call on startup and wakeup from deep sleep mode
void setup() {
// Display a message in the console
Serial.begin(9600);
Serial.println("Wake up");
// Turn the built-in LED on during wake up
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// TIME_TO_SLEEP seconds delais
delay(TIME_TO_SLEEP*1000);
// Display a message before deep sleep
Serial.println("Go to deep sleep");
// Turn off and keep off the built-in led during deep sleep
digitalWrite(LED_BUILTIN, LOW);
gpio_hold_en(GPIO_NUM_2);
// Set deep sleep duration
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// Switch to deep sleep mode
esp_deep_sleep_start();
}
void loop() {}
Notez que la FireBeetle a une led intégrée. Nous utilisons cette led pour vérifier si l'ESP32 est en mode "deep-sleep" ou non. La led est allumée au début de la configuration et éteinte avant de de passer en veille profonde. Nous devons appeler la ligne cidessous pour maintenir l'état état du GPIO (la led reste éteinte pendant le sommeil profond) :
gpio_hold_en(GPIO_NUM_2);
La documentation de la carte stipule :
Low Power Pad: Ce bloc est spécialement conçu pour une faible consommation d'énergie. Il est connecté par défaut. Vous pouvez couper le fil fin au milieu avec une lame pour le déconnecter. Après la déconnexion, la consommation électrique statique peut être réduite de 500 μA. La consommation électrique peut être réduite à 13 μA après avoir contrôlé le contrôleur principal entrer en mode veille par le programme. Remarque : lorsque le pad est déconnecté, vous pouvez uniquement piloter la lumière LED RVB via l'alimentation USB.
Cette carte a une connection nommée low power pad:
Si vous coupez le fil, la carte passe en basse consommation (elle déconnecte la puissance des led RGB) :
Dans ce qui suit, le courant est mesuré dans les deux modes : mode normal et mode basse consommation.
Normal | Deep sleep | Deep sleep [Low Power] | |
---|---|---|---|
Courant | 40 mA | 520 µA | 11,6 µA |
Puissance | 212 mW | 2,7 mW | 58 µW |
En mode normal, le courant est d'environ 40mA. En mode veille profonde, le courant est de 520 µA. Comme vous pouvez le constater cette consommation est loin des 10µA spécifiés dans la documentation de l'ESP32:
Analysons le schéma afin de comprendre d'où provient cette consommation de 520 µA.
Tout d'abord, il n'y a pas de led d'alimentation. Il y a une led intégrée mais cette led peut être éteinte en passant en mode veille profonde comme nous l'avons fait précédemment.
Le CH340C est un convertisseur USB vers UART. Il est alimenté par la broche VCC qui est alimenté par VUSB qui provient du connecteur USB U1. Cela signifie que le driver USB n'est pas alimenté si l'USB n'est pas connecté. En d'autres termes, la consommation d'énergie du CH340C est nulle lorsque l'USB est débranché.
Il en va de même pour le TP4056 (chargeur de batterie Li-Ion). Le chargeur est alimenté par VUSB fourni par le connecteur USB. La consommation d'énergie de U3 est nulle lorsque l'USB n'est pas alimenté.
Le point suivant est le régulateur U2. Le régulateur de tension est un RT9080-33GJ5. Selon la documentation, ce régulateur de tension low drop out (LDO) ne nécessite que 2μA de ground current à vide. Il est clair que ce régulateur a un excellent rendement.
Ce diviseur de tension est utilisé pour mesurer la tension de la batterie. La sortie est connectée au convertisseur analogique/numérique A0. Les deux résistances sont connectées en permanence à la batterie. Il est facile de calculer le courant dissipé dans ce diviseur de tension :
$$ i = \dfrac{U}{R} = \dfrac{5}{1000000+1000000} = 2.5~µA $$
La FireBeetle est équipé d'une led RGB intégrée qui est constamment alimentée par la batterie ou par l'USB. La led RGB est une WS2812. Elle possède un circuit intégré de contrôle qui pilote les leds en fonction des commandes envoyées sur la broche DATA IN. Mais comme la led est toujours prête à recevoir une commande, c'est cette partie du circuit qui nécessite les 500 µA comme le confirme la documentation :
Sur le schéma, R11 est une résistance de 0Ω. Ce composant est en réalité le low power pad. Cela explique pourquoi la consommation peut être réduite de 500 μA lors de la déconnexion de l'alimentation de la led.
En conclusion, si vous avez une application qui nécessite un mode veille avec une forte contrainte sur la consommation ou l'autonomie, ce n'est pas forcement le meilleur choix de carte de développement. Si l'efficacité énergétique est essentiel pour votre projet, regardez plutôt la carte FireBeetle DFR078.