智能家居wifi芯片wifi蓝牙模块无线模块乐鑫esp32 Deep-sleep模式,相对于Light-sleep模式,ESP32-C3无法自动进入Deep-sleep模式,调用esp_deep_sleep_start()函数可进入 Deep-sleep 模式。在 Deep-sleep 模式下,智能家居wifi芯片wifi蓝牙模块无线模块乐鑫ESP32-C3 会断开与 Wi-Fi和 BluetoothLE的连接,同时会关闭CPU、大部分 RAM 和所有由APB CLK 提供时钟的数字外设,仍然可以工作的有 RTC 时钟控制器、RTC 外设、RTC 快速内存。从 Deep-sleep 模式唤醒后,CPU将复位重启。
Deep-sleep 可以用于低功耗的传感器应用,或者大部分时间都不需要进行数据传输的情况设备可以每隔一段时间从 Deep-sleep 模式醒来测量并上传数据,之后继续进入 Deep-sleep模式。也可以将多个数据存储于RTC Memory(RTC Memory 在 Deep-sleep 模式下仍然可以保存数据),然后一次发送出去。
1.Deep-sleep 模式的唤醒源
针对 Deep-sleep 模式,智能家居wifi芯片wifi蓝牙模块无线模块乐鑫ESP32-C3 可以使用GPIO 唤醒源和定时器唤醒源,支持同时配置一个或两个唤醒源。在这种情况下,当任何一个唤醒源被触发时,ESP32-C3 都会被唤醒。在进入Deep-sleep 模式之前,既可以使用相应的 API 随时配置唤醒源,也可以使用 esp sleep_disable_wakeu_ source()函数禁用某个唤醒源。在唤醒 ESP32-C3 后,可以通过esp_sleep_get_wakeup_cause()函数来检查哪个唤醒源被触发了。
(1)GPIO 唤醒。在 Deep-sleep 模式下,可以由外部唤醒源通过 GPIO 来唤醒智能家居wifi芯片wifi蓝牙模块无线模块乐鑫ESP32-C3。通过esp_deep_sleep_enable_gpio_wakeup()函数可以将GPIO配置为启高电平唤醒或低电平唤醒。需要注意的是,GPIO唤醒仅可用于RTC IO。
(2)Timer 唤醒。RTC控制器有内置的定时器,可在预定义的时间到达时唤醒ESP32-C3。定时时间以微秒为精度来指定,但实际分辨率取决于为 RTC_SLOW_CLK 选择的时钟源。在启用Timer 唤醒时,不需要在 ESP32-C3 睡眠期间打开 RTC 外设或 RTC 存储器,通过esp_sleep_enable_timer_wakeup()函数可启用Timer 唤醒。
2.Deep-sleep 模式的配置说明
配置唤醒源后,可调用esp_deep_sleep_start()函数进入 Deep-sleep 模式。在没有配置唤醒源的情况下也可以进入 Deep-sleep 模式,在这种情况下,智能家居wifi芯片wifi蓝牙模块无线模块乐鑫ESP32-C3 将无限期地处于Deep-sleep 模式,直到外部复位为止。
下述代码展示了如何配置 Deep-sleep 模式,其中启用了 GPIO 唤醒、Timer 唤醒,在 Deep-sleep模式下将GPIO4引脚配置为高电平时唤醒,以及进入 Deep-sleep 模式20s后进行Timer 唤醒。考虑到 GPIO4引脚是在高电平时唤醒 ESP32-C3 的,所以在硬件上或者软件配置上需要添加下拉操作,避免误唤醒情况的发生。
1.#define DEFAULT_WAKEUP_PIN 4
2.#define DEFAULT_WAKEUP_LEVEL ESP_GPIO_WAKEUP_GPIO_HIGH
3.
4.const gpio_config_t config ={
5. .pin_bit_mask = BIT(DEFAULT_WAKEUP_PIN),
6. .mode= GPIO MODE INPUT,
7. };
8.ESP_ERROR_CHECK(gpio_config(&config));
9.ESP_ERROR_CHECK(esp_deep_sleep_enable_gpio_wakeup(BIT(DEFAULT WAKEUP PIN),
10.DEFAULT WAKEUP LEVEL)):
11.ESP_LOGI(“TAG",“Enabling GPIO wakeup on pins GPIO%d\n",
12.DEFAULT_WAKEUP_PIN):
13.
14.const int wakeup_time_sec = 20;
15.ESP_LOGI("TAG","Enabling timer wakeup, %ds\n",wakeup_time_sec);
16.esp_sleep_enable_timer_wakeup(wakeup_time_sec * 1000000);
17.
18./*Enter deep sleep*/
19.esp_deep_sleep_start();