通过使用不同的省电模式,您可以将ESP8266的功耗降低64%。
如果您打算使用电池作为下一个项目的电源,请阅读以下文章,其中介绍了ESP8266的不同电源模式,包括调制解调器睡眠、轻度睡眠和深度睡眠。
您将学习如何使用每种电源模式以及可以节省多少电量。
为什么ESP8266功耗很重要? ESP8266的功耗在15µA至400mA之间,具体取决于不同的使用情况。 在使用WiFi的空闲状态下,NodeMCU V2的电流消耗约为70mA。在3.3V的工作电压下,NodeMCU V2在空闲状态下需要以下功耗: W= U * I = 3.3V * 70mA = 231mW 因此,NodeMCU每年的能耗为:E = W * 365 * 24 = 2.024 kWh 假设每千瓦时的成本约为0.34美元。如果我想用一个NodeMCU建造一个气象站,那么每年的电费将超过0.7美元,几乎是零。那么,为什么需要关注功耗呢?如何设置才能将每年的成本降至低于1美元?
如果您想建立一个室外气象站并使用电池来操作整个系统,则不必担心功耗。如果您购买了1000mAh的锂电池(工作电压:3.7V),则需要多长时间才需要更换电池组? T = 1000mAh / 70mA = 14.3小时 因此,您必须每天更换电池。只有理论上您才能使用电池的全部能量。有三个主要影响因素会缩短系统的理论寿命。
1. ESP8266的最低供电电压为2.5V 在放电期间,电池的电源电压将从3.7V降至0V。如果电源电压降到2.5V以下,ESP8266将关闭,并且不会再次打开。您必须给电池充电。因此,如果您的电池的技术规格为1000mAh,则永远不会使用完整的1000mAh。 下图显示了电池的放电曲线。首先,取决于电池,我们看到阶跃电压下降,然后是电压的近乎稳定的趋势。如果使用约70%至80%的容量,则电压会显着下降,并会降至ESP8266的工作电压以下。
2. 系统不会始终处于空闲模式。您将不得不偶尔执行一次任务,也许是开发板将数据发送到服务器。因此,将会有很短的时间间隔,其中功耗会很高。 3. 每个电池都有基于电池化学物质和电池周围温度的老化,这会随着时间的推移降低电池的可用容量。
延长电池充电时间的方法 您有两种方法可以延长电池充电时间。 1. 购买容量更大的电池。 2. 减少ESP8266微控制器的功耗。
1)让我们假设您购买的电池是6000 mAh而不是1000 mAh。您将使系统的寿命延长6倍。因此,您必须每89个小时更换一次电池,因此需要3.6天。这并不能解决电源问题。我们必须减少ESP8266的功耗。
2)让我们更深入地了解ESP8266的功耗。 ESP8266具有几种睡眠模式以及与这些模式相关的电源解决方案。总共有三种不同的睡眠模式。下表的来源是ESP8266 Espressif生产商的手册。
| 调制解调器睡眠 | 轻度睡眠 | 深度睡眠 | Wi-Fi | OFF | OFF | OFF | 系统时钟 | ON | OFF | OFF | RTC | ON | ON | ON | CPU | ON | 挂起 | OFF | 基板电流 | 15 mA | 0.4 mA | 20 uA | 平均电流DTIM = 1 | 16.2 mA | 1.8 mA |
| 平均电流DTIM = 2 | 15.4 mA | 0.9 mA |
| 平均电流DTIM = 3 | 15.2 mA | 0.55 mA |
|
请记住,这些是直接从数据手册获得的值,我们不知道这些低值是在什么条件下测量的。因此,我创建了自己的实验来比较不同的省电模式。 NodeMCU的电源为9V恒定电压,而WeMos D1 Mini的电源为6.5V。基于这些汇总值,可以计算出以百分比为单位的功耗降低。
如果不想详细介绍,请参考下表,了解ESP8266 NodeMCU和WeMos D1 Mini的总体性能。
| ESP8266 NodeMCU | ESP8266 WeMos D1 Mini | 参考模式 | 39.58 | 37.81 | 调制解调器睡眠模式 | 35.61 (-10.02%) | 27.10 (-28.32%) | 深度睡眠 | 22.03 (-44.34%) | 13.69 (-63.80%) |
以下文章详细说明了不同的省电模式以及实验的实施和执行方式。
测量功耗模式的影响实验 在本篇文章中,我还希望测量使用不同电源模式可以节省的电流消耗。因此,我创建了两个实验: 1. 在示例程序中测量一个周期的详细电流消耗,以得知程序代码中那些步骤导致大电流消耗。 2. 测量示例多个周期的平均电流消耗,以减少异常值对测量的影响。 对于本实验,我不仅要了解不同电源模式的影响,还要了解ESP8266 NodeMCU和ESP8266 WeMos D1 Mini之间的功耗差异。因此,我对两个微控制器都进行了所有测量。
下图显示了NodeMCU和WeMos D1 Mini的硬件接线。
在图像的左侧,您可以看到微控制器与DHT22温湿度传感器模块之间的接线。该微控制器通过UART通信与NodeMCU连接,NodeMCU通过USB连接到PC,以记录测量结果并获得稳定的电源,而与被测电路无关。
为了测量电流消耗,我使用了INA219电流和电压传感器。图片右侧的ESP8266 NodeMCU通过I2C连接到INA219。 INA219串联连接到经过测试的微控制器和外部电源,ESP8266 NodeMCU的外部电源调整为9V,ESP8266 WeMos D1 Mini的外部电源调整为6.5V。
ESP8266电源模式Arduino脚本代码 您需要的第一个脚本是NodeMCU的测量脚本。如果要测量实验多个周期的平均电流消耗,则可以使用Measure_Current_Average程序,也可以是Measure_Current_Detail以仅按实验周期进行测量。
然后,此测量脚本测量下三个模式的影响。 1. 参考实验不使用电源模式。 2. 调制解调器睡眠对使用调制解调器睡眠电源模式的影响。 3. 深度睡眠对测量深度睡眠模式下的电流消耗的影响。
对于程序示例,我使用一个脚本,该脚本每10秒测量一次DHT22传感器的温度和湿度,然后通过MQTT将测量结果发送到Raspberry Pi。当然,您可以使用任何其他脚本来比较电源模式对电流消耗的影响。
ESP8266的参考测量 第一次测量不使用任何电源模式。下图显示了参考测量的一个周期。所有图片的y轴都没有单位,因为它会多次缩放,因此单位没有任何意义。但是,为了比较不同功率模式的影响,不需要任何单位。
您会看到整体上WeMos D1 Mini在一个周期内的电流消耗较低,因为在空闲状态下,NodeMCU和WeMos之间存在间隙。在程序的一个周期中,还有两个不同的时间,电流消耗达到峰值。第一次是当微控制器建立与Raspberry Pi的WiFi连接时。建立连接后,微控制器读取不需要高电流的传感器值。当温度和湿度通过MQTT发送到Raspberry Pi时,功耗第二次上升。
详细查看一个周期后,下图显示了超过65个周期的电流行为。每次测量是一个周期电流的总和。
目前对这两个微控制器在30到50之间,并且有一些异常值。从图片中我们可以看到,在大多数情况下,与WeMos D1 Mini相比,NodeMCU的电流消耗更高。但是,WeMos的功耗也可能更高。因此,我计算了两个微控制器的每个周期的平均电流,结果如下: 1. NodeMCU的平均电流消耗:39.58 2.。 WeMos D1 Mini的平均电流消耗:37.81 设定基准后,我们介绍ESP8266的不同的省电模式。对于调制解调器睡眠和深度睡眠,我计算了详细的平均功耗以比较不同的结果。
调制解调器睡眠Modem-sleep ESP8266自动访问调制解调器的睡眠模式。唤醒触发器也会自动设置。因此,您不必配置接口。
如果要将NodeMCU设置为Modem-sleep,则必须通过STA模式(站点模式)设置WiFi连接。 STA模式用于使ESP8266连接到由路由器等接入点建立的WiFi网络。 - #include "ESP8266WiFi.h"
- #include "WiFiClient.h"
- void setup() {
- Serial.begin(115200);
-
- }
- void loop() {
- WiFi.mode( WIFI_OFF );
- WiFi.forceSleepBegin();
- Serial.println("WiFi is down");
- delay(20000);
- WiFi.forceSleepWake();
- delay(1);
- // Bring up the WiFi connection
- WiFi.mode(WIFI_STA);
- WiFi.begin("XXX", "XXX");
- // Wait until the connection has been confirmed before continuing
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- // Debugging - Output the IP Address of the ESP8266
- Serial.println("WiFi connected");
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- delay(2000);
- }
复制代码
在调制解调器睡眠模式下,ESP8266通过DTIM信标机制保持与当前Wi-Fi的连接。
DTIM信标机制
信标是网络主机发送的广播传输。信标传输是周期性的,通常以传输单位(TU)的倍数设置。信标传输术语是DTIM(Delivery Traffic Indication Map)间隔。该间隔是基本信标传输间隔的倍数。
例如:如果基本信标传输间隔为100ms,DTIM间隔为2,则每隔一个信标就是一个DTIM信标。每个信标在每个信标传输中都有一个减计数器(Beacon DTIM cnt)。当计数器计数为零时,ESp8266处于调制解调器睡眠模式。如果计数器的值为0,则它是DTIM信标,并且ESP8266唤醒WiFi以接收数据。
DTIM间隔也可以大于2。DTIM间隔越大,ESO8266处于调制解调器睡眠模式并节省能量的时间就越长。
调制解调器睡眠电流测量 在了解了调制解调器休眠电源功能的工作原理之后,我们想知道节能模式如何影响实验中的电流消耗。下图显示了MQTT实验中一个周期的详细信息。
与参考测量相比,我们看到电流尖峰也将近200,因为调制解调器睡眠功能不会影响将微控制器连接到WiFi网络或通过MQTT传输传感器数据到Raspberry Pi所需的功耗。
但是我们看到的是,当发送数据时,微控制器的WiFi被关闭,因此电流消耗从参考测量的75降低到25。
在下一张图片中还可以清楚地看到总体功耗的降低,这表明与参考测量相比,调制解调器睡眠功能的多个周期的测量。
如果将ESP8266 NodeMCU的功耗与WeMos D1 Mini进行比较,我们会发现WeMos在调制解调器睡眠模式下的能耗更低,NodeMCU的平均能耗为27.10至35.61。因此,如果我们想最大程度地延长电池供电实验的寿命,那么使用调制解调器睡眠模式会产生积极影响。
轻度睡眠 轻度睡眠模式与调制解调器睡眠模式非常相似。仅有的两个区别是: 1. ESP8266系统时钟的电源 2. 内部CPU处于挂起状态
因此,开发板将不会响应来自其他硬件接口的信号和中断。 ESP8266需要从外部GPIO唤醒。唤醒过程需要少于3ms。通过GPIO唤醒ESP8266的接口为:void gpio_pin_wakeup_enable(uint32 i, GPIO_INT_TYPE intr_state);
这两个差异导致功耗从15mA大幅下降至0.4mA。
以下示例将NodeMCU连接和断开与本地WiFi的连接,并将睡眠模式设置为浅睡眠。 - void setup() {
- Serial.begin(115200);
- }
- void loop() {
- // Disable light sleep
- wifi_set_sleep_type(NONE_SLEEP_T);
- delay(2000);
- // Enable light sleep
- wifi_set_sleep_type(LIGHT_SLEEP_T);
- delay(2000);
- }
复制代码
深度睡眠 如果要使用外部电源并节省尽可能多的能量,请进入深度睡眠模式!从理论上讲,ESP8266的功耗降至20µA * 3.3V = 66µW。您的1000mAh外接电池续航时间更长。 T = 1000mAh / 20µA = 50,000h = 2083天= 5.7年 与其他两种模式不同,系统无法自动进入深度睡眠模式。用户可以调用接口函数system_deep_sleep立即启用深度睡眠。在这种模式下,芯片将关闭Wi-Fi连接和数据连接。只有RTC模块仍在工作,负责定期唤醒。
要启用深度睡眠模式,您只需要使用以下代码行:ESP.deepSleep(uint32 time_in_us);在此处定义一个时间,ESP8266从深度睡眠模式醒来的时间。深度睡眠的最大时间为4,294,967,295 µs,约为71分钟。
在定义的时间之后,ESP8266将被来自D0引脚(GPIO16)的复位脉冲唤醒,该引脚被定义为唤醒线路。因此,您必须将D0与RST物理连接。
下面图片显示了如何在深度睡眠阶段之后将D0引脚与RST连接以唤醒ESP8266 NodeMCU和WeMos D1 Mini微控制器。
深度睡眠电流测量 因为从理论上讲,ESP8266的深度睡眠模式是微控制器具有最低功耗的模式,所以我们想知道与参考示例相比功耗有多低。
下图再次详细显示了实验的一个周期。就像在调制解调器睡眠模式下一样,当微控制器建立WiFi连接并发送测量值时,功耗不会降低,但是当ESP8266进入深度睡眠模式时,电流消耗将下降到甚至更低。
当我们比较实验的多次运行时,我们看到相同的结果。
深度睡眠减少了多少的电流消耗? 与不使用电源模式相比,深度睡眠模式可将NodeMCU的ESP8266电流消耗降低至WeMos D1 Mini的ESP8266电流消耗降低64%。因此,如果您的项目取决于电池的寿命,则深度睡眠模式的使用至关重要。
重要的是,在实验中,微控制器仅进入睡眠模式10秒钟,然后在下一个周期继续循环功能。在一个真实的项目中,例如一个室外气象站,睡眠时间将是几分钟而不是几秒钟。因此,深度睡眠模式的影响将更大,从而导致更低的电流消耗。
上图中的第二个重要事实是,与NodeMCU相比,在深度睡眠模式下,WeMos再次消耗了几乎一半的电量。我认为很明显,WeMos消耗的功率更少,因为整个微控制器更小,所需的零件更少。
总结 在本文中,您学习了如何通过深度睡眠模式来延长电池供电项目的寿命。如果您计划做一个电池供电的项目,我建议将WeMos D1 Mini与深度睡眠节能模式结合使用。
希望您喜欢本篇文章,并在当前或下一个项目中使用深度睡眠模式。如有任何疑问,请随时在本帖下面进行回复。
|