Skip to content

ESP32 ULP Coprocessor Not Running in Sleep

DodaTech Updated 2026-06-26 1 min read

In this tutorial, you'll learn about ESP32 ULP Coprocessor Not Running in Sleep. We cover key concepts, practical examples, and best practices.

The Problem

ESP32 ULP coprocessor program does not execute during deep sleep.

Quick Fix

Wrong

// No ULP program loaded or started
ULP does not run during sleep. No sensor data collected.
// Load ULP program (binary blob)
ulp_set_wakeup_period(0, 100000);  // Run every 100ms
ulp_load_binary(0, ulp_binary, ulp_binary_size);
ulp_run(ulp_entry_addr);
esp_sleep_enable_ulp_wakeup();
esp_deep_sleep_start();
ULP runs every 100ms during deep sleep. Wakes ESP32 when threshold exceeded.

Prevention

Compile ULP program with the RISC-V toolchain. Use ULP FW library for simplified programming. Set wakeup period (100ms-10s typical). ULP has limited instructions (8KB IROM). ULP can read I2C sensors during sleep.

DodaTech engineers apply these same patterns across Doda Browser, DodaZIP, and Durga Antivirus Pro for production IoT reliability.

FAQ

### What is the ULP coprocessor?

The Ultra Low Power (ULP) coprocessor runs custom programs during deep sleep. It has 8KB of instruction memory and 8KB of data memory.

How much power does ULP add?

ULP increases deep sleep current from ~10 uA to ~150 uA depending on active period.

Can ULP read I2C sensors?

Yes. ULP has an I2C controller that can read sensors during deep sleep and wake the main CPU on thresholds.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro