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

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

3天内不再提示

如何在任何物联网应用中使用ESP8266来节省电力

科技观察员 来源:circuitdigest 作者:Rishabh Jain 2022-09-06 15:37 次阅读

随着物联网革命每天都在蓬勃发展,连接设备的数量正在迅速增加。未来,大部分设备将相互连接并实时通信。这些设备面临的问题之一是功耗。这个功耗因素是任何物联网设备和物联网项目的关键和决定性因素之一。

众所周知,ESP8266 是构建任何物联网项目的最受欢迎的模块之一,因此在本文中,我们将了解如何在任何物联网应用中使用 ESP8266 来节省电力。在这里,我们每隔 15 秒将 LM35 温度传感器数据上传到 ThingSpeak 云,在这 15 秒内,ESP8266 保持在 DeepSleep 模式以节省电量

降低功耗的不同方法

有几种方法可以优化嵌入式和物联网设备的功耗。可以在硬件和软件上进行优化。有时我们无法优化硬件组件以降低功耗,但我们可以通过更改和优化代码指令和功能在软件方面做到这一点。不仅如此,开发人员还可以修改时钟频率以降低微控制器功耗。

我们可以编写一个固件,让硬件在没有数据交换时休眠,并在特定的时间间隔内执行定义的任务。在睡眠模式下,连接的硬件消耗的电量非常少,因此电池可以持续很长时间。如果您想了解有关功耗技术的更多信息,还可以阅读微控制器中的最小化功耗。

ESP8266 模块是使用最广泛的 Wi-Fi 模块,具有许多小尺寸的功能,具有不同的模式,包括睡眠模式,并且可以通过对硬件和软件进行一些修改来访问这些模式。

在这里,我们将解释ESP8266 中可用的不同睡眠模式,并通过使用深度睡眠模式定期向Thingspeak 服务器发送温度数据来演示它们。

所需组件

ESP8266 Wi-Fi 模块

LM35温度传感器

跳线

ESP8266 中的睡眠模式类型

Esp8266 模块工作在以下模式:

主动模式:在该模式下,整个芯片上电,芯片可以接收、发送数据。显然,这是最耗电的模式。

调制解调器睡眠模式:在此模式下,CPU 处于运行状态,Wi-Fi 无线电被禁用。此模式可用于需要 CPU 工作的应用中,如PWM中。它使 Wi-Fi Modem 电路在与 Wi-Fi AP(接入点)连接时关闭,没有数据传输,以优化功耗。

Light-sleep 模式:在此模式下,CPU 和所有外设都处于暂停状态。外部中断等任何唤醒都会唤醒芯片。在没有数据传输的情况下,可以关闭 Wi-Fi Modem 电路并暂停 CPU 以节省功耗。

深度睡眠模式:在此模式下,只有RTC正常工作,芯片的所有其他组件都断电。此模式在数据在较长时间间隔后传输的情况下很有用。

pYYBAGMW-EuAdyzWAADgTxuBLrs136.png

ESP8266 中的深度睡眠模式

Modem-sleep 和 Light-sleep 在您需要让 ESP8266 模块运行而某些功能关闭时很有用。但是,如果您需要一些严格的电源控制,请选择深度睡眠模式。整体平均电流小于1mA。在 2.5V 时,电流要求仅为 20 μA。

使用深度睡眠模式的步骤:

将模块与 Wi-Fi AP 连接

执行读取传感器值、发布 MQTT 消息等任务。

休眠定义的微秒数

再次重复上述过程

睡眠时间以微秒为单位定义。根据 ESP8266 SDK,您只能休眠 4,294,967,295 µs,即约 71 分钟。

设置 ESP8266 模块:

将 ESP8266 的 RST 引脚与 GPIO 16 即 D0 引脚连接。GPIO 16 是具有 WAKE 功能的重要引脚。

poYBAGMW-EeATRGDAACkBAwfhWo583.png

将LM35 温度传感器连接到 NodeMCU 的 A0 引脚。

poYBAGMW-EOAUr-YAAS6eExRF64818.png

当 ESP 模块的 RST 引脚为高电平时,它处于运行状态。一旦它在 RST 引脚上接收到 LOW 信号,ESP 就会重新启动。

使用深度睡眠模式设置定时器,一旦定时器结束,D0 引脚向 RST 引脚发送 LOW 信号,模块将通过重启唤醒。

现在,硬件已经准备就绪并且配置良好。温度读数将在 Thingspeak 服务器上发送。为此,请在 thingspeak.com 上创建一个帐户,并通过以下步骤创建一个频道。

现在,复制 Write API 密钥。这将在 ESP 代码中使用。

pYYBAGMW-D-ALWBeAAC4a5WwRwA643.png

ESP8266 深度睡眠模式编程

首先包括所需的所有重要库。

#include 

一旦包含所有用于访问函数的库,然后分配 API 写入密钥,配置您的 Wi-Fi 名称和密码。然后声明所有变量以供进一步使用要存储数据的位置。

字符串 apiWritekey = "*************"; // 在此处替换为您的 THINGSPEAK WRITEAPI 密钥
char ssid[] = "******"; // 你的 wifi SSID 名称
char password[] = "******" ;// wifi 密码

现在,使用wifi.begin()函数将模块连接到 Wi-Fi 网络,然后使用 while 循环不断检查直到模块没有连接到 Wi-Fi。

void connect1() { 
  WiFi.disconnect(); 
  延迟(10);
  WiFi.begin(ssid, 密码); 
  而(WiFi.status()!= WL_CONNECTED){

制作另一个函数将数据发送到 thingspeak 服务器。在这里,将发送一个字符串,其中包含 API 写入密钥、字段编号和必须发送的数据。然后使用 client.print() 函数发送这个字符串。

void data() { 
  if (client.connect(server,80)) 
  {   
    String tsData = apiWritekey; 
           tsData +="&field1="; 
           tsData += String(tempF); 
           tsData += "\r\n\r\n"; 
     client.print("POST /update HTTP/1.1\n"); 
     client.print("主机:api.thingspeak.com\n");

调用 connect1 函数,该函数将调用该函数来连接 Wi-Fi,然后读取温度并将其转换为摄氏度。

无效设置() { 
  Serial.begin(115200);
  Serial.println("设备处于唤醒模式"); 
  连接1();
  int 值 = 模拟读取(A0);
  浮动电压=(值/1024.0)*5.0;      
  tempC = 伏*100.0;             

现在,调用 data() 函数将数据上传到 thingspeak 云上。最后,调用的重要函数是 ESP.deepSleep();这将使模块在定义的时间间隔内休眠,以微秒为单位。

数据(); 
Serial.println("深度睡眠 15 秒"); 
ESP.deepSleep(15e6);

循环功能将保持为空,因为所有任务都必须执行一次,然后在定义的时间间隔后重置模块。

教程末尾提供了工作视频和完整代码。上传 ESP8266 模块中的代码。上传程序前先拔掉RST和D0的连接线,否则会报错。

在 ESP8266 中测试 DeepSleep

上传程序后,您会看到温度读数每 15 秒上传到 ThingSpeak 云,然后模块进入深度睡眠模式。

pYYBAGMW-DmAZbnqAAD71Irl1lU739.png
// esp8266 deepsleep

#include

String apiWritekey = "*************";

字符 ssid[] = "XXXXXXXXXX"; // 输入你的 wifi 家庭路由器 ssid

字符密码[] = "XXXXXXXXXX" ; // 输入你的 wifi 家庭路由器 ssid

char server[] = "api.thingspeak.com";

双温度F;

双温度C;

WiFiClient客户端;

void connect1() {

WiFi.disconnect();

延迟(10);

Serial.print("正在连接");

序列号.println(ssid);

WiFi.begin(ssid, 密码);

而(WiFi.status()!= WL_CONNECTED){

延迟(500);

Serial.print(".");

}

Serial.println("");

Serial.print("NodeMcu 连接到 wifi...");

}



void data() {

if (client.connect(server,80))

{

String Data = apiWritekey;

数据 +="&field1=";

数据 += 字符串(tempF);

数据 += "\r\n\r\n";



client.print("POST /update HTTP/1.1\n");

client.print("主机:api.thingspeak.com\n");

client.print("连接:关闭\n");

client.print("X-THINGSPEAKAPIKEY: "+apiWritekey+"\n");

client.print("Content-Type: application/x-www-form-urlencoded\n");

client.print("内容长度:");

client.print(Data.length());

client.print("\n\n");

客户端.打印(数据);

Serial.println("上传到 Thingspeak 服务器....");

}

client.stop();

}

void setup() {

Serial.begin(115200);

Serial.println("设备处于唤醒模式");

while (!Serial) { }

connect1();

int 值 = 模拟读取(A0);

浮动电压=(值/1024.0)*5.0;//转换为伏特

tempC = volts*100.0; //转换为摄氏温度

Serial.print("Temperature C: ");

Serial.println(tempC);

数据();

Serial.println("深度睡眠 15 秒");

ESP.deepSleep(15e6);

}


无效循环(){

}

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

    关注

    2900

    文章

    43997

    浏览量

    369888
  • 睡眠模式
    +关注

    关注

    0

    文章

    9

    浏览量

    6588
  • Wi-Fi模块
    +关注

    关注

    0

    文章

    33

    浏览量

    11118
  • ESP8266
    +关注

    关注

    50

    文章

    962

    浏览量

    44744
收藏 人收藏

    评论

    相关推荐

    何在联网应用中使ESP8266时降低功耗

    本文中,我们以15秒的间隔将LM35温度传感器数据上传到ThingSpeak云,在这15秒内,ESP8266将处于深度睡眠(Deep Sleep)模式以降低功耗。
    发表于 11-06 15:59 8596次阅读

    如何对ESP8266进行降频?

    ,这对于我的应用程序来说太多了。 我想知道是否有可能对 esp8266 进行降频以节省电量。我知道你可以把它超频到160MHz,但是有没有可能让它在40MHz或20MHz下运行。 我在网上找不到任何这方面的信息
    发表于 07-19 10:55

    使用esp8266实现STM32联网(最简单USART方法)

    到电脑上的java程序 这一篇 esp8266与STM32连接,电脑通过STM32配置esp8266实现联网发送数据具体流程如下图 2= esp8266怎么和STM32连接(引脚连
    发表于 11-22 11:51 1.2w次阅读

    如何使用PROGMEM节省ESP8266EX的RAM空间

    本文介绍了在Arduino IDE的平台下如何使用PROGMEM节省ESP8266EX的RAM空间。PROGMEM可以用来将不变的、只读的数据存入Flash中。
    发表于 03-15 08:00 5次下载
    如何使用PROGMEM<b class='flag-5'>节省</b><b class='flag-5'>ESP8266</b>EX的RAM空间

    esp8266简介与esp8266引脚

    /IP协议中,由于这个任意微控制器可以与任何Wi-Fi网络连接。它有监督的任何其他设备的电源,也可以很容易地下放Wi-Fi网络与其它系统连接。它有片上变异的巨量这是好的为最小的外部电路。该模块是一个极其成本效益的板。
    发表于 11-27 11:39 25.2w次阅读
    <b class='flag-5'>esp8266</b>简介与<b class='flag-5'>esp8266</b>引脚

    ESP8266-NodeMCU

    ²C1.8 SPI1.9 ESP8266引脚功能一览ESP8266-NodeMCU引脚功能1.1 可用引脚  ESP8266芯片有17个GPIO引脚(GPIO0~GPIO16)。这些引脚中的GPIO6~GPIO 11被用于连接开
    发表于 10-25 16:51 43次下载
    <b class='flag-5'>ESP8266</b>-NodeMCU

    【物联网】基础篇 ESP8266-NodeMCU学习一

    【物联网】基础篇 ESP8266-NodeMCU学习一本篇文章:本篇文章主要是关于ESP8266-NodeMCU的学习。正文如下:一、ESP8266-NodeMCUNodeMCU是一个
    发表于 10-26 14:21 16次下载
    【物<b class='flag-5'>联网</b>】基础篇 <b class='flag-5'>ESP8266</b>-NodeMCU学习一

    NodeMcu ESP8266 无需任何基础 制作wifi小车

    NodeMcu ESP8266 无需任何基础 制作wifi小车 简介硬件连线代码在手机上下载 TCP 调试APP下载简介使用arduino编译(代码简单)所需工具:Arduino (需要安装
    发表于 10-28 10:21 39次下载
    NodeMcu <b class='flag-5'>ESP8266</b> 无需<b class='flag-5'>任何</b>基础 制作wifi小车

    ESP8266

    优点1.性能稳定ESP8266EX 的工作温度范围大,且能够保持稳定的性能,能适应各种操作环境。2.低功耗ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了
    发表于 11-07 10:36 26次下载
    <b class='flag-5'>ESP8266</b>

    如何使用ESP8266制作可配置的Web服务器

    在这个项目中,我们首先研究如何在 Arduino IDE 中安装 ESP8266 插件,然后使用 ESP8266 制作可配置的 Web 服务器。
    的头像 发表于 05-10 15:18 1.3w次阅读
    如何使用<b class='flag-5'>ESP8266</b>制作可配置的Web服务器

    何在ESP32/ESP8266上使用MicroPython

    在本教程中,我们将了解 MicroPython,它与 Python 有何不同,以及如何在 ESP32/ESP8266 上开始使用 MicroPython。此外,我们将看到一个 LED 闪烁的示例项目
    发表于 08-19 15:09 1.4w次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>上使用MicroPython

    ESP8266联网开源分享

    电子发烧友网站提供《ESP8266联网开源分享.zip》资料免费下载
    发表于 12-06 14:45 4次下载
    <b class='flag-5'>ESP8266</b>物<b class='flag-5'>联网</b>开源分享

    使用ESP8266 DIY控制任何家用电器

    电子发烧友网站提供《使用ESP8266 DIY控制任何家用电器.zip》资料免费下载
    发表于 06-27 14:55 0次下载
    使用<b class='flag-5'>ESP8266</b> DIY控制<b class='flag-5'>任何</b>家用电器

    ESP8266联网茶壶

    电子发烧友网站提供《ESP8266联网茶壶.zip》资料免费下载
    发表于 07-10 16:45 0次下载
    <b class='flag-5'>ESP8266</b>物<b class='flag-5'>联网</b>茶壶

    何在汽车CAN应用中使用负边缘触发触发器节省电力

    电子发烧友网站提供《如何在汽车CAN应用中使用负边缘触发触发器节省电力.pdf》资料免费下载
    发表于 09-13 10:06 0次下载
    如<b class='flag-5'>何在</b>汽车CAN应用<b class='flag-5'>中使</b>用负边缘触发触发器<b class='flag-5'>节省电力</b>