According to the datasheet of the ESP32, the power consumption in deep sleep mode (RTC) is around 10µA. This page explains how we measure the real current consumption of the ESP32 FireBeetle DFR0478 in deep sleep mode. A comparison of the measurements of different ESP32 cards can be found on this page.
These measurements has been done with the following versions:
We used a Matrehit Energy multimeter that can measure direct curent from 10nA.
The source code used for switching from deep sleep mode to normal mode is presented below. The ESP32 remains in normal operation for 10 seconds, then switches to deep sleep mode for 10 seconds before starting again.
// 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() {}
Note that the FireBeetle has a built-in led. We use the led to check is the ESP32 is in deep-sleep mode or not. The led is turned on at the beginning of the setup and turned off before switching to deep sleep mode. We have to call this line to hold the state of the GPIO (the led remains off during deep sleep):
gpio_hold_en(GPIO_NUM_2);
Wake up | Deep sleep | |
---|---|---|
Current | 42mA | 10µA |
Power | 218mW | 0.052mW |
In normal mode, the current is about 42mA. In deep sleep mode the current is 10µA. As you can see, this consumption is very close from the 10µA specified in the documentation of the ESP32:
There are several reasons why the current consumption is so low. The design has been optimized around ultra low power consuption. First of all, there is no power led. There is a built-in led but this led can be turned off while switching to deep sleep mode has we did previously.
The CH340C is a USB to UART converter. It is powered by pin 16 (VCC), this pin is connected to V3. V3 is the output of the voltage regulator U3. But, U3 is powered by USBVCC which comes from the USB connector USB1. It means that the USB driver is not powered if USB is not connected. In other words, power consumption of the CH340C is zero when the USB is unplugged.
That the same for the TP4056 (Li-Ion battery charger). The charger is powered by USBVCC itself provided by the USB connector. The power consumption of U4 is null when the USB is not powered.
The next point is the regulator U5. The voltage regulator is an RT9080-33GJ5. According to the documentation this low-dropout (LDO) voltage regulators needs only 2μA ground current at no load. It is clear that this regulator has an excellent efficiency.
But, there is still a part of the schematic that can be analysed:
This voltage divider is used to measure the battery voltage. The output is connected to the ADC A0. The two resistors are permanently connected to the battery. It's easy to calculate the dissipated current in this voltage divisor:
$$ i = \dfrac{U}{R} = \dfrac{5}{1000000+1000000} = 2.5~µA $$
Note that the shunt resistors R10 and R11 are not soldered in factory. If you need to measure the battery voltage on A0, you'll have to solder theses resistors by you own.
Let's check if our analysis is right and in line with the current measured. Here is the theoretical currents of each part of the FireBeetle are:
The theoretical power consumption of the FireBeetle is 0.033 + 0.01 + 0.01 = 0.055mW.
The measured power is 0.052mW. This makes the FireBeetle DFR0478 the best ESP32 board I have ever tested in terms of power consumption.