了解ESP32睡眠模式及其功耗

2023-05-16

陈拓翻译 2022/05/30-2022/05/30

原文 https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/

 

毫无疑问,ESP32是许多WiFi/MCU SOC的有力竞争对手,在性能和价格上都经常击败它。但是,根据它所处的状态,ESP32可能是一款相对耗电的设备。

当您的物联网项目由墙上的插头供电时,您往往不会太在意功耗。但如果你打算用电池为你的项目供电,每一毫安都很重要。

这里的解决方案是通过利用ESP32的一种睡眠模式来减少其功耗。对于不需要一直处于活动状态的项目来说,这确实是一个大大延长电池寿命的好策略。

什么是ESP32睡眠模式?

ESP32睡眠模式是一种省电状态,ESP32不使用时可以进入该状态。ESP32的状态保持在RAM中。当ESP32进入睡眠模式时,任何不需要的数字外围设备的电源都会被切断,而RAM接收到的电源刚好足以使其保留数据。

ESP32芯片内部

为了了解ESP32是如何实现节能的,我们需要知道芯片内部是什么。下图显示了ESP32芯片的功能框图。

 

ESP32芯片的核心是一个双核32位微处理器,带有448 KB的ROM、520 KB的SRAM和4MB的闪存。

它还包含WiFi模块、蓝牙模块、加密加速器(专门用于执行加密操作的协处理器)、RTC模块和许多外围设备。

ESP32电源模式

由于ESP32的高级电源管理,它提供了5种可配置的电源模式。根据电源要求,芯片可以在不同的电源模式之间切换。模式包括:

  • 活动模式
  • 调制解调器睡眠模式
  • 浅睡眠模式
  • 深度睡眠模式
  • 休眠模式

每种模式都有其独特的功能和节能功能。让我们一个接一个地看看。

ESP32激活模式

正常模式也称为激活模式。在此模式下,芯片的所有功能都处于激活状态。

由于主动模式使一切(尤其是WiFi模块、处理核心和蓝牙模块)始终保持开启状态,因此芯片需要240mA以上的电流才能工作。我们还观察到,如果同时使用WiFi和蓝牙功能,有时会出现高功率峰值(最大为790mA)。

 

如果您查看ESP32数据表,在射频工作的情况下,有功功率模式下的功耗如下:

显然,这是最低效的模式,将消耗最多的电流。因此,如果我们想节省电力,我们必须在不使用时禁用它们(通过利用其他电源模式之一)。

ESP32调制解调器睡眠

在调制解调器睡眠模式下,一切都处于活动状态,而只有WiFi、蓝牙和无线通信被禁用。CPU也可运行,时钟可配置。

在这种模式下,芯片在低速时消耗约3mA,在高速时消耗20mA

 

为了保持WiFi/蓝牙连接处于活动状态,CPUWi-Fi、蓝牙和无线通信将按预定义的时间间隔唤醒。这就是所谓的关联睡眠模式。

在此睡眠模式期间,电源模式在活动模式和调制解调器睡眠模式之间切换。

ESP32只有在以Station模式连接到路由器时才能进入调制解调器睡眠模式。ESP32通过DTIM信标机制保持与路由器的连接。

为了省电,ESP32在两个DTIM信标间隔之间禁用Wi-Fi模块,并在下一个信标到达之前自动唤醒。

睡眠时间由路由器的DTIM信标间隔时间决定,通常为100ms到1000ms。

什么是DTIM信标机制?

DTIM是英文Delivery Traffic Indication Message缩写。

在DTIM信标(DTIM-Beacon)机制中,接入点(AP)/路由器定期发送信标帧。每个帧包含有关网络的所有信息。它用于宣布无线网络的存在并同步所有连接的成员。

ESP32轻度睡眠

轻度睡眠的工作模式与调制解调器睡眠的工作模式相似。该芯片还遵循关联睡眠模式。

区别在于,在轻睡眠模式下,数字外围设备、大多数RAM和CPU都是时钟选通的。

什么是时钟选通?

时钟选通是一种降低动态功耗的技术。

它通过关闭时钟脉冲来禁用部分电路,这样电路中的触发器就不必切换状态。切换状态是需要消耗功率的,如果不切换,功耗将变为零。

在轻度睡眠模式下,CPU通过关闭其时钟脉冲来暂停,而RTC和ULP协处理器保持活动状态。这导致功耗低于调制解调器睡眠模式(约0.8mA)。

 

在进入轻度睡眠模式之前,ESP32保持其内部状态,并在退出睡眠后恢复操作。它被称为全RAM保留。

esp_light_sleep_start()函数可用于在配置唤醒源后进入轻度睡眠。

ESP32深度睡眠

在深度睡眠模式下,CPU、大部分RAM和所有数字外围设备都会断电。芯片上唯一保持通电的部分是:RTC控制器、RTC外围设备(包括ULP协处理器)和RTC内存(慢和快)。

芯片功耗约为0.15 mA(如果ULP协处理器已通电)至10µA

 

在深度睡眠模式下,主CPU断电,而ULP协处理器根据传感器的测量数据进行传感器测量并唤醒主系统。这种睡眠模式称为ULP传感器监测模式。

除了CPU之外,芯片的主存储器也被禁用。因此,存储在该内存中的所有内容都将被擦除,无法访问。

但是,RTC内存保持通电状态。因此,它的内容在深度睡眠时被保存下来,在我们叫醒芯片后可以取回。这就是原因,该芯片在禁用Wi-Fi和蓝牙连接数据之前,会将其存储在RTC内存中。

因此,如果要在重新启动时使用数据,请通过定义具有RTC_DATA_ATTR属性的全局变量将其存储到RTC内存中。例如,RTC_DATA_ATTR int bootCount = 0;

在深度睡眠模式下,除RTC模块外,整个芯片的电源被切断。因此,任何不在RTC恢复内存中的数据都将丢失,因此芯片将通过重置重新启动。这意味着程序再次从头开始执行。

提示

ESP32支持在深度睡眠结束后运行深度睡眠唤醒存根stub。该函数在芯片唤醒后立即运行–在任何正常初始化之前,引导加载程序代码运行。唤醒存根运行后,芯片可以恢复睡眠或继续正常启动。

stub的官方说明:

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/deep-sleep-stub.html

与其他睡眠模式不同,系统无法自动进入深度睡眠模式。esp_deep_sleep_start()函数可用于在配置唤醒源后立即进入深度睡眠。

默认情况下,ESP32将自动关闭唤醒源不需要的外围设备的电源。但您可以选择关闭/保持哪些外围设备。有关更多信息,请查看API文档:

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/

要了解有关ESP32深度睡眠及其唤醒来源的更多信息,请访问以下教程。

https://lastminuteengineers.com/esp32-deep-sleep-wakeup-sources/

ESP32深度睡眠实验

这里有我的一篇实验文章《ESP32深度睡眠电流怎样低于10uA》

https://zhuanlan.zhihu.com/p/521640890

https://blog.csdn.net/chentuo2000/article/details/125033711?spm=1001.2014.3001.5502

ESP32休眠模式

与深度睡眠模式不同,在休眠模式下,芯片还禁用内部8MHz振荡器和ULP协处理器。RTC恢复内存也已断电,这意味着我们无法在休眠模式下保留任何数据。

除慢时钟上只有一个RTC计时器和一些RTC GPIO处于活动状态外(他们负责将芯片从休眠模式唤醒),其他所有功能均已关闭。

这进一步降低了功耗。该芯片仅在休眠模式下消耗约2.5µA。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解ESP32睡眠模式及其功耗 的相关文章

  • try catch里面try catch嵌套

    try catch里面try catch嵌套 点击打开链接 try 与catch的作用 首先要清楚 xff0c 如果没有try的话 xff0c 出现异常会导致程序崩溃 而try则可以保证程序的正常运行下去 xff0c 比如说 xff1a t
  • mysql 中使用 where 1=1和 1=1 的作用

    Mysql中where 1 61 1 和count 0 使用小技巧 mysql中使用 where 1 61 1和 1 61 1 的作用
  • 面试题1:OS或者编译器怎么识别是全局变量还是局部变量

    OS或者编译器怎么识别是全局变量还是局部变量 操作系统内根本不关心你是什么变量 xff0c 它只管代理运行程序 xff0c 也就是进程 xff0c 负责这些进程之间的调度 xff0c 不过如果要说操作系统本身也是进程 xff0c 那倒可以理
  • 面试题4:数组、指针、引用的联系区别

    数组和指针 xff1f xff1f xff1f 从两个方面来看 xff0c 一是作为一个语言 xff0c 数组是必须要支持的一种数组类型 xff0c 原因很简单 xff0c 数组是线性表的直接体现 而从编译器设计者的角度来看 xff0c 如
  • c++ 容器类 概括性介绍

    C 43 43 中的容器类包括 顺序存储结构 和 关联存储结构 xff0c 前者包括vector xff0c list xff0c deque等 xff1b 后者包括set xff0c map xff0c multiset xff0c mu
  • 海康摄像头使用RTSP

    1 协议格式 海康威视IP摄像头rtsp协议地址如下 xff1a rtsp username passwd 64 ip port codec channel subtype av stream 主码流 xff1a rtsp admin 12
  • 树莓派串口连接ESP8266

    陈拓 chentuo 64 ms xab ac cn 2020 03 12 2020 03 12 1 概述 ESP8266是物联网行业广泛使用的WiFi模块 xff0c 小巧 功能强大 xff0c 而且价格低廉 通常用电脑进行ESP8266
  • Linux 创建TCP连接流程

    文章目录 Linux创建TCP的步骤服务端客户端TCP建立流程示例代码 Linux创建TCP的步骤 TCP编程需要客户端和服务器两套编码 xff0c 其创建TCP的流程也是不完全一致的 服务端 使用socket函数创建一个套接字使用sets
  • 结构体类型完全归纳

    结构体类型 目录 基本概述 一 结构体类型变量的定义方法及其初始化 1 定义结构体类型变量的方法 2 结构体变量的初始化 二 结构体变量的引用 三 结构体数组 1 定义结构体数组 2 结构体数组应用举例 四 指向结构体变量的指针 1 类型一
  • Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS包

    文章目录 目标一 D435i简介二 环境配置三 RealSense的SDK2 0安装四 ROS包安装五 摄像机CV的ROS包节点 六 问题排查 目标 在Ubuntu20 04LTS系统下安装D435i的驱动SDK2和ROS包 xff0c 实
  • C# 调用NationalInstruments的dll报错问题 未能加载文件或程序集

    C 调用NationalInstruments的dll报错问题 问题原因 xff1a dll版本不匹配导致的 xff0c 需要做如下操作解决问题 未能加载文件或程序集 NationalInstruments Common Version 6
  • 需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌

    需要授权的 API xff0c 必须在请求头中使用 添加字段 需要授权的 API xff0c 必须在请求头中使用 Authorization 字段提供 token 令牌 实现方法 通过 axios 请求拦截器添加 token xff0c 保
  • 关于HTTP解析的一点思考

    原文 似乎已经很久没有提到关于服务器的消息了 xff0c 其实我一直都在写 xff0c 只是有时事情比较多 xff0c 会耽搁一点时间 在使用C重写前 xff0c 我就已经用Dlang实现了近2个版本的HTTP解析器 xff0c 换成C之后
  • Paparazzi UAV Lisa/M2飞控使用说明书

    第一部分 地面站 Paparazzi xff08 简称PPZ xff09 UAV项目起始于2003年 xff0c 由法国民航大学发起的一套软硬件开源无人机项目 xff0c 它提供了一整套完整的无人机软硬件解决方案 PPZ 地面站软件运行在L
  • Anaconda3-2020.02-Windows-x86_64安装及使用步骤

    Conda是一个开源的包 环境管理器 xff0c 可以用于在同一个机器上安装不同版本的软件包及其依赖 xff0c 并能够在不同的环境之间切换 Anaconda包括Conda Python以及一大堆安装好的工具包 xff0c 比如 xff1a
  • vivado 2017.4安装步骤

    目录 xff1a windows安装vivado2017 4 xff1b 虚拟机ubuntu安装vivado 2017 4 xff1b ios安装vivado 一 xff0c windows安装vivado2017 4 xilinx官网下载
  • LINUX C语言TCP客户端和服务器传输结构体数据

    1 xff0c TCP服务器流程 服务器 xff1a 1 创建socket xff0c 使用socket函数 2 准备通信地址 xff0c 使用结构体类型 3 绑定socket和通信地址 xff0c 使用bind函数 4 进行通信 xff0
  • FDC系列电容传感器及FDC2214使用要点

    陈拓 2021 02 21 2021 02 21 1 概述 电容式传感是一种低功耗 低成本且高分辨率的非接触式感测技术 xff0c 适用于从接近检测 手势识别到远程液位感测的各项应用 电容式传感系统中的传感器可以采用任意金属或导体 xff0
  • 卫星数据高动态捕获

    一 xff0c 高动态导航接收终端的现状 早期的扩频通信系统由于受到集成电路水平的限制 xff0c 多采用串行搜索技术 由于串行捕获速度慢 xff0c 耗时长不能满足高动态等环境对速度的要求 xff0c 随着数字信号处理等技术的发展 xff
  • 基于ZYNQ平台的powerlink接口平台搭建

    1 xff0c 搭建powerlink接口所需硬件平台 xff1a Zynq ZC702 board used as openPOWERLINK MN AVNET expander board AES FMC ISMNET G Linux

随机推荐

  • 雷达测距测速测角基本原理

    由雷达发射机产生的电磁波经收发开关后传输给天线 xff0c 由天线将此电磁波定向辐射于大气中 电磁波在大气中以近光速传播 xff0c 如目标恰好位于定向天线的波束内 xff0c 则它将要截取一部分电磁波 目标将被截取的电磁波向各方向散射 x
  • 信号处理之脉冲压缩

    一 xff0c 脉冲压缩的背景 随着飞行技术的飞速发展 xff0c 对雷达的作用距离 分辨能力 测量精度和单值性等性能指标提出越来越高的要求 测距精度和距离分辨力对信号形式的要求是一致的 xff0c 主要取决于信号的频率结构 xff0c 为
  • MTI动目标指示和MTD动目标检测

    MTI 是一种频域滤波器 radar主席的ppt 中说到 xff0c 它是对多组脉冲回波的同一个距离单元加权求和 xff0c 得到一个结果 xff1b 也就是多个输入一个输出 xff1b 相当于一个高通滤波器 xff0c 用来抑制固定目标和
  • 复旦微开发过程中遇到的问题总结(二)

    一 xff0c 将bin文件放到flash中0地址处能识别并且启动吗 xff1f xlinx的放在0地址处可以识别启动 xff0c 我尝试复旦微这个没反应 要用procise生成 xff0c 第一个必须是FSBL out 只能是procis
  • 用链表实现fifo功能缓存和拼接数据功能

    fifo h ifndef LIST QUEUE H define LIST QUEUE H include lt stdio h gt include lt stdlib h gt include 34 xil types h 34 in
  • zynq bootgen配置启动

    一 xff0c Zynq 7000 SoC 启动头文件 0x00 0x1F Arm 矢量表 由 Bootgen 使用虚拟矢量表填充 xff08 Arm 操作代码 0xEAFFFFFE xff0c 即用于捕获未初始化矢量的 branch to
  • 制作四个文件启动的镜像

    一 环境搭建 xff1a vivado2018 3 xff0c petalinux2018 3 xff0c 1 petalinux环境设置 所使用的编译环境需要使用petalinux这个软件 xff0c 第五章Petalinux 的安装 里
  • ubuntu虚拟机更改镜像源(中科大或者阿里云镜像源)

    ubuntu虚拟机更改镜像源 xff08 中科大或者阿里云镜像源 xff09 1 进入终端后 xff0c 编辑源列表文件 xff1a 输入 xff1a sudo vim etc apt sources list 后输入 xff1a i 2
  • 海康威视客户端iVMS-4200连接NVR

    海康威视客户端 iVMS 4200 连接 NVR 陈拓 2021 07 30 2021 08 01 1 概述 iVMS 4200 客户端是一款与网络监控设备配套使用的综合应用软件 xff0c 可满足用户多方面需求 xff0c 如设备管理 人
  • 匿名上位机使用方法分享--总体介绍

    不知不觉 xff0c 匿名科创已经走过了7个年头 xff0c 这里首先要感谢大家这么久以来对匿名的支持与帮助 xff01 匿名为了提供给大家一个更好的调试工具 xff0c 始终在维护开发我们的匿名上位机软件 xff0c 7年时间 xff0c
  • 匿名上位机使用方法分享--高级收码

    匿名上位机总体介绍移步 xff1a https blog csdn net wangjt1988 article details 83684188 本文视频介绍 xff1a https www bilibili com video av35
  • 匿名上位机使用方法分享--波形显示

    匿名上位机总体介绍移步 xff1a https blog csdn net wangjt1988 article details 83684188 波形显示可以说是上位机的功能重点 xff0c 是各种调试 数据分析的有力助手 xff0c 下
  • 匿名数传使用方法分享

    目录 欢迎使用匿名数传模块匿名数传的特点硬件介绍使用介绍指示灯连接匿名飞控建议 欢迎使用匿名数传模块 大家调试各种设备时 xff0c 一般用什么方式呢 xff1f 相比答案大多是上位机 43 串口的方式 如果您还在使用usb转串口芯片然后连
  • 匿名科创--X2212版到手飞套件介绍

    匿名科创到手飞X2212版 xff0c 使用朗宇X2212系列无刷电机 xff0c 配合特制的6mm正反螺纹螺旋桨安装柱 xff0c 可以同时兼容8寸普通螺旋桨和9寸9450自锁螺旋桨 优点 xff1a 可直接使用普通8寸螺旋桨 xff0c
  • vscode最皮实的C++格式化的配置方法

    1 安装C C 43 43 2 在vscode界面 xff0c 按 34 Ctrl 43 34 进入设置界面 xff0c 搜索Format 3 设置保存文件时 xff0c 按格式对代码排版 4 向下拉 xff0c 找到下图选项 xff0c
  • 通过openmv生成apriltag标签

    Apriltag官网提供的tag图片分辨率很低 xff0c 完全无法使用 xff0c 通过openmv生成apriltag标签 生成方法如下 xff1a openmv IDE的下载与安装 openmv官方提供了各种版本的IDE xff0c
  • 串口传输数据错位 的几种解决办法

    1 代码优化等级 2 使用晶振 晶振自身产生时钟信号 xff0c 为各种微处理芯片作时钟参考 无源晶振需要用CPU内部的振荡器信号差接线麻烦石英 gt 陶瓷有源晶振是一个完整的振荡器信号好接线简单灵活性较差 3 使用降低传输速率 xff1f
  • sip 认证分析

    SIP类似Http协议 其认证模式也一样 Http协议 xff08 RFC 2616 xff09 规定可以采用Basic模式和摘要模式 xff08 Digest schema xff09 RFC 2617 专门对两种认证模式做了规定 RFC
  • MicroPython移植

    MicroPython移植 1 目标板 stm32f407zgt6 2 下载移植准备 micropython源码 arm交叉编译工具 sudo apt get install git sudo apt get install gcc arm
  • 了解ESP32睡眠模式及其功耗

    陈拓翻译 2022 05 30 2022 05 30 原文 https lastminuteengineers com esp32 sleep modes power consumption 毫无疑问 xff0c ESP32是许多WiFi