随着物联网革命每天都在蓬勃发展,连接设备的数量正在迅速增加。将来,大多数设备将相互连接并进行实时通信。这些设备面临的问题之一是功耗。对于任何物联网设备和物联网项目,此功耗因素都是至关重要的决定性因素之一。
我们知道ESP8266是构建任何IoT项目的最受欢迎的模块之一,因此在本文中,我们了解了在任何IoT应用中使用ESP8266时如何节省功耗。在这里,我们每隔15秒将LM35温度传感器数据上传到ThingSpeak云中,在那15秒内ESP8266保持在DeepSleep模式下以节省电量
最小化功耗的不同方法
有多种方法可以优化嵌入式和IoT设备的功耗。优化可以在硬件和软件上完成。有时我们无法优化硬件组件以降低功耗,但是可以肯定的是,我们可以通过更改和优化代码指令和功能来在软件方面做到这一点。不仅如此,开发人员还可以修改时钟频率以减少微控制器的功耗。我们可以编写固件来使硬件在没有数据交换时休眠,并在特定间隔内执行定义的任务。在睡眠模式下,连接的硬件消耗的功率非常少,因此电池可以使用很长时间。如果您想了解有关功耗技术的更多信息,还可以阅读《最小化微控制器中的功耗》。
ESP8266模块是使用最广泛的Wi-Fi模块,具有许多小尺寸功能,具有包括睡眠模式在内的不同模式,可以通过对硬件和软件进行一些修改来访问这些模式。要了解有关ESP8266的更多信息,您可以使用ESP826 Wi-Fi模块检查我们基于IoT的项目,下面列出其中一些项目:
- ESP8266 NodeMCU与Atmega16微控制器接口以发送电子邮件
- 使用NodeMCU ESP8266将温度和湿度传感器数据发送到Firebase实时数据库
- 使用Google Firebase控制台和ESP8266 NodeMCU的物联网控制LED
在这里,我们将说明ESP8266中可用的不同睡眠模式,并通过使用深度睡眠模式定期将温度数据发送到Thingspeak服务器来演示它们。
所需组件
- ESP8266 Wi-Fi模块
- LM35温度传感器
- 跳线
ESP8266的睡眠模式类型
Esp8266模块在以下模式下运行:
- 主动模式:在此模式下,整个芯片都将加电,并且芯片可以接收,传输数据。显然,这是最耗电的模式。
- 调制解调器睡眠模式:在此模式下,CPU处于运行状态,并且Wi-Fi无线电已禁用。此模式可用于需要CPU工作的应用中,例如PWM。它使Wi-Fi调制解调器电路在与Wi-Fi AP(接入点)连接时关闭,而没有数据传输以优化功耗。
- 浅睡眠模式:在此模式下,CPU和所有外围设备均暂停。任何唤醒(例如外部中断)都将唤醒芯片。在不进行数据传输的情况下,可以关闭Wi-Fi调制解调器电路,并挂起CPU以节省功耗。
- 深度睡眠模式:在该模式下,仅RTC起作用,并且芯片的所有其他组件均断电。此模式在长时间间隔后传输数据时很有用。
将LM35温度传感器连接到NodeMCU的A0引脚。
当ESP模块的RST引脚具有HIGH时,它处于运行状态。一旦它在RST引脚上接收到LOW信号,ESP就重新启动。
使用深度睡眠模式设置定时器,一旦定时器结束,D0引脚将LOW信号发送到RST引脚,模块将通过重启将其唤醒。
现在,硬件已准备就绪且配置正确。温度读数将在Thingspeak服务器上发送。为此,请通过以下步骤在Thingspeak.com上创建一个帐户并创建一个频道。
现在,复制Write API密钥。它将在ESP代码中使用。
ESP8266深度睡眠模式编程
易于使用的Arduino IDE将用于对ESP8266模块进行编程。确保已安装所有ESP8266开发板文件。
首先包括所有必需的重要库。
#包括
一旦包括所有用于访问功能的库,然后分配API写密钥,配置您的Wi-Fi名称和密码。然后声明所有变量,以备将来存储数据的地方使用。
字符串apiWritekey =“ *************”; //在此处用您的THINGSPEAK WRITEAPI密钥替换 char ssid =“ ******”; //您的wifi SSID名称 char密码=“ ******”; // 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)) { 字符串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,然后获取温度读数并将其转换为摄氏温度。
void setup(){ Serial.begin(115200); Serial.println(“设备处于唤醒模式”); connect1(); 整数值= AnalogRead(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云上,然后模块进入深度睡眠模式。
到此为止,ESP8266模组的使用深度睡眠教程已经完成。深度睡眠是非常重要的功能,它已包含在大多数设备中。您可以参考本教程并将此方法应用于不同的项目。如有任何疑问或建议,请在下面写下并评论。您也可以访问我们的论坛。