当前位置: 首页 > news >正文

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功耗测量仪测试下。

http://www.gsyq.cn/news/1517539.html

相关文章:

  • 把闲置的蒂芙尼周大福卖掉前,先看看武汉这几家回收机构的真实报价 - 讯息早知道
  • 广东服务好的活动策划公司选哪家
  • 跨平台漫画阅读神器:nhentai-cross完整使用指南,5大平台无缝切换体验
  • 常州闲置黄金回收避坑指南 五区持证门店实测 2026六月最新上门行情 - 昌福黄金回收
  • 免费的投票软件程序推荐|永久免费无广告|强防刷投票评选工具 - 微信投票小程序
  • ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与生态系统服务评估(附完整数据与代码)
  • 2026年6月最新|抗电压干扰防护公司,行业领先技术实力企业推荐 - 商业新知
  • MC9328MX1嵌入式驱动开发:SDHC与LCD控制器深度解析与实战
  • ★天虹提货券回收靠谱渠道解析|卡券规则与行情科普 - 京顺回收
  • 2026年6月防水透气阀及PTFE薄膜厂家推荐 - 多才菠萝
  • 2026年6月广州爱马仕回收行业全景解读:行情走势、变现逻辑与机构优劣解析 - 薛定谔的梨花猫
  • HarmonyOS PC 应用 FlexDirection 反向排列——RowReverse 和 ColumnReverse 的实际用途
  • 伊犁多地黄金上门回收 资质齐全教你稳妥变现 - 余生黄金回收
  • 贵阳市麦克维尔中央空调维修师傅电话|各区金牌师傅,靠谱选欧米到家 - 欧米到家
  • 量子嵌入理论中CPD-DF-LL方法的计算效率与精度突破
  • 聚合AI工具实战:一键调用GPT-4、Claude、文心一言,我只留了这个入口
  • 无锡宝珀讲解夜光珠故障隐患,细小部件松动切莫忽视,传授无损修复和佩戴注意事项 - 亨得利官方维修中心
  • 2026无锡黄金回收避坑指南|正规流程、报价规则、真实案例全覆盖 - 奢佳美黄金珠宝
  • 嵌入式串行通信:SCI与SPI协议原理、配置与工程选型指南
  • MCU系统集成模块(SIM)深度解析:从COP看门狗到XBAR交叉开关的实战指南
  • vim 命令总结
  • 微信聊天记录备份工具:如何安全迁移你的数字记忆?
  • 解锁B站缓存宝藏:m4s-converter让你的离线视频重获新生
  • 告别杂乱网线:利用TP-Link易展路由的‘虚拟网桥’功能无线看IPTV
  • 伊犁黄金变现新选择 资质齐全上门回收更省心 - 余生黄金回收
  • 爬虫数据解析避坑指南:为什么你的XPath总是定位不到元素?(附lxml常见问题排查)
  • MuJoCo Humanoid环境调参避坑指南:如何调整forward_reward_weight等参数让机器人跑得更快更稳
  • 贵阳市海尔空调维修师傅电话|各区金牌师傅,靠谱选欧米到家 - 欧米到家
  • QGIS加载星图地球数据云影像,保姆级教程(附Token获取与XYZ Tiles配置避坑点)
  • 2026武汉百达翡丽回收口碑榜,这家老店值得关注 - 逸程