1496  Connected Devices - Power Management

1496.1 Learning Objectives

After completing this chapter, you will be able to:

  • Apply power budget analysis to IoT device design
  • Implement effective power mode strategies for battery-operated devices
  • Calculate expected battery life based on duty cycle and component consumption
  • Select appropriate power sources for different deployment scenarios
  • Optimize firmware for minimal power consumption

1496.2 Prerequisites

Before diving into this chapter, you should be familiar with:


1496.3 Introduction

Power is often the most critical constraint for IoT devices. A sensor that needs monthly battery changes will fail in the market, while one that lasts 5 years on a coin cell battery enables new deployment scenarios. This chapter covers power budget analysis, power mode implementation, and the techniques that determine whether your IoT device achieves its battery life goals.

1496.4 Power Budget Analysis

Understanding where power goes is the first step to optimizing it.

1496.4.1 Power Budget Components

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor':'#2C3E50','primaryTextColor':'#fff','primaryBorderColor':'#16A085','lineColor':'#16A085','secondaryColor':'#E67E22','tertiaryColor':'#7F8C8D'}}}%%
pie showData
    title Typical IoT Sensor Power Budget
    "Radio TX/RX" : 45
    "MCU Active" : 25
    "Sensors" : 15
    "Sleep Current" : 10
    "Peripherals" : 5

Figure 1496.1: Power budget breakdown for a typical battery-powered IoT sensor

{fig-alt=“Pie chart showing power budget breakdown: Radio TX/RX 45%, MCU Active 25%, Sensors 15%, Sleep Current 10%, Peripherals 5%”}

Power modes and typical consumption:

Mode Description Typical Current
Active Mode MCU running, radio transmitting, sensors sampling 50-200mA
Sleep Mode MCU in low-power state, peripherals off 1-10mA
Deep Sleep Only RTC running, wake on timer or interrupt 10-100µA

Radio power comparison:

Protocol Typical TX Current Typical RX Current Notes
Wi-Fi 200-350mA 100-150mA Highest power, fastest data
Cellular (LTE-M) 100-500mA 50-100mA Wide area, high power
BLE 10-20mA 10-15mA Short range, low power
LoRa 20-120mA 10-15mA Long range, variable TX power
Zigbee 15-30mA 15-25mA Mesh capable

1496.4.2 Battery Life Calculation

Basic formula:

Battery Life (hours) = Battery Capacity (mAh) / Average Current Draw (mA)

For duty-cycled devices (most IoT sensors):

Average Current = (Active_mA × Active_Time%) + (Sleep_mA × Sleep_Time%)

Example calculation:

A temperature sensor with: - 3000mAh battery - Active 1 second/hour drawing 50mA - Deep sleep drawing 50µA

Calculation: - Active time: 1s / 3600s = 0.028% - Sleep time: 99.972% - Average current: (50 × 0.00028) + (0.05 × 0.99972) = 0.014 + 0.050 = 0.064mA - Battery life: 3000 / 0.064 = 46,875 hours = 5.3 years

WarningSleep Current Dominates Battery Life

For duty-cycled devices that sleep 99%+ of the time, sleep current is the primary battery drain, not active current. A device with 50µA sleep current drains 2.6x faster than one with 20µA sleep, even if active power is identical.

Modern MCU deep sleep targets: - STM32L series: 0.3-2µA - nRF52 series: 0.4-3µA - ESP32: 5-150µA (varies by wake source)

1496.5 Device Taxonomy by Power

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor':'#E8EAF6','primaryTextColor':'#2C3E50','primaryBorderColor':'#2C3E50','lineColor':'#16A085','secondaryColor':'#FFF3E0','tertiaryColor':'#E8F5E9','noteTextColor':'#2C3E50','noteBkgColor':'#FFF9C4','noteBorderColor':'#E67E22'}}}%%
graph TD
    Env[Environment] --> OnBody[On-Body<br/>Wearables]
    Env --> Indoor[Indoor<br/>Home/Office]
    Env --> Outdoor[Outdoor<br/>Weather exposed]
    Env --> Industrial[Industrial<br/>Harsh conditions]
    Env --> Mobile[Mobile<br/>Vehicle-mounted]

    OnBody --> OB1[Tiny<br/>Low power<br/>Comfort priority]
    Indoor --> ID1[AC power<br/>Wi-Fi<br/>UX focus]
    Outdoor --> OD1[IP67+<br/>Battery/Solar<br/>Durable]
    Industrial --> IN1[Extreme temps<br/>Vibration resistant<br/>M2M]
    Mobile --> MB1[Vehicle power<br/>GPS<br/>Cellular]

    Constraint[Constraint Level] --> Tiny[Tiny Sensors<br/>Coin cell, 10 years]
    Constraint --> Battery[Battery Devices<br/>Rechargeable, weeks]
    Constraint --> Mains[Mains Powered<br/>AC, no limits]
    Constraint --> Gateway[Gateways<br/>CPU, storage, LAN/WAN]

    style Env fill:#2C3E50,stroke:#2C3E50,color:#fff
    style Constraint fill:#2C3E50,stroke:#2C3E50,color:#fff
    style OnBody fill:#E67E22,stroke:#E67E22,color:#fff
    style Indoor fill:#16A085,stroke:#16A085,color:#fff
    style Outdoor fill:#16A085,stroke:#16A085,color:#fff
    style Industrial fill:#E67E22,stroke:#E67E22,color:#fff
    style Mobile fill:#16A085,stroke:#16A085,color:#fff

Figure 1496.2: IoT Device Taxonomy: Environment Types and Power Constraint Levels

{fig-alt=“IoT device taxonomy showing two main classification axes: Environment (on-body, indoor, outdoor, industrial, mobile) with their respective constraints, and Constraint Level (tiny sensors, battery devices, mains powered, gateways) with their power and capability profiles”}

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor':'#2C3E50','primaryTextColor':'#fff','primaryBorderColor':'#16A085','lineColor':'#16A085','secondaryColor':'#E67E22','tertiaryColor':'#7F8C8D'}}}%%
flowchart LR
    subgraph ENV["Environment"]
        E1[On-Body]
        E2[Indoor]
        E3[Outdoor]
        E4[Industrial]
        E5[Mobile]
    end

    subgraph CONN["Recommended Connectivity"]
        C1[BLE<br/>Low power, short range]
        C2[Wi-Fi / Zigbee<br/>High bandwidth, home mesh]
        C3[LoRaWAN / NB-IoT<br/>Long range, low power]
        C4[Industrial Ethernet<br/>Reliable, deterministic]
        C5[LTE-M / Cellular<br/>Wide coverage, handoff]
    end

    subgraph POWER["Power Strategy"]
        P1[Coin cell<br/>2-5 years]
        P2[AC mains<br/>or USB]
        P3[Solar + battery<br/>or 10yr cell]
        P4[24V DC<br/>industrial power]
        P5[Vehicle power<br/>or large battery]
    end

    E1 --> C1 --> P1
    E2 --> C2 --> P2
    E3 --> C3 --> P3
    E4 --> C4 --> P4
    E5 --> C5 --> P5

    style ENV fill:#2C3E50,stroke:#16A085,color:#fff
    style CONN fill:#E67E22,stroke:#2C3E50,color:#fff
    style POWER fill:#16A085,stroke:#2C3E50,color:#fff

Figure 1496.3: Environment-to-Design Matrix: Mapping deployment environments through recommended connectivity options to appropriate power strategies

{fig-alt=“Three-column flow diagram mapping environments to design decisions: On-Body leads to BLE and coin cell power; Indoor leads to Wi-Fi/Zigbee and AC/USB power; Outdoor leads to LoRaWAN/NB-IoT and solar/battery; Industrial leads to Industrial Ethernet and 24V DC; Mobile leads to LTE-M/Cellular and vehicle power”}

1496.6 Power Mode Implementation

ESP32 power mode implementation example:

#include <esp_sleep.h>
#include <esp_wifi.h>
#include <driver/adc.h>

// Power mode configuration
const int MEASUREMENT_INTERVAL_SEC = 300;  // 5 minutes
const int WIFI_TIMEOUT_SEC = 30;

// RTC memory persists across deep sleep
RTC_DATA_ATTR int bootCount = 0;
RTC_DATA_ATTR float lastTemperature = 0;

void setup() {
  Serial.begin(115200);

  // Increment boot counter
  bootCount++;

  // Determine wake-up reason
  esp_sleep_wakeup_cause_t wakeup_reason = esp_sleep_get_wakeup_cause();

  Serial.printf("Boot #%d, Wakeup reason: %d\n", bootCount, wakeup_reason);

  // Perform measurements
  float temperature = readTemperature();
  float humidity = readHumidity();
  float batteryVoltage = readBatteryVoltage();

  Serial.printf("T: %.1f°C, H: %.1f%%, Batt: %.2fV\n",
                temperature, humidity, batteryVoltage);

  // Only connect to Wi-Fi and send data if significant change
  // or every Nth measurement (to confirm device is alive)
  bool significantChange = abs(temperature - lastTemperature) > 2.0;
  bool periodicReport = (bootCount % 12) == 0;  // Every hour if 5-min intervals

  if (significantChange || periodicReport || batteryVoltage < 3.3) {
    // Connect to Wi-Fi
    if (connectWiFiWithTimeout(WIFI_TIMEOUT_SEC)) {
      // Send data
      sendDataToCloud(temperature, humidity, batteryVoltage);

      // Disconnect Wi-Fi
      WiFi.disconnect(true);
      WiFi.mode(WIFI_OFF);
    }
  }

  lastTemperature = temperature;

  // Configure wake-up
  esp_sleep_enable_timer_wakeup(MEASUREMENT_INTERVAL_SEC * 1000000ULL);

  // Optional: wake on external trigger (e.g., button press)
  // esp_sleep_enable_ext0_wakeup(GPIO_NUM_33, 0);  // Wake on LOW

  Serial.println("Entering deep sleep...");
  Serial.flush();

  // Enter deep sleep
  esp_deep_sleep_start();
}

void loop() {
  // Never reached - device resets on wake from deep sleep
}

float readTemperature() {
  // Read from sensor (e.g., BME280)
  // In deep sleep mode, minimize sensor warm-up time
  return 23.5;  // Placeholder
}

float readHumidity() {
  return 55.0;  // Placeholder
}

float readBatteryVoltage() {
  // Read battery voltage through voltage divider
  // Configure ADC for low-power operation
  adc1_config_width(ADC_WIDTH_BIT_12);
  adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_11);

  int raw = adc1_get_raw(ADC1_CHANNEL_0);

  // Convert to voltage (assuming 2:1 voltage divider)
  // 12-bit ADC, 11dB attenuation allows up to ~3.3V input
  // With 2:1 divider, can measure up to ~6.6V
  float voltage = (raw / 4095.0) * 3.3 * 2.0;

  return voltage;
}

bool connectWiFiWithTimeout(int timeout_sec) {
  WiFi.mode(WIFI_STA);
  WiFi.begin("SSID", "PASSWORD");

  unsigned long start = millis();

  while (WiFi.status() != WL_CONNECTED) {
    if (millis() - start > timeout_sec * 1000) {
      Serial.println("Wi-Fi connection timeout");
      return false;
    }
    delay(100);
  }

  Serial.println("Wi-Fi connected");
  return true;
}

void sendDataToCloud(float temp, float humidity, float battery) {
  // Send via MQTT or HTTP
  // Use efficient payload format (binary or compressed JSON)
  Serial.println("Data sent to cloud");
}

1496.6.1 Power Optimization Techniques

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor':'#2C3E50','primaryTextColor':'#fff','primaryBorderColor':'#16A085','lineColor':'#16A085','secondaryColor':'#E67E22','tertiaryColor':'#7F8C8D'}}}%%
flowchart TD
    subgraph HW["Hardware Optimization"]
        H1[Low-power MCU selection<br/>STM32L, nRF52, ESP32-S3]
        H2[Efficient voltage regulator<br/>LDO vs switching trade-off]
        H3[Peripheral power gating<br/>MOSFET switches for sensors]
        H4[Low-power radio selection<br/>BLE > Wi-Fi for battery]
    end

    subgraph FW["Firmware Optimization"]
        F1[Aggressive deep sleep<br/>Wake only when needed]
        F2[Adaptive sampling<br/>Less frequent when stable]
        F3[Data aggregation<br/>Send batches, not individual]
        F4[Efficient protocols<br/>MQTT-SN, CoAP vs HTTP]
    end

    subgraph DESIGN["System Design"]
        D1[Event-driven wake<br/>Interrupt vs polling]
        D2[Local processing<br/>Reduce transmission volume]
        D3[Predictive maintenance<br/>Send only anomalies]
        D4[Energy harvesting<br/>Solar, thermal, vibration]
    end

    HW --> RESULT[Extended Battery Life]
    FW --> RESULT
    DESIGN --> RESULT

    style HW fill:#2C3E50,stroke:#16A085,color:#fff
    style FW fill:#E67E22,stroke:#2C3E50,color:#fff
    style DESIGN fill:#16A085,stroke:#2C3E50,color:#fff
    style RESULT fill:#16A085,stroke:#2C3E50,color:#fff

Figure 1496.4: Power Optimization Strategies: Hardware, firmware, and system design approaches to extend battery life

{fig-alt=“Three-column diagram showing power optimization strategies: Hardware (MCU selection, efficient regulators, power gating, low-power radio), Firmware (deep sleep, adaptive sampling, data aggregation, efficient protocols), and System Design (event-driven wake, local processing, predictive maintenance, energy harvesting), all leading to extended battery life”}

1496.7 Battery Technology Selection

1496.7.1 Battery Chemistry Comparison

Chemistry Voltage Energy Density Self-Discharge Temp Range Best For
Lithium Coin (CR) 3.0V High Very low (1%/year) -20 to +70°C Long-life sensors
Lithium-ion 3.7V Very high Low (2-3%/month) 0 to +45°C Rechargeable wearables
LiFePO4 3.2V Medium Very low -20 to +60°C Cold weather, safety
Alkaline (AA/AAA) 1.5V Medium Medium (5%/year) -18 to +55°C Replaceable, low cost
NiMH 1.2V Medium High (20%/month) -20 to +50°C Rechargeable, eco-friendly

1496.7.2 Cold Weather Considerations

WarningLithium Batteries Fail in Cold Weather

Lithium-ion/LiPo batteries suffer significant degradation below 0°C: - Capacity drops 20-40% at 0°C - Capacity drops 50%+ at -20°C - Internal resistance increases, causing voltage sag under load - May not charge below 0°C (permanent damage risk)

Cold weather solutions: 1. Use LiFePO4 chemistry (better cold performance) 2. Use primary lithium cells (non-rechargeable but cold-tolerant) 3. Oversize battery capacity by 50% for cold deployment 4. Thermally insulate battery compartment 5. Pre-warm battery before high-current operations

1496.8 Knowledge Check

Question 1: A battery-powered IoT soil moisture sensor is designed to last 2 years on a single coin cell battery. Field testing shows the battery drains in 3 months. Investigation reveals the microcontroller sleep current is 50 µA. What is the primary power issue?

Explanation: Sleep current dominates power consumption for duty-cycled IoT devices. CR2032 coin cell = 225mAh. At 50µA: 225mAh / 0.05mA = 4,500 hours = 6.25 months. At 2µA deep sleep: 225mAh / 0.002mA = 112,500 hours = 12.8 years. Power optimization checklist: MCU deep sleep <5µA, peripheral power-down, efficient radio selection, adaptive sampling.

Question 2: A smart lock uses a rechargeable lithium battery. Users complain the lock becomes unresponsive in winter, requiring battery replacement. The batteries are not faulty. What is the likely issue?

Explanation: Lithium-ion batteries suffer degradation below 0°C: capacity drops 20-40%, internal resistance increases, voltage sags under load. Motor actuation for door locks draws high current, causing voltage to drop below MCU minimum. Solutions: LiFePO4 chemistry, oversized battery, thermal insulation, battery pre-warming, AC power backup.

Question 3: Which wireless protocol would provide the LONGEST battery life for a sensor that sends small data packets once per hour?

Explanation: LoRaWAN is optimized for low-power, long-range IoT applications with infrequent transmissions. Wi-Fi (200-350mA TX) and LTE (100-500mA TX) have much higher power consumption. LoRa TX power is 20-120mA depending on range setting, and the protocol is designed for small packets with long sleep periods between transmissions.

Question 4: Your IoT device measures temperature every 5 minutes. To optimize power, you decide to only transmit data when temperature changes by more than 2°C or every hour. What power optimization technique is this?

Explanation: This is adaptive sampling combined with event-driven transmission. Instead of transmitting every measurement (power-hungry), the device only transmits when there’s meaningful change (significant temperature delta) or periodically (heartbeat to confirm device is alive). This dramatically reduces radio usage, the largest power consumer.

1496.9 Summary

This chapter covered power management for IoT devices:

Key Takeaways:

  1. Power Budget Analysis: Radio transmission is typically the largest power consumer (40-50%), followed by MCU active time

  2. Sleep Current Dominates: For duty-cycled devices, sleep current determines battery life more than active power. Target <5µA deep sleep

  3. Battery Life Calculation: Use Battery_mAh / Average_Current_mA = Hours. Account for duty cycle when calculating average current

  4. Protocol Selection: BLE and LoRaWAN are far more power-efficient than Wi-Fi and cellular for battery-powered devices

  5. Optimization Techniques: Combine hardware (low-power MCU, power gating), firmware (deep sleep, adaptive sampling), and system design (event-driven, local processing) approaches

  6. Cold Weather: Lithium batteries lose 20-50% capacity below 0°C—oversize batteries or use LiFePO4 for cold deployment

1496.10 What’s Next

The next chapter explores Device Lifecycle Management, covering environmental testing, over-the-air updates, and provisioning strategies.

1496.11 Resources

Power Measurement Tools: - Nordic Power Profiler Kit 2 (PPK2) - Joulescope DC Energy Analyzer - Monsoon Power Monitor

Low-Power MCU Datasheets: - STM32L4 series (ultra-low-power Cortex-M4) - nRF52840 (BLE SoC, 0.4µA sleep) - ESP32-S3 (Wi-Fi/BLE, ~10µA sleep)