Hi all,
I'm trying to find an ESP32 DevMod that is optimized for long battery life. My code will spend most of the time in deep sleep, so I try to find a module that doesn't need much current during deep sleep.
Many modules have an on board AMS1117 3.3 V regulator which is very bad. I recently received a board with an ME6211 regulator which is much better. I've cut away the (always on) power LED, but the on board CP2104 still consumes about 4 mA while the ESP is in deep sleep.
Any recommendations/experience?
Use the 3V3 pin directly from your 3V3 power source.
You dont need the onboard ams1117.
Can't say that I've seen one optimized for low power, but many of the ESP32 boards come with battery connectors built in: I know the Adafruit Feather32 is one (it also has charging circuitry and you can disable the voltage regulator) and some of the Heltec boards as well. I'd imagine that they work pretty well in that application.
Thanks maikarg,
that's what I'm doing on one board using an external LF33CV. Much better than the AMS1117, but it still consumes abount 10 mA in deep sleep.
Recently I got another board with an on board ME6211 which is a perfect voltage regulator (low drop voltage, very low quiscencse current), but the bord consumed 5.56 mA in ddep sleep, now 4.1 after cutting away the power LED. The culprit is most likely the USB-UART chip (CP2104).
Thanks cedarlakeinstruments,
will have a loog at thos boards.
As you stated, the dev kit comes with many things that might consume power even in sleep mode.
I never measured this, but this boards have the bare minimum to work (check aliexpress link).
Also, how do you measure the 4mA? What is your setup? Dont rely on usb tester, they cant measure very low currents (below 10-20 mA).
What will be waking the ESP32 from deep sleep?
10mA is a huge amount of current in deep sleep!
I've used a DFRobot FireBeetle 2 ESP32-E with a 500mAh lipo for temperature data logging, writing to a micro SD card twice a day. It lasts at least 8 months, used in conjunction with a DS3231 RTC module. The onboard RTC was not accurate enough for me, being several hours adrift after 6 months potentially.
Check the Website data, there is a track to cut on the pcb which feeds the led, specifically to reduce current <10uA in deep sleep.
The device is a few years old now, not the smallest footprint and maybe it has been superceded. It has an onboard lipo charger and also supports Bluetooth Classic. (But you won't be using that if you're after long battery life :)
I'm using a multimeter in series with the controller VCC. It can measure down to µA.
Deep sleep timer will wake up the module
Thanks JohnSan, will have a look into the technical details.
I have an ESP32S3 camera development board on a PCB with a LoRa module, its being used to transfer images over LoRa.
Deep sleep current with the LoRa module, camera and SD card is 2.1mA.
esp32 FireBeetle DFR0478 also has a low deep sleep current:
https://lucidar.me/en/esp32/power-consumption-of-esp32-firebeetle-dfr0478/
If the multimeter is on the uA range then you can have problems due to the burden voltage of the multimeter can cause issues. Best to have the multimeter on a mA range.
From what I’ve read, it’s actually pretty common and there are a few solid explanations behind it. This Wikipedia page gives a good basic overview if you want to dig a bit deeper. Definitely worth a quick look.
Ok. I was hoping you were using an external RTC because then you could use the RTC to switch all power going to the ESP and other stuff. Then you would draw zero current between powerups.
The lowest I know of that is tested and supported is 14uA for deep sleep.
It can be 0 if you use an external RTC to power on your chosen board as @ShermanP already said.
Sorry for the long post. But here's a bit of experience.
The ESP32 has a 'built in' RTC, but it will drift by 1 or 2 hours per month. If that's acceptable, then ok.
If you would like it down to a few minutes in 6 months say, use a DS3231 or similar RTC module. The CR2032 battery on a DS3231 module has a nominal 10year battery life.
The ESP32 RTC also has 8kB of static memory. I was originally going to use this for storing the logged data, but realised, if the esp got reset for any reason (connecting to a PC, or accidentally pressing the button on the board) the data would be gone. Not what you want after weeks of collecting data. So I used that memory for 12 hour storage, then wrote it to an SD card twice a day. Most I would lose was 12 hours worth, in maybe 6 months, if it did go wrong.
There is also more than one way of using the RTC module. It can be through a hardware connection to an I/O pin causing a wake up interupt.
But I understand that enables a hardware section of the ESP32 so increases deepsleep power consumption.
I went for a minimum consumption method.
Still use the ESP32 RTC to wake it up. (No hardware enabled). Then read 'the actual time' from the RTC module. Modify the sleep timer value, to correct it for the next wake time. Doing some testing on that showed, it only ever adjusted the first wake time value and that was the value needed for ever after that....
Complete your sensor readings, store in the RTC SRAM, then deep sleep for the new period.
In my case, every 12 hours, save to SD card. The SD card was switched on/off using a P-channel mosfet, to save power during deep sleep.
I also added a low battery detection. If the battery volts reads below 3.2V for a few consecutive wake ups. Deep sleep forever.
Just to save the battery if things don't go to plan.
A 500mAh Lipo gave well over 6 months on this schedule. Remaining battery volts suggested at least 4 months more available. (Not tested).
Hi ShermanP,
cutting power completely is not an option because I want to keep some information in the ESP32 RTC memory. But nice idea, I'll pick that up for the next project.
Hi JohnSan,
which ESP32 module are you using? Until now, I did not find one that consumes less than 4 mA even during deep sleep.