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

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介

        ESP32支持5种低功耗模式,低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。

1.1 RTC单元

        RTC单元是ESP32低功耗管理的核心,可用于管理低功耗模式的进入和退出,控制时钟源、PLL、电源开关和隔离单元以产生电源门控、时钟门控和复位信号。

        RTC单元主要包含以下几个模块:

  1. RTC主状态机:记录电源状态;
  2. 数字和模拟电源控制器:可用于为RTC的数字模块和模拟模块生成电源门控/时钟门控信号;
  3. 睡眠和唤醒控制器:可处理低功耗模式的进入和退出;
  4. 计时器:包括RTC主计时器、ULP协处理器计时器和触摸计时器;
  5. 低功耗处理器和传感器控制器:ULP协处理器、触摸控制器、SAR ADC控制器等;
  6. 保留内存:RTC慢速内存,绝大部分用作保留内存或存储ULP协处理器的指令和数据内存;RTC快速内存,绝大部分用作保留内存;
  7. 保留寄存器:该寄存器永远开启,可用于数据存储;
  8. RTC IO管脚:18 个“always-on”管脚,通常作为唤醒源。

1.2 低功耗时钟

        在低功耗模式下,ESP32的40 MHz晶振和PLL通常将断电以降低功耗,转而使用低功耗时钟维持工作。

        RTC模块可以使用5个低功耗时钟源:

  1. 外部低速晶振时钟XTL32K_CLK(32.768 kHz);
  2. 外部高速晶振时钟XTAL_DIV_CLK(2 MHz ~ 40 MHz);
  3. 内部RC振荡器RC_SLOW_CLK(频率可调,通常为150 kHz);
  4. 内部8MHz振荡器RC_FAST_CLK;
  5. 内部31.25 kHz时钟RC_FAST_DIV_CLK(来自内部8MHz振荡器,256分频)。

        以上的时钟源在RTC内部会区分成慢速时钟和快速时钟,每个RTC内部模块所使用的时钟类型是不同的;像RTC定时器、RTC主状态机和电源管理模块使用的是慢速时钟,ULP协处理器、传感器控制器、RTC内存和RTC寄存器使用的是快速时钟。

         对于数字内核(无线模块)则可以使用上面的4种时钟源。

1.3 低功耗模式

1. Active模式

  • CPU的工作时钟为XTAL_DIV_N(40 MHz/26 MHz)或PLL(80 MHz/160 MHz/240 MHz);
  • 芯片可以接收、发射或监听信号。

2. Modem-sleep模式

  • CPU可以工作,时钟可以配置;
  • Wi-Fi/蓝牙基带受时钟门限控制或关闭,射频模块关闭;
  • PLL 为 80 MHz 时,电流消耗:≈ 30 mA;
  • XTAL 为 2 MHz 时,电流消耗:≈ 3 mA;
  • 即刻唤醒;

3. Light-sleep模式

  • 内部 8 MHz 振荡器、40 MHz 高速晶振、PLL 及射频模块均禁用;
  • 数字内核时钟受门限限制,CPU暂停工作;
  • ULP 协处理器和触摸控制器可以周期性触发,对传感器进行监测;
  • 电流消耗:≈ 800 µA;
  • 唤醒延迟:< 1 ms;

4. Deep-sleep模式

  • 内部 8 MHz 振荡器、40 MHz 高速晶振、PLL 及射频模块均禁用;
  • 数字内核断电,CPU内容丢失;
  • RTC 内核的供电电压降至 0.7V;
  • 8 x 32 位数据保存在通用保留寄存器中;
  • RTC 内存和快速 RTC 内存可以保持;
  • 电流消耗:≈ 6.5 µA;
  • 唤醒延迟:< 1 ms。

5. 休眠模式

  • 内部 8 MHz 振荡器、40 MHz 高速晶振、PLL 及射频模块均禁用;
  • 数字内核断电,CPU 内容丢失;
  • RTC 外设域断电;
  • RTC 内核的供电电压降至 0.7V;
  • 8 x 32 位数据保存在通用保留寄存器中;
  • RTC 内存和快速 RTC 内存断电;
  • 电流消耗:≈ 4.5 µA;
  • 唤醒源:仅支持 RTC 计时器;
  • 唤醒延迟:< 1 ms。

1.4 唤醒源

唤醒源Light-sleepDeep-sleep休眠
EXT0YYN
EXT1YYY
GPIOYYN
RTC定时器YYY
SDIOYNN
WiFiYNN
UART0YNN
UART1YNN
TOUCHYYN
ULP协处理器YYN
蓝牙YNN

2. 例程

2.1 RTC定时器唤醒

        这个例程中配置RTC定时器,使处理器在进入深度睡眠后5秒自动唤醒。

#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "esp_log.h"
#include "esp_sleep.h"#include <string.h>#define TAG "app"int app_main()
{while (1) {ESP_ERROR_CHECK(esp_sleep_enable_timer_wakeup(5 * 1000000));ESP_LOGI(TAG, "Enter deep sleep");esp_deep_sleep_start();ESP_LOGI(TAG, "Exit deep sleep");}
}

        idf对低功耗的封装是比较完善的,仅需两个函数就可以完成。

        esp_sleep_enable_timer_wakeup配置定时器唤醒的时间,单位为微秒。

默认情况下,RTC定时器的时钟源选择的是RC_SLOW_CLK,即内部150kHz振荡器,因为该时钟源的功耗是最小的。如果需要更改时钟源,需要修改CONFIG_RTC_CLK_SRC编译选项

        esp_deep_sleep_start使处理器进入深度睡眠模式;当然也可以调用esp_light_sleep_start进入浅睡眠模式。

         下面就是程序的系统打印log。需要注意的是,因为深度睡眠下CPU会断电,内部寄存器的内容丢失,所以唤醒后程序是从头开始执行的

2.2 按键唤醒

        这个例程中配置处理器进入深度睡眠,使用GPIO按键唤醒。

 

#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "esp_log.h"
#include "esp_sleep.h"
#include "driver/rtc_io.h"#include <string.h>#define TAG "app"int app_main()
{esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause();if (cause == ESP_SLEEP_WAKEUP_EXT0) {ESP_LOGI(TAG, "Wake up by EXT0");}while (1) {ESP_ERROR_CHECK(esp_sleep_enable_ext0_wakeup(0, 0));ESP_ERROR_CHECK(rtc_gpio_pullup_en(0));  // 内部上拉ESP_ERROR_CHECK(rtc_gpio_pulldown_dis(0));ESP_LOGI(TAG, "Enter deep sleep");esp_deep_sleep_start();}
}

        如果要在深度睡眠模式下使用GPIO唤醒,必须使用RTC GPIO,ESP32中只有部分GPIO可以复用为该功能。

         我使用的是IO0作为唤醒脚。esp_sleep_enable_ext0_wakeup函数传入唤醒IO号和唤醒电平;0就是低电平唤醒,1就是高电平唤醒。

        rtc_gpio_pullup/pulldown_dis/en函数配置GPIO的上下拉,我设置成上拉模式。这里要注意即使板子上的IO带了硬件上下拉,但是进入深度睡眠是会关闭VDD电源的,所以还是需要配置。

        同样使用esp_deep_sleep_start进入深度睡眠。

        下面就是按键唤醒后的系统log。

相关文章:

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式&#xff0c;低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心&#xff0c;可用于管理低功耗模式的进入和退出&#xff0c;控制时钟源、PLL、电源开…...

Windows 局域网IP扫描工具:IPScaner 轻量免安装

IPScaner是一款258KB的工具&#xff0c;具备快捷修改IP、批量扫描、地址计算等功能&#xff0c;自动识别本机IP网段&#xff0c;快速查看IP使用情况&#xff0c;适用于监控维护、企业IT运维等场 软件功能介绍&#xff1a; 1&#xff09;快捷修改本地IP、IP批量扫描、IP地址计算…...

HTML的浮动与定位

1. 浮动 浮动可以使一个元素脱离自己原本的位置&#xff0c;并在父元素的内容区中向左或向右移动&#xff0c;直到碰到父元素内容区的边界或者其它浮动元素为止。 值描述left元素向左浮动right元素向右浮动 普通文档流&#xff1a;浏览器在默认情况下规定一个块元素在父元素…...

【网络安全 | 漏洞挖掘】我如何通过路径遍历实现账户接管

未经许可,不得转载。 文章目录 不久前,我发现了一个我在高中时非常常用的知名应用程序,它在Intigriti上是一个私有程序,本文称之为REDACTED。 我开始参与REDACTED的漏洞赏金计划,这个应用程序在我开始进行黑客攻击之前我已经非常熟悉了。最初我并没有抱太高的期望。 我首…...

DB-GPT系列(四):DB-GPT六大基础应用场景part1

一、基础问答 进入DB-GPT后&#xff0c;再在线对话默认的基础功能就是对话功能。这里我们可以和使用通义千问、文心一言等在线大模型类似的方法&#xff0c; 来和DB-GPT进行对话。 但是值得注意的是&#xff0c;DB-GPT的输出结果是在内置提示词基础之上进行的回答&#xff0c…...

SpringCloud篇(服务拆分 / 远程调用 - 入门案例)

目录 一、服务拆分原则 二、服务拆分示例 1. 案例需求 2. 案例要求 3. 导入SQL语句 4. 实现思路 4.1. 创建父工程 cloud-demo 管理依赖 依赖导入思路 4.2. 创建子工程 order-servic 4.3. 创建子工程 user-servic 4.4. 创建 cloud_order 数据库和表并插入数据 4.5. …...

Rust 建造者模式

在DDD中&#xff0c;DTO(数据传输对象)->BO(业务对象)、BO(业务对象)->PO(持久化对象&#xff0c;有的叫DO&#xff0c;即和数据表映射的实体)等等情况要做转换&#xff0c;这里提供以下转换方式 1、from或者try_from trait实现对象转换 需要转换对象满足接收对象的所有…...

ANN DNN CNN SNN

这些缩写代表了不同类型的人工神经网络&#xff1a; • ANN&#xff08;Artificial Neural Network&#xff09;&#xff1a;人工神经网络&#xff0c;是模仿人脑神经元之间连接和交互方式的计算模型。它由节点&#xff08;或称为“神经元”&#xff09;组成的网络&#xff0c;…...

go语言进阶之并发模式

并发模式 并发模式是指在程序设计中同时处理多个任务或进程的方式&#xff0c;以提高效率和响应性 for select循环模式 for select循环模式通常用于处理并发操作&#xff0c;尤其是在需要等待多个通道时。 select的执行过程主要是以下几步 阻塞等待&#xff0c;直到其中一…...

Spring Cloud LoadBalancer:负载均衡的服务调用

在微服务系统中,有时候一个服务会部署多个实例,在我们调用这类实例时,如何实现负载均衡的调用呢?这时候就要用到Spring Cloud的负载均衡组件LoadBalancer了 LoadBalancer简介 LoadBalancer是Spring Cloud官方提供的负载均衡组件,通过它能使客户端在多个服务实例之间分发传…...

微信小程序之轮播图

效果图 实现 <swiper class"banner" indicator-dots"true" indicator-color"rgba(255,255,255,1)" indicator-active-color"#ff0000" autoplay"true" interval"100" circular"true"><swi…...

羲和数据集收集器1.3

为了实现所要求的功能,我们需要进一步完善代码,使其能够处理多种格式的输入文件,并生成符合要求的 JSON 格式的输出文件。具体来说,我们完善了以下内容: 增强 extract_qa_pairs_from_content 函数:使其能够识别和处理不同格式的 QA 对。 确保输出文件的格式正确:每个 Q…...

UE--IOS打包失败 AutomationTool exiting with ExitCode=9 (9)

[Remote] Executing build UATHelper: 打包 (IOS): Setting up bundled DotNet SDK UATHelper: 打包 (IOS): /Users/zyh/UE5/Builds/DESKTOP-FKKSVFQ/Y/UE/UE_5.2/Engine/Build/BatchFiles/Mac/../../../Binaries/ThirdParty/DotNet/6.0.302/mac-x64 UATHelper: 打包 (IOS)…...

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 水平菜单导航栏是应用范围最广的网站导航设计&#xff0c;一般位于页面顶部。它适用性强&#xff0c;几乎适用于所有类型的网站&#xff0c;且设计难度低。若导航过于普通&#xff0c;无法承载复杂信息结构&#xff0c;在内容模块较多时&#xff0c;则需结…...

UNIX网络编程-TCP套接字编程

概述 TCP客户端/服务器程序示例是执行如下步骤的一个回射服务器&#xff1a; 客户端从标准输入读入一行文本&#xff0c;并写给服务器。服务器从网络输入读入这行文本&#xff0c;并回射给客户端。客户端从网络输入读入这行回射文本&#xff0c;并显示在标准输出上。 TCP服务器…...

美团代付微信小程序 read.php 任意文件读取漏洞复现

0x01 产品描述&#xff1a; ‌ 美团代付微信小程序‌是美团点评旗下的一款基于微信小程序技术开发的应用程序功能&#xff0c;它允许用户方便快捷地请求他人为自己支付订单费用。通过微信小程序&#xff0c;用户可以轻松实现代付操作&#xff0c;无需跳转到其他应用或网页…...

centos7 node升级到node18

使用jenkins发布vue3项目提示node18安装失败 错误日志&#xff1a; /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node18/bin/node: /lib64/libm.so.6: version GLIBC_2.27 not found (required by /var/lib/jenkins/tools/jenkins.plugins.node…...

使用Matlab建立随机森林

综述 除了神经网络模型以外&#xff0c;树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。 随机森林是一种集成学习方法&#xff0c;通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中&#xff0c;可以…...

【江苏-无锡】《无锡市市级政务信息化建设及运行维护项目支出预算标准(试行)》 -省市费用标准解读系列10

2023年3月28日&#xff0c;无锡市政府投资评审中心出台《无锡市市级政务信息化建设及运行维护项目支出预算标准&#xff08;试行&#xff09;》&#xff0c;此标准是为进一步提高财政评审效率&#xff0c;规范评审行为&#xff0c;保证评审质量&#xff0c;节约政府投资&#x…...

2024-11-12 问AI: [AI面试题] 您将如何设计一个人工智能系统来预测电信公司的客户流失?

文心一言 设计一个人工智能系统来预测电信公司的客户流失&#xff0c;是一个复杂但至关重要的任务&#xff0c;它涉及到多个步骤和关键要素。以下是一个详细的设计方案&#xff1a; 一、明确需求和目标 在设计智能系统之前&#xff0c;需要明确系统的需求和目标&#xff0c;…...

GD32F4xx GPIO实战:用按键控制LED,详解输入输出配置与防抖处理

GD32F4xx GPIO实战&#xff1a;从按键消抖到LED控制的完整设计指南 在嵌入式开发中&#xff0c;GPIO&#xff08;通用输入输出&#xff09;是最基础却至关重要的外设模块。对于GD32F4xx系列微控制器而言&#xff0c;掌握GPIO的高效配置不仅关乎功能实现&#xff0c;更直接影响系…...

用8086和蜂鸣器DIY音乐盒:手把手教你复刻童年旋律(附完整汇编代码)

用8086和蜂鸣器DIY音乐盒&#xff1a;手把手教你复刻童年旋律&#xff08;附完整汇编代码&#xff09; 记得小时候第一次听到电子贺卡发出《生日快乐》的单调旋律时&#xff0c;那种机械却又神奇的"音乐"让我盯着电路板研究了半天。现在想来&#xff0c;那些简单的方…...

从“一次性消耗”到“长效资产”:头部品牌如何用易元AI搭建视频中台

2026年&#xff0c;电商内容竞争已从“数量比拼”升级为“资产价值比拼”。传统视频生产是“一次性消耗”——拍完即弃、素材零散、复用率低&#xff0c;内容投入仅为短期成本&#xff1b;而头部品牌已通过视频资产化与AI内容中台&#xff0c;将内容从“成本项”转为“资产项”…...

ncmdump:一键解锁网易云音乐NCM加密文件,实现无损格式转换

ncmdump&#xff1a;一键解锁网易云音乐NCM加密文件&#xff0c;实现无损格式转换 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 你是否曾从网易云音乐下载了喜爱的歌曲&#xff0c;却发现只能在特定应…...

区块链+AI的致命组合:深扒某DeFi项目的测试黑幕

在数字经济浪潮中&#xff0c;区块链与人工智能&#xff08;AI&#xff09;的融合被视为金融创新的“致命组合”&#xff0c;尤其在去中心化金融&#xff08;DeFi&#xff09;领域&#xff0c;它承诺了前所未有的效率和智能决策能力。然而&#xff0c;这一组合也带来了隐蔽的测…...

开源翻译终端效果展示:Pixel Language Portal处理专业术语准确率分析

开源翻译终端效果展示&#xff1a;Pixel Language Portal处理专业术语准确率分析 1. 产品概览 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译工具。与传统翻译软件不同&#xff0c;它将翻译过程转化为…...

CBAM实战指南:如何通过通道与空间注意力提升CNN模型性能

1. 为什么你的CNN模型需要CBAM注意力模块 如果你正在使用卷积神经网络&#xff08;CNN&#xff09;处理图像分类任务&#xff0c;可能会遇到这样的困境&#xff1a;模型在训练集上表现不错&#xff0c;但测试集准确率始终卡在一个瓶颈。这时候不妨试试CBAM&#xff08;Convolu…...

本地部署openclaw(window环境下)不用花钱买token版

步骤一&#xff1a;参考视频到安装 openclaw 前就行&#xff08;剩下的步骤和博主不太样&#xff09; 步骤 2 1、免费注册一个 NVIDIA NIM 账户&#xff1a; 【点击前往】 登入后在设置中心生成你自己的API Keys &#xff0c;过期时间选择永不过期&#xff0c;目前可以直接免…...

Labelme标注神器:从安装到实战,手把手教你打造自己的图像分割数据集

Labelme图像标注实战&#xff1a;从入门到生产级数据集构建 在计算机视觉项目中&#xff0c;数据标注往往是决定模型效果的关键因素。不同于常见的矩形框标注工具&#xff0c;Labelme以其灵活的多边形标注能力和丰富的输出格式支持&#xff0c;成为语义分割任务的首选工具。但很…...

Super IO:Blender文件操作效率革命,实现300%工作流提速

Super IO&#xff1a;Blender文件操作效率革命&#xff0c;实现300%工作流提速 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 在3D设计领域&#xff0c;文件导入导出的繁琐操作常常成…...