Low power strategies without resorting to sleep modes
Posted: Fri Feb 15, 2019 5:31 pm
Hi. In my project I need to keep the ESP32 pretty much awake all the time because I'm processing input from several sources, especially UART (from GPS and GSM modules). That means I cannot use even the light-sleep mode or I risk corrupting the data coming from those devices.
I come from other kinds of MCUs, the likes of LPCs, PICs and AVRs, and they usually have an "idle" mode where the CPU can be "not working" whilst all other peripherals retain the full functionality, reducing power consumption to 10% or less of the full working power. With FreeRTOS I usually insert a couple of instructions at vApplicationIdleHook() to enter this mode and then the core consumes much less current than just idling in a while() loop.
With ESP32-WROVER, having not one but two processors that use up energy, I'd like to know whether there are techniques or procedures I can look into to reduce current consumption. I plan to use esp-idf for framework. The ones I can think from the top of my head are:
Guillermo
I come from other kinds of MCUs, the likes of LPCs, PICs and AVRs, and they usually have an "idle" mode where the CPU can be "not working" whilst all other peripherals retain the full functionality, reducing power consumption to 10% or less of the full working power. With FreeRTOS I usually insert a couple of instructions at vApplicationIdleHook() to enter this mode and then the core consumes much less current than just idling in a while() loop.
With ESP32-WROVER, having not one but two processors that use up energy, I'd like to know whether there are techniques or procedures I can look into to reduce current consumption. I plan to use esp-idf for framework. The ones I can think from the top of my head are:
- Turn off any peripherals that are not in use.
- Use modem-sleep (in fact, 99% of the time I don't need either WiFi or Bluetooth).
- Turn off any unnecessary pull-ups or pull-downs to avoid leakage.
- First of all, I'd like to know for sure if there's no ESP32 equivalent to the aforementioned Idle mode of other architectures.
- Will the ESP32 consume as much energy whether all FreeRTOS tasks are blocked (except prvIdleTask) compared to having tasks in stupid loops like for(;;){}?
- Is there any way to turn off one of the cores when there's no need for it? (e.g. PRO_CPU)
- Are there other techniques available for lowering CPU consumption I'm not aware off?
Guillermo