Deep-sleep mode
Compared to Light-sleep mode, ESP32-C3 cannot automatically enter
Deep-sleep mode. Instead, users must call esp_deep_sleep_start()
function to send the chip into Deep-sleep mode. In Deep-sleep mode,
ESP32-C3 does not maintain Wi-Fi and Bluetooth LE connections, and shuts
down the CPU, most of the RAM and all digital peripherals clocked by the
APB_CLK. However, RTC clock controllers, RTC peripherals, and RTC fast
memory can still work. After waking up from Deep-sleep mode, ESP32-C3's
CPU will reset and restart.
Deep-sleep can be used for low-power sensor applications, or application scenarios where data transmission is not required for most of the time. ESP32-C3 can wake up from Deep-sleep mode every once in a while to measure and upload data, after which it returns to Deep-sleep mode. Alternatively, the chip can also store data from multiple measurements in RTC Memory (RTC Memory can still save data in Deep-sleep mode) and send the data out at once.
Wakeup sources in Deep-sleep mode
For Deep-sleep mode, ESP32-C3 can use GPIO or timer as wakeup sources
and supports up to two wakeup sources at the same time. In this case,
ESP32-C3 will be woken up when either of the wakeup sources is
triggered. Before entering Deep-sleep mode, users can either configure
the wake source at any time using the corresponding API or disable a
wake source using esp_sleep_disable_wakeup_source()
function. After
waking up, users can determine which wakeup source was responsible for
waking up the chip by calling esp_sleep_get_wakeup_cause()
function.
GPIO wakeup
Any GPIO can be used as the external input to wake up the chip from
Deep-sleep mode. Each pin can be individually configured to trigger
wakeup on high or low level using esp_deep_sleep_enable_gpio_wakeup()
function. It is important to note that GPIO wakeup is only available for
RTC IO.
Timer wakeup
The RTC controller has a built-in timer which can be used to wake up the
chip after a predefined amount of time. Time is specified at microsecond
precision, but the actual resolution depends on the clock source
selected for RTC_SLOW_CLK
. When Timer wakeup is enabled, RTC
peripherals or RTC memory do not need to be turned on during ESP32-C3
sleep, and Timer wakeup can be enabled by calling
esp_sleep_enable_timer_wakeup()
.
Instructions on how to enter Deep-sleep mode
After configuring the wakeup source, users can call esp_deep_sleep_start()
to enter Deep-sleep mode. When no wakeup source
is enabled, ESP32-C3 can still enter Deep-sleep mode. However, in this
case, ESP32-C3 will remain in Deep-sleep mode until an external chip
reset.
The following code shows how to configure ESP32-C3's Deep-sleep mode.
-
Wakeup source: GPIO and timer;
-
GPIO4 pin is configured to wake up on high level;
-
The predefined amount of time to wake up the chip using a timer is 20 seconds.
Considering that the GPIO4 pin wakes up ESP32-C3 at a high level, it is necessary to add a pull-down resistor in your hardware circuits or software configuration to avoid false wakeup.
#define DEFAULT_WAKEUP_PIN 4
#define DEFAULT_WAKEUP_LEVEL ESP_GPIO_WAKEUP_GPIO_HIGH
const gpio_config_t config = {
.pin_bit_mask = BIT(DEFAULT_WAKEUP_PIN),
.mode = GPIO_MODE_INPUT,
};
ESP_ERROR_CHECK(gpio_config(&config));
ESP_ERROR_CHECK(esp_deep_sleep_enable_gpio_wakeup(BIT(DEFAULT_WAKEUP_PIN), DEFAULT_WAKEUP_LEVEL));
ESP_LOGI("TAG", "Enabling GPIO wakeup on pins GPIO%d\n", DEFAULT_WAKEUP_PIN);
const int wakeup_time_sec = 20;
ESP_LOGI("TAG", "Enabling timer wakeup, %ds\n", wakeup_time_sec);
esp_sleep_enable_timer_wakeup(wakeup_time_sec * 1000000);
/*Enter deep sleep*/
esp_deep_sleep_start();