隨著物聯網革命每天都在蓬勃發展,連接設備的數量正在迅速增加。將來,多數設備將實現互連并實時通信。這些設備面臨的其中一個問題就是功耗。此功耗因數是任何物聯網設備和物聯網項目的關鍵和決定性因素之一。
我們知道ESP8266是搭建任何物聯網項目最受歡迎的模塊之一,因此在本文中我們將學習如何在物聯網應用中使用ESP8266時降低功耗。本文中,我們以15秒的間隔將LM35溫度傳感器數據上傳到ThingSpeak云,在這15秒內,ESP8266將處于深度睡眠(Deep Sleep)模式以降低功耗。
最小化功耗的幾種不同方法
有幾種方法可以優化嵌入式和物聯網設備的功耗。優化可以在硬件和軟件上完成。有時我們無法優化硬件組件以降低功耗,但我們肯定可以通過更改和優化代碼指令和功能在軟件方面實現。不僅如此,開發人員還可以修改時鐘頻率以降低微控制器的功耗。
我們可以編寫固件,以便在沒有數據交換時使硬件進入休眠狀態,并在特定時間間隔內執行定義的任務。在休眠模式下,連接的硬件消耗的電量非常少,因此電池可以持續很長時間。
ESP8266模塊是使用最廣泛的Wi-Fi模塊,功能強大,具有不同的功耗模式,包括睡眠模式,這些模式可以通過硬件和軟件的一些修改來訪問。要了解有關ESP8266的更多信息,您可以使用ESP826 Wi-Fi模塊查看論壇中其他一些基于物聯網的項目,其中一些列表如下:
●? ??Atmega16微控制器連接ESP8266 NodeMCU實現發送電子郵件
●? ??使用ESP8266和Arduino的基于物聯網的患者監護系統
●? ??如何使用Arduino、ESP8266和氣體傳感器制作物聯網煙霧探測系統
本文中,我們將介紹ESP8266中可用的一些不同睡眠模式,并通過使用深度睡眠模式定期向Thingspeak服務器發送溫度數據來演示這些睡眠模式。
需要的組件
●? ? ESP8266 Wi-Fi模塊
●? ? LM35溫度傳感器
●? ? 跳線
ESP8266中的睡眠模式類型
ESP8266模塊可以在以下模式運行:
1.? ?活動模式:在此模式下,整個芯片上電,芯片可以接收、傳輸數據。顯然,這是耗電量最大的模式。
2.? ?調制解調器睡眠模式:在此模式下,CPU可以運行,但禁用Wi-Fi無線電。此模式可用于需要CPU工作的應用程序,如PWM。它使Wi-Fi調制解調器電路在與Wi-Fi AP(接入點)連接時關閉,無數據傳輸以優化功耗。
3.? ?輕度睡模式:在此模式下,CPU和所有外圍設備都暫停。任何喚醒(如外部中斷)都會喚醒芯片。在沒有數據傳輸的情況下,可以關閉Wi-Fi調制解調器電路并暫停CPU以節省功耗。
4.? ?深度睡眠模式:在此模式下,只有RTC功能正常,芯片的所有其他組件都斷電。在長時間間隔后傳輸數據的情況下,此模式非常有用。
ESP8266中的深度睡眠模式
當某些功能關閉時,需要ESP8266模塊運行時,調制解調器睡眠模式和輕度睡眠模式非常有用。但如果您需要一些更高的功耗控制,那么請選擇深度睡眠模式。總平均電流小于1mA。在2.5V時,電流僅需20μA。
使用深度睡眠模式的步驟:
1.? ? 將模塊與Wi-Fi AP連接
2.? ? 執行讀取傳感器值,發布MQTT消息等任務。
3.? ? 根據定義的微秒數睡眠一段時間
4.? ? 再次重復上述過程
睡眠時間以微秒為單位。根據ESP8266 SDK,您只能睡眠?4,294,967,295?μs,大約71分鐘。
設置ESP8266模塊:
將ESP8266的RST引腳與GPIO 16連接,即D0引腳。 GPIO 16是具有WAKE功能的重要引腳。
將LM35溫度傳感器與NodeMCU的A0引腳相連。
當ESP模塊的RST引腳上為高電平時,它處于運行狀態。一旦在RST引腳上接收到LOW信號,ESP就會重新啟動。
使用深度睡眠模式設置定時器,一旦定時器結束,D0引腳將低電平信號發送到RST引腳,模塊將通過重新啟動來喚醒。
現在,硬件已準備就緒且配置良好。溫度讀數將發送到Thingspeak服務器上。為此,請在thingspeak.com上創建一個帳戶,并通過以下步驟創建一個頻道。
現在,復制Write API密鑰。該密鑰將在ESP代碼中使用。
ESP8266深度睡眠模式編程
我們將使用Arduino IDE編程ESP8266模塊,這非常容易實現。確保已安裝所有ESP8266開發板的文件。
首先包括所需的所有重要庫。
#include
一旦包含所有庫,就可以使用相關的函數,然后分配API寫密鑰、配置您的Wi-Fi名稱和密碼。然后聲明所有變量以供進一步使用存儲數據的位置。
String apiWritekey = "*************"; // replace with your THINGSPEAK WRITEAPI key here
char ssid[] = "******"; // your wifi SSID name
char password[] = "******" ;// wifi pasword
現在,使用wifi.begin()函數創建一個連接模塊和Wi-Fi網絡的函數,然后while循環持續檢查WIFI狀態,直到模塊連接到Wi-Fi。
void connect1() {
WiFi.disconnect();
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
創建另一個函數將數據發送到thingpeak服務器。這里將發送一個字符串,其中包含API寫密鑰、字段編號和必須發送的數據。然后使用client.print()函數發送此字符串。
void data() {
if (client.connect(server,80))
{??
String tsData = apiWritekey;
tsData +="&field1=";
tsData += String(tempF);
tsData += " ";
client.print("POST /update HTTP/1.1 ");
client.print("Host: api.thingspeak.com ");
調用connect1函數,該函數將調用函數連接Wi-Fi,然后讀取溫度讀數并將其轉換為攝氏溫度。
void setup() {
Serial.begin(115200);
Serial.println("device is in Wake up mode");
connect1();
float volts=(value/1024.0)*5.0;? ?? ?
tempC = volts*100.0;? ?
現在,調用data()函數向thingpeak云上傳數據。最后,調用的重要函數是ESP.deepSleep();該函數將使模塊在定義的時間間隔內休眠,該時間間隔以微秒為單位。
data();
Serial.println("deep sleep for 15 seconds");
ESP.deepSleep(15e6);
循環函數將保持為空,因為所有任務必須執行一次,然后在定義的時間間隔后復位模塊。
在本文的末尾處給出了完整代碼。上傳代碼到ESP8266模塊中。在上傳程序之前移除RST和D0連接線,否則會出錯。
在ESP8266中測試深度睡眠模式
上傳程序后,您將看到溫度讀數每15秒后上傳到ThingSpeak云,然后模塊進入深度睡眠模式。
以上就是在ESP8266模塊中使用深度睡眠的全部內容。深度睡眠是非常重要的功能,它已被包含在大多數設備中。
編輯:hfy
評論
查看更多