news 2026/6/13 14:26:50

esp32开发与应用(深度睡眠)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
esp32开发与应用(深度睡眠)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

对于嵌入式设备,有些是需要部署在外面的。这些外部环境,不是所有地方都有条件外接电源的,所以很多设备本身不能一直维持在高速运行的状态,需要有时采集数据,有时处于深度睡眠状态,这样设备可以长时间处于低功耗状态,大大降低人工维护的成本。今天正好看一下,esp32怎么进入深度睡眠的。

1、如何进入睡眠

进入睡眠比较简单,调用esp_deep_sleep_start即可。

2、如何恢复

调用esp_sleep_enable_timer_wakeup这个函数,也就是说在进入深度睡眠之前,有必要告诉系统大约什么时候恢复,以什么样的形式恢复。

3、一直在内存中的数据

对于系统来说,系统恢复就好像是重启了一样,但是系统中的一些数据还是在的,只要它还保存在RTC_DATA_ATTR这个区域内。这就是深度睡眠和冷重启最大的区别所在。

4、编写示例代码

代码部分尽量让ai编写,因为esp32的case比较多,相关demo也不少,所以ai这部分基本上可以马上给出demo代码,我们会看懂就好。

#include <stdio.h> #include <string.h> #include "esp_sleep.h" #include "esp_log.h" #include "freertos/FreeRTOS.h" // Add FreeRTOS header #include "freertos/task.h" // Add task header (contains vTaskDelay) static const char *TAG = "TIMER_WAKEUP"; // Variable defined in RTC memory, data will not be lost during Deep Sleep RTC_DATA_ATTR static int boot_count = 0; // Print wakeup reason static void print_wakeup_reason(void) { esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause(); switch(cause) { case ESP_SLEEP_WAKEUP_TIMER: ESP_LOGI(TAG, "Wakeup reason: Timer wakeup"); break; case ESP_SLEEP_WAKEUP_UNDEFINED: ESP_LOGI(TAG, "Wakeup reason: Power-on/Reset (first boot)"); break; default: ESP_LOGI(TAG, "Wakeup reason: Other (code: %d)", cause); break; } } void app_main(void) { // Increment boot counter boot_count++; ESP_LOGI(TAG, "========================================"); ESP_LOGI(TAG, "System boot - Count: %d", boot_count); ESP_LOGI(TAG, "========================================"); // Print wakeup reason print_wakeup_reason(); // Configure timer wakeup: wake up after 10 seconds (unit: microseconds) esp_sleep_enable_timer_wakeup(10 * 1000000ULL); ESP_LOGI(TAG, "✅ Timer wakeup configured, will wake up after 10 seconds"); // Display countdown (optional, for debugging) for (int i = 10; i > 0; i--) { ESP_LOGI(TAG, "⏰ Entering sleep in %d seconds...", i); vTaskDelay(1000 / portTICK_PERIOD_MS); // Delay 1000ms } // Enter Deep Sleep ESP_LOGI(TAG, "😴 Entering Deep Sleep mode..."); ESP_LOGI(TAG, "========================================"); // Flush log buffer to ensure all logs are output esp_log_timestamp(); vTaskDelay(100 / portTICK_PERIOD_MS); // Enter deep sleep (system will pause here) esp_deep_sleep_start(); // This line will never be executed ESP_LOGE(TAG, "Error: System should not reach here!"); }

5、编译、测试和学习

代码都ok了,就可以编译、烧录测试一下,看看系统是不是循环进入类似重启的状态。这种编程模式非常省电,对于一些场景,比如数据采集,都是非常实用的一个做法。有兴趣的同学,可以继续看看不同mode下,对应的功耗是多少,例如可以买一个usb功耗测量仪测试下。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 14:19:02

Windows 11 LTSC系统恢复微软商店完整指南:3分钟一键安装方案

Windows 11 LTSC系统恢复微软商店完整指南&#xff1a;3分钟一键安装方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否在使用Windows 11 LTS…

作者头像 李华
网站建设 2026/6/13 14:15:04

解放双手!Campus-imaotai:i茅台自动预约终极解决方案

解放双手&#xff01;Campus-imaotai&#xff1a;i茅台自动预约终极解决方案 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署&#xff08;本项目不提供成品&#xff0c;使用的是已淘汰的算法&#xff09; 项目地址…

作者头像 李华
网站建设 2026/6/13 14:10:56

3分钟解锁原神成就数据:YaeAchievement智能导出工具全面指南

3分钟解锁原神成就数据&#xff1a;YaeAchievement智能导出工具全面指南 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 还在为《原神》中数百个成就的手动记录而烦恼吗&#xff1f;YaeAch…

作者头像 李华
网站建设 2026/6/13 14:09:58

【TEE从入门到精通及实战】06 远程认证实战:从Quote验证到安全会话建立

开篇故事:被篡改的密钥交换 上周,一位做金融风控的朋友找到我,说他们的SGX应用在测试环境中“偶尔”会泄露敏感数据。 他们用了Intel SGX SDK的远程认证流程,但只验证了Quote的签名,没有检查Quote中的CPU安全版本号(CPUSVN)。 结果,攻击者用一个老版本、有漏洞的SGX…

作者头像 李华
网站建设 2026/6/13 14:06:52

5个理由告诉你为什么YimMenu是GTA5在线模式的最佳安全增强工具

5个理由告诉你为什么YimMenu是GTA5在线模式的最佳安全增强工具 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu…

作者头像 李华