MicroWatt Academy

Master ESP32 deep sleep power budgeting with interactive R Shiny dashboards. Live coaching, hands-on labs, and real-world power optimization...
General Trias, PH
Created byProfile picturewackydraw48
2 joined
Profile picture
@wackydraw48Profile pictureJun 11
Pinned post

Welcome to MicroWatt Academy ⚡


Welcome aboard — you've just taken the first step toward building ESP32 products that run for years on a single battery.


What You Get


📚 10 structured lessons across 4 modules — from ESP32 power architecture fundamentals through building and deploying a complete R Shiny power budget dashboard.


💬 Coaching Chat — direct access to ask questions, share your measurement data, and get feedback on your power budgets.


📋 Updates & Resources — firmware tips, R code snippets, new measurement techniques, and course updates.


Recommended Path


  1. Start Module 1 — even if you've used ESP32 before, the power domain architecture lesson fills gaps most engineers have.

  2. Set up your R environment early — Lesson 1.2 walks you through it. Having Shiny running before Module 2 keeps you moving fast.

  3. Get real hardware measurements — a USB current meter or INA219 breakout is enough to start. The course covers what to buy.

  4. Post in chat — share your current waveform screenshots. Reviewing real data is where the biggest learning happens.


Quick Wins


  • ESP32-S3 pulls ~7 µA in deep sleep with proper GPIO config. If you're seeing >20 µA, Module 3 will fix that.

  • The R Shiny dashboard you'll build can estimate battery life from a 30-second current capture. Module 2 gets you there.


Let's build something that ships.

Profile picture
@wackydraw48Profile pictureJun 11

The 5 GPIO Mistakes That Double Your ESP32 Deep Sleep Current


Most ESP32 projects burn 10-50x more current in deep sleep than necessary. Almost always, it's GPIO configuration — not the sleep mode itself.


Here are the five mistakes I see repeatedly in power audits:


1. Floating input pins


Any GPIO left as an input with no pull-up/pull-down will oscillate between states and waste current. Before entering deep sleep:


// Isolate all unused GPIOs
esp_sleep_config_gpio_isolate();
// Or individually:
gpio_set_direction(GPIO_NUM_XX, GPIO_MODE_DISABLE);
rtc_gpio_isolate(GPIO_NUM_XX);


2. Forgetting to disable the internal pull-ups


Internal pull-ups draw ~45 µA each. If you enabled them during active mode, they stay on through deep sleep unless you explicitly disable them:


rtc_gpio_pullup_dis(GPIO_NUM_XX);
rtc_gpio_pulldown_dis(GPIO_NUM_XX);


Three forgotten pull-ups = 135 µA — that's 20x the ESP32-S3's base deep sleep current.


3. Leaving peripherals powered via GPIO


If you're using a GPIO to enable a sensor or module (common pattern), make sure it goes LOW before sleep. Sounds obvious, but when esp_deep_sleep_start() is buried in your state machine, it's easy to miss.


4. Not using RTC GPIOs for wake sources


Only RTC-capable GPIOs (GPIO 0-21 on ESP32) can be used as ext0/ext1 wake sources. Using a non-RTC GPIO for a wake button means you can't use ext0_wakeup and might keep unnecessary domains powered.


5. Driving current into unpowered peripherals


If a peripheral loses power during deep sleep but an ESP32 GPIO is still configured as output HIGH, current flows through the peripheral's ESD protection diodes. This can draw mA-level current.


---


Quick test: Measure your deep sleep current, then disconnect every external component. If the current drops significantly, work through this list pin by pin.


The target: ESP32 ~10 µA, ESP32-S2 ~20 µA, ESP32-S3 ~7 µA in deep sleep with no wake sources configured.


I teach engineers how to build R Shiny dashboards that calculate all of this automatically — turning current waveforms into battery life predictions. Check out the course if you're shipping battery-powered products.