Batteries have brought us into a cordless era, from electric vehicles with 75KWh batteries to handheld devices powered by 0.66Wh coin cells. Regardless of the use case (hand warmers aside), the customer wants the most efficient system, thus the longest battery life. To improve battery life, designers need to understand where power is being consumed so they can reduce it. One of the best ways to do that is to measure current over time with a power profiler.
What Is a Power Profiler?
A power profiler precisely measures the power a device consumes over a given period of time. Often, a graph is generated with the data so one can examine consistency and anomalies. Typically, the power profiler supplies power to the device, so all power flows through the profiler, enabling better measurement. In contrast, one would need to place a digital multimeter (DMM) in line with the device to measure current, and have the voltage measured with a separate instrument. An engineer would then use this data to observe how changes in hardware and software are affecting the device’s power consumption.
Devices Used
We typically use two main power profilers when working on low-power Embedded systems:
- Nordic Power Profiler Kit II. It is usually referred to as PPK2 (Power Profiler Kit 2) and is a USB device that plugs into a computer and uses Nordic’s software to view the power characteristics of the device in question.
- Qoitech Otii Ace Pro. The Otii does the same thing as the PPK2, though with a more comprehensive feature set. It offers a wider range of voltage and current, better read resolutions, and other features. It is worth noting that this tool is more expensive.
Lower Power Techniques
It is one thing to know a device’s power draw; it’s another to know how to lower its average draw. In the simplest terms, the best way to reduce power draw is to turn off as many things as possible. LEDs, Integrated Circuits (ICs), and the microcontroller (MCU) can all be powered on, off, or put to sleep via smart decisions made in hardware and software. Adding a Metal-Oxide-Semiconductor Field-Effect Transistor (MOSFET) or specialized power switches allows subsystems to be turned on and off as needed. Most MCUs support various sleep modes, which can reduce average power by orders of magnitude.
As an example, the ESP32, a popular MCU, provides a table in its datasheet that shows various sleep modes and their power consumption in those modes. Looking at these tables (see Figures 1 and 2 below), it’s seen that a maximum of 240 mA can be reduced to 5 µA by changing the power mode, a ~48,000-fold difference.


Examples
Out of simplicity, I will provide some data and examples using the Arduino Nano R4. This is Arduino’s smallest microcontroller development kit board and can be used for simple projects, including low-power applications. I’ll recreate the same setup in two different ways, both of which will result in a simple blinky program.
For hardware, a Nano R4 will be plugged into a breadboard along with an LED and a resistor. The LED will blink at 2Hz in both software setups, though the second will include power-saving logic. Figures 3 and 4 below show a large drop in power when the CPU is put to sleep with nothing happening. In normal operation, the MCU idles and consumes power doing nothing, whereas in the sleep code, it can sleep and consume much less power.
Figure 3 shows an average power draw of 24.3 mA in the 20s window, while the low-power version shown in Figure 4 has an average draw of 13.4 mA, nearly half the current used. These numbers can mean very little without some context. If the system were powered by a single CR2032 3V coin cell battery with a capacity of 225 mAh, the runtime would range from 225 mAh / 24.3 mA = 9.25 h to 16.8 h.
This is roughly double the runtime under ideal situations. The true benefits of low power come from using a device with ultra-low-power saving modes, as seen in Figure 1 for the ESP32. If the same rough calculations are done with the modem off vs hibernation, we see a runtime range of 225mAh/25mA = 9hours to 225mAh/5uA =45000h = 1875days = 5.13years.
This is a perfect-world situation and is highly unlikely to happen, especially as it assumes the device would be asleep for the entire time, doing nothing productive. Though systems can be optimized to last for months or years, depending on their use case and the amount of power-saving logic applied.


Code
Below are the two sketches used for the measurements above:
- A baseline 2 Hz blinky
- A low-power version that uses __WFI() to sleep between timer ticks
//Baseline 2Hz Blinky
const int LED_PIN = 3; // Built-in LED on Arduino Nano
const unsigned long TOGGLE_MS = 250;
unsigned long lastToggle = 0;
bool ledState = false;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
unsigned long now = millis();
if (now - lastToggle >= TOGGLE_MS) {
lastToggle = now;
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
}// Low Power 2Hz Blinky
#include <Arduino.h>
const uint8_t LED_PIN = 3;
volatile bool tick = false;
extern "C" void SysTick_Handler(void)
{
tick = true;
}
void setup()
{
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Configure SysTick for 250 ms ticks
SysTick_Config(SystemCoreClock / 4); // 1/4 second = 250 ms
}
void loop()
{
// Wait in low-power idle until interrupt fires
while (!tick) {
__WFI(); // Wait For Interrupt (CPU sleeps until an interrupt occurs)
}
tick = false;
// Toggle LED each tick
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}Conclusion
Power profiling turns battery life from a guessing game into a measurable target for engineers. By capturing current over time, you can quickly spot spikes, reduce idle waste, and validate that firmware and hardware changes actually improve energy use. Even small changes, like sleeping between periodic tasks, can meaningfully reduce average current, and deeper optimizations can extend runtime further.
Need help measuring and optimizing battery life or ready to take your embedded project to the next level? Contact us today to learn more about our solutions and how we can help you achieve your goals.







