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.
How to use it
Section titled “How to use it”- 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.
- 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.
- Set the sleep current — 10 µA is deep sleep done right. If yours is far above that, something is still powered.
- Set the timing — how long the board is awake each cycle, and how long the whole cycle lasts.
- 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 power tree
Section titled “The power tree”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 sleepesp_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.
tinyCore v2.1 current reference
Section titled “tinyCore v2.1 current reference”All values measured at 3.3 V, 25 °C, on battery. USB-powered figures run slightly higher because of the onboard USB bridge.
| Operating mode | Battery current | Notes |
|---|---|---|
| Deep sleep | 10 µA | RTC timer and RTC memory only |
| Light sleep | 2.1 mA | CPU paused, RAM retained, peripheral wake |
| CPU only / modem sleep | ~38.5 mA | Full clock, radios off |
| Wi-Fi idle | ~46.5 mA | Associated, no traffic |
| Wi-Fi transmitting | ~73.5 mA | Active data transfer |
| Wi-Fi scanning | ~108.5 mA | Continuous scan for networks |
| BLE advertising | ~70.5 mA | Broadcasting advertisement packets |
| BLE connected and transmitting | ~73.5 mA | Active BLE data transfer |
| IMU sampling | ~40.5 mA | Continuous motion data at 50 ms intervals |
| All peripherals | ~78.5 mA | Wi-Fi, BLE, IMU and LEDs together |
Typical profiles
Section titled “Typical profiles”| Profile | Average current | Life on 1000 mAh |
|---|---|---|
| Deep sleep with periodic Wi-Fi | ~15 µA | 2–3 years |
| Light sleep IoT sensor | ~5 mA | 20–30 days |
| Active Wi-Fi data logger | ~50 mA | 4–6 days |
| Continuous BLE beacon | ~70 mA | 2–3 days |
Figures include self-discharge and temperature derating. Real results vary.
Getting more out of a charge
Section titled “Getting more out of a charge”- 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)orsetCpuFrequencyMhz(40). - Skip DHCP with a static IP — it often halves the time the radio is on.