物联网中的设备能耗管理是一项具有挑战性的任务, 设备可以位于远程的任何一个地方且必须需要电能方可工作.
一, 如何实现物联网设备能耗管理
物联网中的设备能耗管理涉及与设计过程相关的所有环节, 并且分析设备的行为如何影响能耗非常重要. 电池容量和设备行为是两个最重要的方面. 通常, 我们可以从三个不同的区域来模拟物联网设备的功耗:
微控制器
无线电操作
传感器和执行器
典型的物联网设备使用场景是:
从传感器获取数据
发送和接收数据
控制执行器
通常, IoT 设备使用一个或多个传感器来获取与环境相关的信息. 获取的数据在本地或远程使用以做出决策. 使用传感器获取该信息, 并且每个传感器具有特定的功耗. 因此, 选择相适应的传感器以优化能耗管理就尤为重要.
物联网设备在运行期间可以远程发送和接收数据. 通常, 几个物联网设备连接到物联网网关, 该网关收集此类信息并将其发送到云端. 从电源管理的角度来看, 发送和接收操作是能耗最大的任务之一, 因为这个过程涉及无线电连接 (蜂窝, Wi-Fi, 蓝牙等).
最后, 在本地或远程使用某些特定业务逻辑, IoT 设备可以控制一个或多个执行器.
微控制器控制所有操作, 是设备的大脑, 为了工作, 它需要电源.
二, 在物联网中实施能耗管理
我们使用 Arduino,ESP8266 和其他兼容设备开发 IoT 应用程序的最简单方法是实现该 loop() 方法中的代码 . 例如, 当我们必须以特定的时间间隔从传感器获取数据时, 只需添加 delay(..) 方法, 指定设备在再次启动之前应等待多长时间并重复相同的任务. 当我们考虑电源管理方面时, 这种方法并不是最好的方法. 我们可以通过不同的方式来获得更好的结果.
ESP8266 有四种不同的模式可以 "休眠" 或保存电池:
- No sleep
- Modem sleep
- Light sleep
- Deep-sleep
- 1. No sleep
这是使用此设备的最低效方式, 因为它始终在线.
2. Modem sleep
当 ESP8266 连接到 Wi-Fi 时才会启用此模式. 在该模式下, ESP8266 在两个 DTIM 信标间隔之间关闭 Wi-Fi 模块. ESP8266 在下一个 Beacon 之前再次打开 Wi-Fi 模块. 当需要保持 CPU 开启时, 使用睡眠模式.
3. Light sleep
这种模式和 Modem sleep 模式非常相似, 但在该模式下, ESP8266 暂停 CPU 并关闭时钟. 此模式比以前的模式更有效. 在 Light sleep 模式下, 应使用 GPIO 引脚唤醒 ESP8266.
4. Deep-sleep
在此模式下, 除 RTC(实时时钟) 外, 一切都将关闭, 因此 ESP8266 可以定期打开. 这是最有效的模式. 深度睡眠模式可用于设备应以特定间隔发送数据的情况. 这是使用传感器的应用程序的示例. 应用程序读取传感器数据, 发送值并进入深度睡眠模式.
三, 如何在 ESP8266 中使用能耗管理来降低功耗
小隐用一个简单的例子来描述如何使用深度睡眠模式来处理物联网中的能耗管理. 假设我们的应用程序必须读取温度并将其发送到远程 IoT 平台. 应用程序结构则必须是:
从传感器读取数据
发送数据
进入深度睡眠模式预定义的时间间隔
从第一步开始重复
如何在 ESP8266 中启用深度睡眠模式:
第一步是启用深度睡眠模式. 如图:
在这种情况下, 我们将引脚 D0 连接到 RST. 将代码上传到 ESP8266 时, 避免将 D0 连接到 RST.
代码如下:
- #include
- const char* WIFI_SSID="---";
- const char* WIFI_PWD="----";
- void setup() {
- Serial.begin(9600);
- connectToWifi();
- // send data
- Serial.println("Going to deep sleep for 15 sec");
- ESP.deepSleep(15e6);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- }
- void connectToWifi() {
- Serial.print("Connecting to Wifi:");
- Serial.println(WIFI_SSID);
- Wi-Fi.begin(WIFI_SSID, WIFI_PWD);
- while (Wi-Fi.status() != WL_CONNECTED) {
- if (Wi-Fi.status() == WL_CONNECT_FAILED) {
- Serial.println("Error during WiFi connection-");
- delay(10000);
- }
- delay(1000);
- }
- Serial.print("Wifi IP:");
- Serial.println(Wi-Fi.localIP());
- }
如此, ESP8266 进入深度睡眠模式 15 秒. 当它醒来时, 它会从头开始, 连接到 Wi-Fi, 依此类推. 可以使用这种方法使用按钮启动它来唤醒 ESP8266.
结语: 希望此文能帮助大家认识到能耗管理在物联网设备管理中的重要性.
来源: http://iot.51cto.com/art/201902/592480.htm