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 DFR0654 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);
Quoting the documentation:
Low Power Pad: This pad is specially designed for low power consumption. It is connected by default. You can cut off the thin wire in the middle with a knife to disconnect it. After disconnection, the static power consumption can be reduced by 500 μA. The power consumption can be reduced to 13 μA after controlling the maincontroller enter the sleep mode through the program. Note: when the pad is disconnected, you can only drive RGB LED light via the USB Power supply.
This FireBeetle has a low power pad:
If you cut the wire and the board switch to low power consumption (it disconnect the RGB led power):
In the following, the current is measured in both mode : normal mode and low power mode.
Normal | Deep sleep | Deep sleep [Low Power] | |
---|---|---|---|
Courant | 40 mA | 520 µA | 11.6 µA |
Puissance | 212 mW | 2.7 mW | 58 µW |
In normal mode, the current is about 40mA. In deep sleep mode the current is 520µA. As you can see, this consumption is far from the 10µA specified in the documentation of the ESP32:
Let's analyse the schematics to understand where the 520 µA consumption come from.
There is a built-in led but this led can be turned off while switching to deep sleep mode has we did previously.
The CH340K is a USB to UART converter. It is powered by pin VCC, this pin is connected to VUSB which comes from the USB connector U1. It means that the USB driver is not powered if USB is not connected. In other words, power consumption of the CH340K is zero when the USB is unplugged.
That the same for the TP4056 (Li-Ion battery charger). The charger is powered by VUSB provided by the USB connector. The power consumption of U3 is null when the USB is not powered.
The next point is the regulator U2. 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. The regulator is not the source of the 500µA consumpution.
This voltage divider is used to measure the battery voltage. The output is connected to the ADC A2. 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 $$
This FireBeetle is equiped with a built-in RGB led that is constantly powered by the battery or by the USB. The RGB led is a WS2812. It has a control integrated circuit that drive the leds with commands sent on the DATA IN pin. Since the led is always ready to receive a command, it is this part of the circuit that require the permanent 500 µA as confirmed by the documentation:
On the schematics, R11 is a 0Ω resistor. This is the low power pad. This explains why the consumption can be reduced by 500 μA when disconnecting the led power.
In conclusion, if you are working on an application that requires a sleep mode with a strong constraint on power consumption or autonomy, it is not necessarily the best choice of development board. If power consumption is a key point of your project, check the FireBeetle DFR078.