ESP32 低功耗模式

ESP32低功耗简介

深度睡眠及定时唤醒的代码
#define us_s 1000000   //将微秒转化为秒的系数
#define second 5     //睡眠五秒
const int led = 2;

void setup()
{
    pinMode(led,OUTPUT);
    esp_sleep_enable_timer_wakeup(second * us_s);
    /*  使能ESP32睡眠,一次睡眠五秒  */
}

void loop()
{
    for(char i = 0; i < 10; i++)  //让灯闪几下
    {
        digitalWrite(led,HIGH);
        delay(250);
        digitalWrite(led,LOW);
        delay(250);
    }
    esp_deep_sleep_start();  //ESP32开始进入深度睡眠
}
什么是睡眠模式

ESP32 休眠模式是 ESP32 在不使用时可以进入的省电模式,将所有数据保存在 RAM 中。此时,任何不必要的外围设备的电源都会被切断,而RAM接收到足够的功率来保留其数据。

ESP32芯片内部

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

该芯片还包含一个WiFi模块,一个蓝牙模块,一个加密加速器(专门设计用于执行加密操作的协处理器),一个RTC模块和许多外围设备。
ESP32内部结构图如下:
在这里插入图片描述

ESP32共有5种睡眠模式

  • 主动模式 Active Mode
  • 调制解调器模式 Modem Sleep Mode
  • 轻度睡眠模式 Light Sleep Mode
  • 深度睡眠模式 Deep Sleep Mode
  • 休眠模式 Hibernation Mode
    从上至下功耗降低
1.主动模式

正常模式也称为主动模式。在这种模式下,芯片的所有功能都保持活动状态。

由于活动模式使所有设备(尤其是WiFi模块、处理内核和蓝牙模块)始终保持运行,因此需要超过240mA的电流才能使芯片工作。还观察到,如果您同时使用WiFi和蓝牙,有时会出现高功率尖峰(大至790mA)
在这里插入图片描述

2.调制解调器模式

在调制解调器睡眠模式下,除了wifi,蓝牙和收音机之外,一切都处于活动状态。它还保持CPU运行,时钟是可配置的。

在这种模式下,芯片在低速时消耗约3mA电流,在高速下消耗约20mA电流。
在这里插入图片描述

3.轻度睡眠

轻度睡眠类似于调制解调器睡眠。芯片也遵循协会睡眠模式。
唯一的区别是,在轻度睡眠模式下,数字外设、大部分RAM和CPU都是时钟门控的。
什么是时钟门控?

时钟门控是一种降低动态功耗的技术。

在这种情况下,电路的某些部分通过关闭时钟脉冲来禁用,因此其中的触发器不必切换状态。由于开关状态会消耗功率,因此如果不切换,则功耗降至零。

在轻度休眠模式下,CPU 通过关闭时钟脉冲而暂停,而 RTC 和 ULP 协处理器保持活动状态。这导致功耗低于调制解调器休眠模式,约为0.8mA。
在进入轻度睡眠模式之前,ESP32 会将其内部状态存储在 RAM 中,并在从睡眠状态唤醒时恢复操作。这称为“完全 RAM 保留”。
配置唤醒源后,该功能将用于进入轻度睡眠状态。esp_light_sleep_start()
在这里插入图片描述

4.深度睡眠

在深度睡眠模式下,CPU、大部分 RAM 和所有数字外设均已关闭电源。芯片中唯一保持运行状态的部件是:

  • 联合处理器
  • 实时控制柜控制器
  • 实时交换中心外设
  • RTC 快速和慢速内存
    该芯片的功耗约为0.15 mA(如果ULP协处理器导通)至10μA。
    在这里插入图片描述
    与CPU一起,芯片的主存储器也被禁用。因此,存储在该内存中的所有内容都将被删除,并且无法访问。
    如果要在重新启动后使用数据,请通过定义具有属性的全局变量将其存储在 RTC 内存中。例如RTC_DATA_ATTRRTC_DATA_ATTR int myVar = 0;

从深度睡眠中出来后,芯片重新启动复位,并从头开始执行程序。
与其他睡眠模式不同,系统无法自动进入深度睡眠模式。该功能用于在配置唤醒源后立即进入深度睡眠状态。esp_deep_sleep_start()

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

5.休眠模式

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

除了一个 RTC 计时器(在慢速时钟上)和几个 RTC GPIO 之外,其他所有内容都已关闭。它们负责将芯片从休眠模式中唤醒。
这进一步降低了功耗。芯片在休眠模式下仅消耗约2.5μA电流。

如果您正在构建的项目不需要始终处于活动状态,则此模式特别有用。
在这里插入图片描述


参考网站

国外参考网站


使用Touch唤醒睡眠
#define limit   50   //设置阈值
const int led = 2;

void Touch_callback()   //触摸回调函数
{
    //为空,只用来唤醒睡眠
}

void setup()
{
    pinMode(led,OUTPUT);
    touchAttachInterrupt(T0,Touch_callback,limit);
    esp_sleep_enable_touchpad_wakeup();  //设置触摸唤醒
}

void loop()
{
    for(char i = 0; i < 10; i++)
    {
        digitalWrite(led,HIGH);
        delay(250);
        digitalWrite(led,LOW);
        delay(250);
    }
    esp_deep_sleep_start();   //进入睡眠模式
}

使用外部中断唤醒
/*  外部中断端口
 * 0,2,4,12-15,25-27,32-39  */
const int led = 2;
void setup()
{
    pinMode(led,OUTPUT);
    delay(500);
    esp_sleep_enable_ext0_wakeup(4,0);  //1 为高电平  0 低电平
}

void loop()
{
    for(char i = 0; i < 10; i++)
    {
        digitalWrite(led,HIGH);
        delay(250);
        digitalWrite(led,LOW);
        delay(250);
    }
    esp_deep_sleep_start();   //进入睡眠模式
}

The end

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值