← Back to Blog

Ultra-Low-Power IoT Achieving <1µA Sleep Current

A practical guide to designing battery-powered IoT devices with years of battery life. Covers MCU selection, sensor power optimisation, duty cycling, and real-world examples with STM32, LoRa, and BLE.

15 min read Roman Swetly

Ultra-Low-Power IoT: Achieving <1µA Sleep Current

A practical guide to designing battery-powered IoT devices that run for years on a single coin cell.


Introduction

Power consumption is arguably the most critical factor in IoT device design. A device that drains its battery in weeks is a maintenance nightmare; one that runs for years is a viable commercial product. Achieving ultra-low power consumption requires understanding the entire system—not just the microcontroller, but every component, sensor, and radio.

This article explores the principles, techniques, and real-world examples of designing ultra-low-power IoT devices. Whether you’re building a soil moisture sensor for agriculture, a temperature logger for cold chain monitoring, or a wearables health tracker, the strategies outlined here will help you maximize battery life.


1. The Consumption Challenge

1.1 Why Power Matters

Battery-powered IoT devices are ubiquitous in real-world deployments. Whether deployed in remote agricultural fields, smart buildings, or industrial facilities, these devices must operate for months or years without battery changes. The cost of battery replacement often exceeds the cost of the device itself—making long battery life a critical business requirement.

1.2 Key Insight: It’s Not Just the MCU

A common mistake is focusing solely on the microcontroller’s power consumption. While important, the MCU is often not the largest power consumer. Consider:

  • Sensors may draw significant current during measurement
  • Radios can consume 10-100x more than the MCU during transmission
  • Voltage regulators can waste power as heat
  • Idle peripherals may continue consuming power if not properly managed

Example: A sensor that draws 5mA during a 100ms measurement once per minute is acceptable. But the same sensor drawing 1mA continuously will drain a 2000mAh battery in 83 days—regardless of the MCU’s sleep current.

1.3 The Power Budget Equation

The total energy consumed by a device can be calculated as:

Total Energy = (Idle Current × Idle Time) + (Active Current × Active Time)

For ultra-low-power operation, the goal is to maximize idle time and minimize both idle and active currents. This is achieved through:

  1. Deep sleep modes with minimal current draw
  2. Duty cycling—waking up only when needed
  3. Optimising active time—doing work as quickly as possible
  4. Powering off peripherals when not in use

2. Components of Power Consumption

2.1 Microcontroller Power

ControllerActive CurrentSleep CurrentWake-up TimeBest Use Case
STM32L0~5 mA @ 32 MHz<2 µA~5 µsBattery sensors, 2+ years on coin cell
STM32L4~8 mA @ 80 MHz<1 µA~3 µsBattery sensors + moderate processing
STM32U5~6 mA @ 160 MHz<0.9 µA~2 µsBest-in-class low power + performance
ESP32~100-150 mA @ 240 MHz10-150 µA~1-3 msLow-power Wi-Fi (deep sleep)
ESP8266~70 mA @ 80 MHz10-20 µA~1-2 msSimple Wi-Fi sensors
RP2040~20 mA @ 133 MHz~100-200 µA~1 msCost-sensitive, moderate power
nRF52840~6-10 mA @ 64 MHz<2 µA~3 µsBLE applications, wearables

Key takeaway: For battery-powered applications, STM32L0/L4/U5 and nRF52 series are the top choices. ESP32 can be acceptable with aggressive deep sleep (e.g., waking every 15 minutes).

2.2 Sensor Power

Sensors vary widely in power consumption. Critical factors:

  • Measurement current—current drawn during a reading
  • Measurement time—how long the sensor needs to stabilise
  • Idle/standby current—current when not measuring
  • Power-up time—time to become ready after power-on
Sensor TypeMeasurement CurrentIdle CurrentMeasurement Time
DHT22 (humidity/temp)1-2.5 mA0.1-1 µA1-2 seconds
BME280 (temp/humidity/pressure)0.3-3.6 µA<0.1 µA<10 ms
SHT30 (humidity/temp)0.5-1.5 µA<0.2 µA<10 ms
MPU6050 (accelerometer)3.9 mA10 µA~100 µs
ADXL345 (accelerometer)23-140 µA0.1 µA~100 µs
Max30102 (heart rate/SpO2)5-10 mA<1 µA10-30 ms
TMP102 (temperature)10 µA0.5 µA<100 ms

Key takeaway: Choose sensors with low idle current and fast measurement times. Modern digital sensors (I²C/SPI) are generally better than analog sensors requiring external ADCs.

2.3 Radio Power

Radios are often the largest power consumer in IoT devices. Transmission current can be 10-100x higher than MCU active current.

Radio/ProtocolTX CurrentRX CurrentSleep CurrentTypical Duty Cycle
LoRa (SX1276)100-120 mA @ 14dBm10 mA2 µA<0.1% (1 sec every 15 min)
LoRa (SX1276)50-60 mA @ 7dBm10 mA2 µA<0.1%
BLE (nRF52840)5-15 mA4-10 mA2 µA1-5% (depending on advertising)
Zigbee (CC2530)30-40 mA20 mA0.5 µA<1%
Wi-Fi (ESP32)100-200 mA80-150 mA10-150 µA0.1-1% (short bursts)
NB-IoT (module)200-300 mA50-100 mA5-10 µA0.01-0.1%

Key takeaway: LoRa, BLE, and Zigbee are orders of magnitude more power-efficient than Wi-Fi for infrequent, small data payloads.


3. The Sensor Problem

3.1 Not All Sensors Support Low Power

This is a critical and often overlooked issue. Many sensors, especially older analog sensors, draw continuous current regardless of whether they are being read. This makes them unsuitable for battery-powered applications.

High-power sensor types to avoid:

  • Legacy analog sensors (e.g., LM35 temperature sensor) drawing 50-100 µA continuously
  • Some gas sensors (e.g., MQ-2) requiring preheating at 100-200 mA
  • Sensors without standby or power-down modes

Low-power alternatives:

  • Digital sensors with integrated ADC and shutdown modes (e.g., BME280, SHT30)
  • Sensors with configurable sampling rates (e.g., ADXL345 with wake-up mode)
  • Sensors that can be completely powered down via a MOSFET

3.2 Powering Down Sensors

A common technique for sensors without low-power modes is to power them through a MOSFET controlled by the MCU. This allows you to completely cut power to the sensor when not in use.

// Example: Powering down a sensor via MOSFET
void read_sensor(void) {
    // Enable power to sensor
    gpio_set_level(POWER_ENABLE_PIN, 1);
    delay_ms(10); // Wait for sensor to stabilise
    
    // Read sensor
    uint16_t value = i2c_read_sensor();
    
    // Power down sensor
    gpio_set_level(POWER_ENABLE_PIN, 0);
}

Advantages:

  • Sensor draws zero current when not measuring
  • Works with any sensor, regardless of built-in low-power features

Disadvantages:

  • Requires an extra MOSFET and GPIO pin
  • Adds wake-up time (usually negligible)

3.3 Sensor Selection Guidelines

When selecting sensors for battery-powered devices:

  1. Check idle current—should be <1 µA ideally
  2. Check measurement time—shorter is better (<100 ms)
  3. **Look for “low power” or “ultra-low power” in the datasheet
  4. Verify power-down modes—some sensors have no shutdown capability
  5. Consider self-discharge—some sensors (e.g., gas sensors) have inherent power consumption

4. Real-World Example: STM32 Ultra-Low Power

4.1 STM32L0/L4/U5 Series Overview

The STM32L series is the gold standard for ultra-low-power microcontrollers. Key features include:

  • Multiple sleep modes—from Stop to Standby (<2 µA)
  • Wake-up from standby via GPIO, RTC, or external events
  • Ultra-low-power analog peripherals—LPUART, LPTIM, LPDAC
  • Dynamic voltage scaling—adjust core voltage for performance
  • Battery backup domain—retains critical data during deep sleep

4.2 Power Modes Comparison

ModeCurrentWake-up SourceWake-up TimeUse Case
Run100 µA/MHzN/AN/AActive processing
Sleep50-80 µA/MHzAny interrupt2-3 cyclesLight sleep with fast wake-up
Low-power Run25 µA/MHzN/AN/AContinuous low-power processing
Low-power Sleep10-20 µAAny interrupt2-3 cyclesLow-power waiting
Stop 0~100 µAAll peripherals~2 µsFast wake-up, peripherals active
Stop 1~1-2 µALimited peripherals~3 µsModerate wake-up, peripherals limited
Standby<2 µAReset, RTC, wake-up pins~5 µsDeep sleep, minimal power
Shutdown<0.5 µAReset, wake-up pins~50 msDeepest sleep, no RAM retention

4.3 Practical STM32 Power Optimisation

Code example: Entering Standby mode with RTC wake-up

// STM32L0/L4 Ultra-low-power setup
void enter_standby(void) {
    // Disable unused peripherals
    __HAL_RCC_CRC_CLK_DISABLE();
    __HAL_RCC_I2C1_CLK_DISABLE();
    __HAL_RCC_USART2_CLK_DISABLE();
    
    // Configure RTC for wake-up in 15 minutes
    RTC_TimeTypeDef sTime = {0};
    RTC_DateTypeDef sDate = {0};
    RTC_AlarmTypeDef sAlarm = {0};
    sAlarm.AlarmTime.Hours = 0;
    sAlarm.AlarmTime.Minutes = 15;
    sAlarm.AlarmTime.SubSeconds = 0;
    sAlarm.AlarmMask = RTC_ALARMMASK_HOURS;
    HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN);
    
    // Enter Standby mode
    HAL_PWR_EnterSTANDBYMode();
}

4.4 Application Example: Battery-Powered Sensor

A soil moisture sensor using STM32L0 + LoRa module:

  • MCU: STM32L053R8
  • Sensor: Capacitive soil moisture sensor (ADS1115 + probe)
  • Radio: SX1276 LoRa module
  • Power: 2x AA batteries (2,000 mAh each)

Operation cycle (every 15 minutes):

  1. MCU wakes from Standby (0.5 µA) due to RTC alarm
  2. MCU powers sensor via MOSFET (10 ms)
  3. MCU reads sensor (100 ms @ 5 mA)
  4. MCU processes data (1 ms @ 100 µA/MHz)
  5. MCU powers LoRa module (1 second @ 120 mA)
  6. MCU transmits data (1 packet, ~50 bytes)
  7. MCU enters Standby mode

Power consumption calculation:

  • Standby: 0.5 µA × 898.8 seconds = 0.45 mAh per cycle
  • Active: 100 µA × 0.02 seconds = 0.0006 mAh per cycle
  • Sensor: 5 mA × 0.1 seconds = 0.14 mAh per cycle
  • Radio: 120 mA × 1 second = 33 mAh per cycle
  • Total per cycle: ~33.6 mAh
  • Battery life: 4,000 mAh / (33.6 mAh × 96 cycles/day) ≈ 1.2 years

Optimisation for 2+ years:

  • Reduce transmission frequency (every 30 minutes)
  • Optimise LoRa transmit power (use 10 dBm instead of 14 dBm)
  • Use duty cycling for sensor (measure less frequently)
  • Choose a sensor with lower active current

5. Strategies for Ultra-Low Power

5.1 Duty Cycling

Duty cycling is the most important technique for ultra-low-power operation. The device spends most of its time in deep sleep, waking only to perform a task and immediately returning to sleep.

Key parameters:

  • Sleep duration—longer sleep means lower average power
  • Wake-up time—how long it takes to become active
  • Active time—how long tasks take to complete

Formula:

Average Power = (Sleep Current × Sleep Time + Active Current × Active Time) / Total Time

Example:

  • Sleep current: 1 µA
  • Active current: 10 mA
  • Sleep time: 14 minutes 59 seconds
  • Active time: 1 second
  • Average power = (1 µA × 899s + 10mA × 1s) / 900s ≈ 12 µA

5.2 Sleep Mode Selection

Choose the lowest power sleep mode that meets your wake-up requirements:

RequirementRecommended Mode
Need very fast wake-up (<10 µs)Stop mode
Need RTC wake-upStandby mode
Need preserve SRAM dataStop or Standby with RAM retention
Need preserve GPIO statesStandby or Stop
Need external interrupt wake-upStop or Standby
Need ADC/DAC after wake-upStop mode (peripherals retain)

5.3 Peripheral Power Management

Key principle: Power off anything you don’t need.

  • Clock gating—disable clocks to unused peripherals
  • Power domain control—some MCUs have separate power domains
  • GPIO configuration—set unused pins to analog input to minimise leakage
  • Voltage regulator—use low-power regulator modes

Example: STM32 peripheral disable:

// Disable unused clocks
__HAL_RCC_CRC_CLK_DISABLE();
__HAL_RCC_DMA1_CLK_DISABLE();
__HAL_RCC_USART1_CLK_DISABLE();

// Set unused GPIOs to analog input
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_All;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

5.4 Radio Optimisation

Radios are power-hungry. Optimise their usage:

  • Reduce transmission power—use the minimum required
  • Reduce packet length—send only essential data
  • Aggregate data—send multiple readings in one packet
  • Use acknowledgements sparingly—they add extra transmissions
  • Consider using lower-layer protocols—raw LoRa without LoRaWAN for reduced overhead

6. Real-World Application Examples

6.1 Soil Moisture Sensor (Agriculture)

  • MCU: STM32L052R8
  • Sensor: Capacitive soil moisture (ADS1115)
  • Radio: LoRaWAN (SX1276)
  • Power: 2x AA batteries
  • Cycle: Wake every 15 minutes, measure, transmit
  • Battery life: 2+ years
  • Key optimisations: Deep sleep, short radio burst, low sensor current

6.2 Temperature Logger (Cold Chain)

  • MCU: STM32L432KC
  • Sensor: TMP102 or DS18B20
  • Radio: Bluetooth LE (nRF52840) or LoRa
  • Power: CR2032 coin cell (220 mAh)
  • Cycle: Wake every 5 minutes, measure, store (transmit hourly)
  • Battery life: 1+ year on BLE, longer on LoRa
  • Key optimisations: Aggressive duty cycling, store-and-forward

6.3 Smart Water Meter

  • MCU: STM32L0/L4
  • Sensor: Hall effect flow sensor (external trigger)
  • Radio: NB-IoT (SIM800/Quectel)
  • Power: 1x AA battery (3,000 mAh) or Li-SOCl2 (3,000 mAh)
  • Cycle: Wake on flow event, count, transmit daily
  • Battery life: 5+ years
  • Key optimisations: Event-driven wake-up, infrequent transmission

6.4 Wearable Health Monitor

  • MCU: nRF52840 or STM32L4
  • Sensor: Max30102 (heart rate/SpO2) + ADXL345 (activity)
  • Radio: BLE (built-in on nRF52840)
  • Power: 200 mAh LiPo battery
  • Cycle: Wake every 1 second (accelerometer), measure HR every 10 minutes
  • Battery life: 2-4 weeks
  • Key optimisations: Accelerometer uses activity wake-up, HR only when active

7. N3xar’s Approach to Low Power

The N3xar platform is designed to support a wide range of power profiles, from AC-powered industrial devices to ultra-low-power battery sensors.

Supported Device Types:

  • AC-powered devices: Gateways, servers, industrial controllers
  • Powered nodes: Sensors and actuators with stable power
  • Low-power autonomous nodes: Battery-powered sensors with <1 µA sleep current

Key Products:

  • Ethernet, wired, Wi-Fi & LoRa devices — flexible connectivity options
  • I²C, motion, water, and contact sensors — diverse sensing capabilities
  • Electromechanical actuators & valves — controlled actuation
  • Stepper/servo motor control boards — precision motion control

Power Management Features:

  • Dynamic sampling rates based on power availability
  • Adaptive transmission intervals to conserve battery
  • Sleep-mode device profiles (<1 µA)
  • Real-time power monitoring and alerts

“Our system supports both wired and wireless communication and uses two node types: low-power autonomous nodes for long-term sensor use, and powered nodes for sensors and actuators.”


8. Design Checklist for Ultra-Low-Power IoT

Use this checklist to ensure your design is optimised for low power:

MCU Selection

  • Choose MCU with deep sleep current <2 µA
  • Verify wake-up time is acceptable for your application
  • Check for low-power peripherals (LPUART, LPTIM)

Sensor Selection

  • Check idle current (should be <1 µA if possible)
  • Verify sensor has power-down mode
  • Consider MOSFET to completely power down sensor
  • Check measurement time (shorter is better)

Radio Selection

  • Choose protocol appropriate for your data rate and range
  • Consider transmission power (use minimum required)
  • Verify sleep current of radio module
  • Check if radio can be powered down completely

Power Supply

  • Choose regulator with low quiescent current
  • Consider bypassing regulator for sleep mode (direct battery connection)
  • Select battery type appropriate for your current profile

Firmware Optimisation

  • Implement duty cycling (maximise sleep time)
  • Enter deep sleep immediately after tasks
  • Disable unused peripherals and clocks
  • Use low-power modes for peripherals
  • Optimise radio usage (short bursts, aggregating data)

System-Level

  • Calculate power budget and battery life
  • Test with real-world usage patterns
  • Monitor power consumption during development
  • Plan for battery replacement or recharging

9. Conclusion

Designing ultra-low-power IoT devices requires a holistic approach that considers every component of the system. Key principles:

  1. Focus on the entire system—not just the MCU
  2. Maximise sleep time with aggressive duty cycling
  3. Choose low-power sensors with fast measurement times
  4. Optimise radio usage—it’s often the largest power consumer
  5. Power down peripherals when not in use
  6. Measure and iterate—power consumption varies in practice

“The best low-power device is one that spends 99.9% of its time in deep sleep, wakes up only when needed, and does its work as quickly as possible before returning to sleep.”

With modern MCUs, sensors, and radios, it is entirely possible to achieve battery life measured in years. The techniques and examples in this article provide a roadmap for achieving that goal.


Further Reading


This article is based on practical experience building the N3xar platform, which supports ultra-low-power devices with <1µA sleep current for long-term autonomous operation.

← Previous Post
Building a Complete IoT Device Ecosystem
Next Post →
Overview of Wireless Communication Protocols for IoT

Related Articles