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-DevKitC V4 Comme nous allons le voir, le courant consommé n'est pas exactement celui escompté. 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");
// TIME_TO_SLEEP seconds delais
delay(TIME_TO_SLEEP*1000);
// Display a message before deep sleep
Serial.println("Go to deep sleep");
// 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() {}
Dans la console, on peut vérifier que le micro passe en mode deep sleep pendant 10 secondes.
Go to deep sleep
���1��!�)))����!�Wake up
Go to deep sleep
K�����s
�l�ESO�i��-}S���Wake up
Go to deep sleep
!�����J��1���1!���!�J�Wake up
Quand le micro se réveille de la veille, il envoit des caractères sur la liaison série. C'est parce qu'en sortie de mode deep sleep, le micro exécutre le bootloader. ces caractères sont envoyés par le bootloader qui tente de communiquer avec un éventuel logiciel de programmation type AVRDUDE.
Normal | Deep sleep | |
---|---|---|
Courant | 43mA | 3.8mA |
Puissance | 215mW | 19mW |
En mode normal, le courant est d'environ 43mA. En mode veille profonde, le courant est de 3,8mA. Comme vous pouvez le constater cette consommation est loin des 10µA spécifiés dans la documentation de l'ESP32:
Il y a trois raisons pour lesquelles la consommation de courant n'est pas aussi faible que prévue. La led de la carte est toujours allumée, car elle est directement connectée à l'alimentation électrique :
Le régulateur de tension est un régulateur linéaire DC-DC AMS1117-3.3. Même si la datasheet spécifie "High Efficiency Linear Regulators", l'efficacité d'un régulateur linéaire est au moins égale à Vout/Vin, dans notre cas le mieux que nous puissions peut espérer est de 66%.
De plus, le courant nécessaire pour alimenter le circuit interne du LDO est de l'ordre de quelques milliampères. Ce n'est probablement pas le meilleur choix pour les applications de veille profonde.
Le dernier point est l'interface USB, basée sur la puce CP2102N. La puce est alimentée par la sortie du le régulateur. Même si l'USB n'est pas connecté, l'interface est alimentée. Le courant est d'environ 1,3mA lorsqu'elle est maintenue en mode de reset. Cela augmente également la consommation électrique générale de la carte.
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.