Skip to content

Power Budget Calculator

The tinyCore ESP32-S3 draws wildly different current depending on what it is doing. A board transmitting over Wi-Fi non-stop can flatten a 1000 mAh pack in half a day; the same board asleep 99% of the time will outlast the battery’s own shelf life.

Work out your budget here before you commit to a pack size or an enclosure.


  1. Pick a profile to start from — a BLE beacon and a Wi-Fi uploader sit at opposite ends of the range. Every profile is just a set of starting numbers; edit any of them and the tool tracks your values instead.
  2. Set the active current — what the board pulls while it is awake. Open the tinyCore current reference and click a row to load a measured figure straight into the field.
  3. Set the sleep current — 10 µA is deep sleep done right. If yours is far above that, something is still powered.
  4. Set the timing — how long the board is awake each cycle, and how long the whole cycle lasts.
  5. Match the battery to the pack you actually have.

The estimate uses 80% of rated capacity, which keeps the cell above roughly 3.2 V and avoids the deep discharges that shorten its life. The Checks panel flags the mistakes that quietly ruin a budget — a duty cycle that will never last a day, an active window longer than the cycle itself, a sleep current that is not really sleep.


The diagram inside the tool is the tinyCore v2.1 power tree, and it is live: the rail carrying charge is the one that animates, the flow speed follows your active current, and the system rail reads back the average you have configured.

Two things on it are worth internalising.

GPIO 6 switches the peripheral regulator. The second LDO — the one feeding the PWR pad and the Qwiic connector — has its enable pin on GPIO 6. Driving it low cuts power to everything hanging off that rail, which is the single easiest win in a sleep-heavy design. Click the pad in the diagram to see the branch go dark.

pinMode(6, OUTPUT);
digitalWrite(6, HIGH); // peripherals on
// … take your readings …
digitalWrite(6, LOW); // peripherals off before you sleep
esp_deep_sleep_start();

Both 3.3 V pads are outputs. 3V3 and PWR sit downstream of the regulators and the reverse-voltage protection. Feeding voltage back into either one bypasses that protection and can take the regulator with it. Power the board through USB-C or the LiPo connector — never through a rail pad.


All values measured at 3.3 V, 25 °C, on battery. USB-powered figures run slightly higher because of the onboard USB bridge.

Operating modeBattery currentNotes
Deep sleep10 µARTC timer and RTC memory only
Light sleep2.1 mACPU paused, RAM retained, peripheral wake
CPU only / modem sleep~38.5 mAFull clock, radios off
Wi-Fi idle~46.5 mAAssociated, no traffic
Wi-Fi transmitting~73.5 mAActive data transfer
Wi-Fi scanning~108.5 mAContinuous scan for networks
BLE advertising~70.5 mABroadcasting advertisement packets
BLE connected and transmitting~73.5 mAActive BLE data transfer
IMU sampling~40.5 mAContinuous motion data at 50 ms intervals
All peripherals~78.5 mAWi-Fi, BLE, IMU and LEDs together

ProfileAverage currentLife on 1000 mAh
Deep sleep with periodic Wi-Fi~15 µA2–3 years
Light sleep IoT sensor~5 mA20–30 days
Active Wi-Fi data logger~50 mA4–6 days
Continuous BLE beacon~70 mA2–3 days

Figures include self-discharge and temperature derating. Real results vary.


  • Batch your transmissions. Wake, take ten readings, send them in one go, sleep. The connect-and-authenticate overhead usually costs more than the payload ever does.
  • Prefer deep sleep to light sleep whenever you do not need to retain state — it is roughly 200× cheaper.
  • Cut the peripheral rail with GPIO 6 before sleeping, so sensors on the Qwiic bus are not quietly drawing all night.
  • Shorten the active window rather than lowering the active current. Duty cycle is the dominant term in the average.
  • Drop the clock for low-demand work with setCpuFrequencyMhz(80) or setCpuFrequencyMhz(40).
  • Skip DHCP with a static IP — it often halves the time the radio is on.