ESP32 FireBeetle DFR0654 real current consumption in deep sleep mode

Direct link to the video.

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.

Picture of the ESP32 FireBeetle DFR0654 from DFRobot

Source code

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); 

Low Power Pad

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:

Location of the ESP32 Low Power Pad

If you cut the wire and the board switch to low power consumption (it disconnect the RGB led power):

Low power pad cutted on the ESP32 Firebeetle DFR0654

In the following, the current is measured in both mode : normal mode and low power mode.

Results

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:

Datasheet of the ESP32 | current in deep sleep mode

Explanations

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.

USB to serial converter

Schematic of the USB to serial converter on the FireBeetle DFR0654

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.

Battery charger

Schematic of the battery charger TP4056 on the FireBeetle DFR0654

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.

Voltage regulator

Schematic of the voltage regulator on the FireBeetle DFR0654

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.

Voltage measurement

Schematic of the voltage measurement on the FireBeetle DFR0654

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 $$

Built-in RGB led

Schematic of the built-in RGB led on the FireBeetle DFR0654

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:

Minimum current consumed by the WS2812 RGB led of the ESP32 DFR0654

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.

Conclusion

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.

Download

See also


Last update : 12/08/2022