0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP32深度睡眠的教程

454398 来源:网络整理 作者:网络整理 2019-12-11 17:48 次阅读

步骤1:所需的零件

ESP32深度睡眠的教程

在本教程中,我将使用以下部分,因此,如果您想自己尝试本教程,则需要以下内容:

任何ESP32开发板▶http://educ8s.tv/part/ESP32

A Firebeetle ESP32开发板▶http://educ8s.tv/part/FireBeetle

面包板▶http://educ8s.tv/part/LargeBreadboard

电线▶http://educ8s。电视/零件/电线

LED▶http://educ8s.tv/part/LEDs

万用表▶http://educ8s.tv/part/Multimeter

步骤2:在ESP32芯片内部

在ESP32芯片内部,我们可以找到两种处理方式内核,RAMROM存储器,WiFi模块,蓝牙模块,用于加密应用程序的硬件加速模块,RTC模块以及许多外围设备。在RTC模块内部,我们可以找到一个PMU(相量测量单元),它是一种小型且低功耗的32位协处理器以及8Kbs的RAM存储器。少量的内存非常有用,因为您很快就会发现。还要注意,即使ESP32芯片的RTC内存也比Arduino Uno的内存大4倍。

WiFi模块,处理内核和蓝牙模块需要大量电流才能运行。因此,如果我们想节省电量,则必须在不使用它们时将其禁用。这就是我们现在要做的。我们将把ESP32设置为Deep – Sleep模式,在该模式下,除RTC模块外,所有功能都将禁用。有轻度睡眠模式和深度睡眠模式。在深度睡眠模式下,ESP32功耗最低。 在深度睡眠模式下仅需要0.01 mAs的电流,这就是我们今天要尝试的原因。

步骤3:ESP32深度睡眠模式

在这种模式下,如前所述,所有功能均被禁用。 CPU核心,WiFI模块,蓝牙模块,外围设备等。连同CPU一样,芯片的主内存也被禁用,因此存储在内存中的所有内容都会永远丢失。处于深度睡眠模式时,唯一仍可以工作的模块是RTC模块,超低功耗协处理器及其内存!因此,如果将要在深度睡眠模式下生存的数据保存到RTC内存中,则在唤醒芯片后它们将保持完整。

有三种方法可以唤醒芯片。我们可以使用计时器,GPIO引脚或协处理器。

今天,我们将学习如何使用计时器在特定时间后唤醒芯片。让我们看一个示例。

步骤4:深度睡眠示例

我已将两个LED连接到此ESP32板。 ESP32开机时,黄色LED会亮三秒钟,然后进入深度睡眠模式3秒钟。唤醒后,它会点亮绿色指示灯3秒钟,然后返回睡眠状态。从现在开始,它只会闪烁绿色LED,因此该芯片记住这不是它第一次启动,因为我们正在使用RTC内存来存储整数值。

让我们快速看一下。在这个项目的代码。如您所见,代码非常简单。为了使ESP32进入深度睡眠模式,我们只需要两行代码。

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);

esp_deep_sleep_start();

我们使用esp_sleep_enable_timer_wakeup函数启用计时器,输入以秒为单位的睡眠时间,然后调用esp_deep_sleep_start函数。而已!

#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */

#define TIME_TO_SLEEP 3 /* Time ESP32 will go to sleep (in seconds) */

RTC_DATA_ATTR int bootCount = 0;

尽管与执行代码有一点不同。当我们使用深度睡眠功能时,ESP32每次唤醒时,都会再次执行设置功能。从不调用循环函数。所有变量值都会丢失,除非我们使用此前缀将它们保存在RTC内存中。在此示例中,我将bootCount int变量保存到RTC内存中,以便程序知道它是否是第一次运行并打开正确的LED。像往常一样,您可以找到此示例附带的示例代码。

步骤5:功耗

现在让我们看看该板的功耗。 ESP32处于活动模式时,会从电池汲取约60mAs的电流。 ESP32处于深度睡眠模式时,它将消耗约19mAs的电流!这大大降低了电流消耗,但是该芯片的创建者声称在深度睡眠模式下需要0.01mA的电流。我们的设置有什么问题?

罪魁祸首是主板。我使用的是DOIT ESP32板,这是大约一年前上市的第一块ESP32板。电路板的设计并未针对功耗进行优化,因此,即使在深度睡眠模式下,它也需要大量电流。幸运的是,那里有设计更好的ESP32板。

例如,DFrobot的Firebeetle ESP32板设计得更好,当使用3.3V电源供电时,其深度睡眠电流仅为0.01mAs。如果我们使用之前使用的相同电池组为电路板供电,其输出约为4.8V,则可以看到在活动模式下的电流消耗为48mAs,而在深度睡眠模式下的电流仅为0.05mAs!印象深刻不是吗!如果使用3.3V电池或电源,我们可以进一步降低电路板的功耗。我将在以后的视频中尝试。在深度睡眠模式下,该板所需的0.05mAs电流是我在功能齐全的ESP32板(具有USB至串行驱动器,调节器和电池电路)中消耗的最低电流。

如果您发现任何板子都能比Firebeetle板子取得更好的效果,请在下面的评论栏中告诉我,我想尝试一下。

Firebeetle ESP32板子的功耗在深度睡眠模式非常低。如果使用4节AA充电电池供电,则每天需要大约1.44毫安时。因此,从理论上讲,如果将其置于深度睡眠模式,则这种具有2.500mAhs容量的移动电源可以为该板供电近5年!当然,我们将不时唤醒电路板以执行需要更多功率的任务,因此电池寿命将大大减少。

步骤6:深入研究睡眠错误

不幸的是,ESP32的软件和硬件尚未成熟。使用深度睡眠模式时,我尝试在两个ESP32板上都出现了一个软件或硬件错误。随机唤醒后,ESP32会进入睡眠状态,并且不会再次唤醒。此错误可能在几次唤醒后或100次之后发生。它只是随机的。

我发现的一个简单解决方案是在唤醒后和从RTC内存读取之前添加500ms的小延迟。这样,项目就可以正常工作,但是,当然,我们要付出的代价是减少了电池寿命,因为每次唤醒时芯片处于活动模式的时间要长500ms。我认为此错误将在不久的将来通过新的软件或硬件修复得到解决。

void setup(){

pinMode(GREEN_LED_PIN,OUTPUT);

pinMode(YELLOW_LED_PIN,OUTPUT);

delay(500);

if(bootCount == 0) //Run this only the first time

{

digitalWrite(YELLOW_LED_PIN,HIGH);

bootCount = bootCount+1;

}else

{

digitalWrite(GREEN_LED_PIN,HIGH);

}

delay(3000);

digitalWrite(GREEN_LED_PIN,LOW);

digitalWrite(YELLOW_LED_PIN,LOW);

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);

esp_deep_sleep_start();

}

步骤7:最终想法

我已经在项目中使用了深度睡眠功能。您还记得几周前我发布的In-Paper电子书温度计吗?不更新时需要60mAs的电流。现在,使用芯片的深度睡眠功能,我设法将电流消耗降低到0.43mAs。因此,有了这种移动电源,我们现在的电池寿命估计约为3个月。很好,不是吗?

但是我认为还有很多改进的余地。我的电路中某处有小电流泄漏。如果我们可以减少它,我们可以使该项目用电池运行一年以上!我认为这太神奇了!我们现在有了一块功能非常强大的板,功耗非常低。最好的是,我们要做的就是利用这一点,只需使用两行代码!我将在以后的项目中大量使用此功能。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15807
收藏 人收藏

    评论

    相关推荐

    ESP32-C2在小魔方遥控器的应用

    我们经常提起的ESP32-C3和ESP32-S3,ESP32-C2感觉话题度没有那么多,但其应用上不可小觑。今天小启就跟大家讲讲ESP32-C2在小魔方遥控器的应用。1射频性能拉满,成
    的头像 发表于 01-13 08:03 257次阅读
    <b class='flag-5'>ESP32</b>-C2在小魔方遥控器的应用

    ESP32-PICO系列技术规格书

    ESP32-PICO 系列是基于 ESP32 芯片 的系统级封装 (SiP) 产品。ESP32-PICO 系列产品包括 ESP32-PICO-D4、
    发表于 12-12 16:56 0次下载
    <b class='flag-5'>ESP32</b>-PICO系列技术规格书

    esp32s3使用多串口

    esp32s3使用多串口 我按照别人博客中设置串口2,串口打印有问题,因为没有看到esp32s3 多串口,就总结了一下自己的经验 下图为esp32的引脚图 下图为esp32s3的引脚
    的头像 发表于 11-06 11:29 1419次阅读
    <b class='flag-5'>esp32</b>s3使用多串口

    ESP32学习笔记:双核

    今天我们来说说ESP32 for Arduino 的双核。
    的头像 发表于 07-15 16:16 3023次阅读
    <b class='flag-5'>ESP32</b>学习笔记:双核

    ESP32ESP32通过Internet进行通信

    电子发烧友网站提供《ESP32ESP32通过Internet进行通信.zip》资料免费下载
    发表于 06-15 09:58 2次下载
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通过Internet进行通信

    [esp32教程] 5、UART使用

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 06-13 09:04 4363次阅读
    [<b class='flag-5'>esp32</b>教程] 5、UART使用

    NodeMCU 12E esp 8266深度睡眠的功耗问题求解

    我正在使用 NodeMCU 12E esp8266,我连接到 Wifi,在 GPIO 2 上测量温度,将它发送到数据库,然后我用这个命令 ESP.deepSleep(1200e6) 进入睡眠状态
    发表于 06-07 06:28

    [esp32教程] 4、LEDC使用

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 06-03 09:39 3127次阅读
    [<b class='flag-5'>esp32</b>教程] 4、LEDC使用

    ESP8266深度睡眠失败的原因?

    我无法让裸露的 ESP8266EX 进入深度睡眠。它总是消耗大约 8-9 mA(不是 uA)。设置最少,仅 GND、VCC 外部连接,REST 和 GPIO16 被缩短。RX 和 TX 连接
    发表于 05-26 11:52

    ESP8266无法从深度睡眠中唤醒是怎么回事?如何解决?

    前段时间我买了 2 个“HiLetgo”ESP8266 (ESP-12E),其中一个用于带有一堆传感器的小型太阳能气象站。 我设置了 10 分钟深度睡眠,效果很好。 另一个
    发表于 05-25 14:34

    ESP8266深度睡眠中的引脚行为的相关疑问求解

    时,几秒钟后该引脚上的电平会升高。该设备内部通过电阻将此输入连接到高电平,因此它确实需要“有源”接地。 8266(或 ESP32-S2,作为该项目的替代板)上是否有任何引脚 - 即使在深度睡眠中也保持
    发表于 05-25 08:32

    ESP8266 NodeMCU让ESP进入深度睡眠结果并不令人满意怎么解决?

    即使经过几天的谷歌搜索和测试,我仍然无法独自解决一个问题。 我试图让我的 ESP 进入深度睡眠,但结果并不令人满意。所以我有这个传统的测量、发送和睡眠程序。在我执行
    发表于 05-15 08:00

    ESP-01S从深度睡眠中醒来的问题如何解决?

    我正在尝试使用 Arduino IDE 使用 ESP8266 芯片对模块进行编程。到目前为止,我已经尝试过 ESP-01 模块,我只是想对 ESP-01S 进行编程。我遇到了这个模块从深度
    发表于 05-12 06:44

    [esp32教程]2、按键中断

    基于Ubuntu,利用esp-idf进行esp32的教学
    的头像 发表于 05-05 09:04 2205次阅读
    [<b class='flag-5'>esp32</b>教程]2、按键中断

    [esp32教程]1、点灯之术

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 04-30 18:11 2432次阅读
    [<b class='flag-5'>esp32</b>教程]1、点灯之术