减少ESP8266与传感器自主工作时的功耗

五年多来,基于ESP8266 SOC(ESP8285)的WiFi模块已成功用于独立设备中,以通过WiFi传输接收到的数据来测量物体和环境的各种参数。



“如何将wifi模块的功耗减少十倍或更多倍”一文中,他谈到了一些减少此类模块的WiFI会话活动时间的方法,这些方法可以显着减少数据传输期间的能耗。在这种情况下,短消息传输会话的典型时间可以从1-4秒减少到0.12-0.3秒。



但是,在具有慢速传感器或传感器数量众多的设备中,从传感器获取信息的时间会大大增加。在这种情况下,轮询传感器时的能耗与通过WiFi进行数据传输的能耗相当。



同时,如果传感器监控的参数没有显着变化,或者可以自主使用测量结果,则无需通过WiFi传输数据。例如,如果测得的物体温度保持不变,则无需传输其值,从而节省了WiFi会话的能量。



此外,基于ESP8266的温度测量模块可以定期切换到深度睡眠模式,此时电流消耗小于20μA。醒来后,模块将读取传感器读数,并将这些读数与之前的数据进行比较。如果读数变化不大或在允许的工作温度范围内,则模块将切换回睡眠模式,而无需进行通信会话。

如果传感器的读数明显变化或超出了允许的时间间隔,则模块通过WiFi发送数据和/或警报,并切换到深度睡眠模式。



以最简单的形式(通常在大多数用户中发现),模块会在WiFi调制解调器打开的情况下唤醒。在这种情况下,传感器轮询期间模块的电流消耗为70 mA。根据调查结果,如果不需要进行任何传输,则不活动的WiFi调制解调器的能耗将过多。



您可以采取不同的操作:当模块退出睡眠模式时,在轮询传感器时关闭WiFi调制解调器,则电流消耗为15mA,与传感器一起使用时,可以节省大约5倍的能量。



但是,有一个问题,那就是禁用现有的SDK工具中的WiFi模块将导致需要进行数据传输时完全恢复与接入点的连接。通常,这会将连接时间增加到1秒或更长,而不是0.3秒或更短。因此,当WiFi连接恢复用于数据传输时,通过在传感器轮询期间关闭WiFi调制解调器而关闭的功耗的减少将被额外的功耗所抵消。



作为此问题的解决方案,我提出了以下禁用和启用WiFi调制解调器的方法。此方法不更改调制解调器的参数,特别是允许您将连接的参数保存到接入点。



, void user_pre_init(void), NONOS SDK, 3.0, 0x60000704 . WiFi , 15 .

, WiFi.



, 0x60000704. , WiFi .



WiFi SDK wifi_get_opmode(), / . , , WiFi .



:



uint32 *RT= (uint32_t *)0x60000700;
void  user_pre_init(void)
{
    uint32 xRT=RT[4]; RT[4]=0;
//         
//   ,   :
   RT[4]=xRT;   
}


:

.



WiFi .



UDP.



图片



...



在下一篇文章中,我将告诉您如何使用待机模式下的传感器来组织ESP8266模块的操作,以从计时器或GPIO中断,但在WiFi调制解调器关闭的情况下,其电流消耗为2 mA而不是15 mA(打开时为70 mA)。因此,与传感器一起使用时,ESP8266的功耗减少了10倍以上。




All Articles