本指南展示瞭如何使用 Arduino IDE 與 ESP8266 (NodeMCU) 一起使用深度睡眠。我們將介紹深度睡眠與定時器喚醒和深度睡眠與使用復位 (RST) 引腳的外部喚醒。
要將 ESP8266 置於深度睡眠模式,請使用ESP.deepSleep(美國)並以微秒為單位作為引數睡眠時間傳遞。GPIO 16 必須連線到復位 (RST) 引腳,以便 ESP8266 能夠喚醒。
讓 ESP8266 無限期進入深度睡眠模式ESP.deepSleep(0). ESP8266 將在 RST 引腳接收到 LOW 訊號時喚醒。
引入深度睡眠模式
如果您使用電池供電的 ESP8266 板製作了一個專案,或者您剛剛將 ESP8266 NodeMCU 板連線到移動電源。執行一段時間後,您會發現電池不會持續很長時間,尤其是在您使用 Wi-Fi 的情況下。
如果您將 ESP8266 置於深度睡眠模式,它會降低功耗並且您的電池將持續更長時間。
讓 ESP8266 處於深度睡眠模式意味著減少執行時消耗更多功率的活動(如 Wi-Fi),但留下足夠的活動以在發生有趣的事情時喚醒處理器。
睡眠型別
共有三種不同型別的睡眠模式:調變解調器睡眠、輕度睡眠和深度睡眠。下表顯示了每種模式之間的差異(來自 ESP8266 資料表的資訊)。
物品 |
調變解調器睡眠 |
淺睡眠 |
沉睡 |
無線上網 |
離開 |
離開 |
離開 |
系統時鐘 |
在 |
離開 |
離開 |
實時時鐘 |
在 |
在 |
在 |
中央處理器 |
在 |
待辦的 |
離開 |
基板電流 |
15毫安 |
0.4毫安 |
~20 uA |
平均電流 (DTIM = 1) |
16.2 毫安 |
1.8毫安 |
– |
平均電流 (DTIM = 3) |
15.4 毫安 |
0.9毫安 |
– |
平均電流 (DTIM = 10) |
15.2 毫安 |
0.55毫安 |
– |
注:表中功耗指的是 ESP8266 作為獨立晶片。如果您使用的是開發板,則它們具有使用更多電流的無源元件。
它們都有不同的用途,應該在不同的應用程式中使用。
在本文中,我們將介紹深度睡眠模式。一切都是關閉的,除了實時時鐘 (RTC),這是 ESP8266 跟蹤時間的方式。
這是最省電的選項,ESP 晶片僅消耗大約 20uA。但是,如果您使用帶有內建程式設計器、LED 等的全功能開發板,您將無法實現如此低功耗的狀態。
深度睡眠素描
在深度睡眠中,示例應用程式如下所示:
- ESP8266 連線到 Wi-Fi
- ESP8266 執行任務(讀取感測器、釋出 MQTT 訊息等)
- 休眠一段預定義的時間
- ESP8266 喚醒
- 這個過程一遍又一遍地重複
喚醒源
將 ESP8266 置於深度睡眠模式後,有多種喚醒方式:
- #1 定時器喚醒: ESP8266 在預定義的時間段後自行喚醒
- #2 外部喚醒:按下 RST 按鈕喚醒 ESP8266(ESP8266 重啟)
#1 ESP8266 帶定時器喚醒的深度睡眠
要透過 ESP8266 使用定時器喚醒,您需要將 RST 引腳連線到NodeMCU 板中標記為 D0 的 GPIO 16 。只需按照下一個示意圖:
僅在上傳程式碼後將 RST 引腳連線到 GPIO 16。
如果您看一下 NodeMCU 引腳分配,您會發現 GPIO 16 是一個特殊引腳,並且它具有 WAKE 功能。
ESP8266 執行時,ESP8266 的 RST 引腳始終為高電平。但是,當 RST 引腳接收到 LOW 訊號時,它會重新啟動微控制器。
如果您使用 ESP8266 設定深度睡眠定時器,一旦定時器結束,GPIO 16 會發送一個 LOW 訊號。這意味著 GPIO 16 連線到 RST 引腳時,可以在設定的時間後喚醒 ESP8266。
ESP8266 NodeMCU 定時器喚醒草圖
安裝 Arduino IDE 的 ESP8266 外掛,轉到工具並選擇“ NodeMCU (ESP-12E 模組) ”。這是您需要上傳到 ESP 的程式碼:
/*
* ESP8266 Deep sleep mode example
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);
// Wait for serial to initialize.
while(!Serial) { }
// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board) is connected to the RESET pin
Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
ESP.deepSleep(30e6);
// Deep sleep mode until RESET pin is connected to a LOW signal (for example pushbutton or magnetic reed switch)
//Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
//ESP.deepSleep(0);
}
void loop() {
}
在此示例中,我們在序列監視器中列印一條訊息:
Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
之後,ESP8266 進入休眠狀態 30 秒。
ESP.deepSleep(30e6);
要將 ESP8266 置於深度睡眠狀態,請使用ESP.deepsleep(美國)並將睡眠時間作為引數傳遞(以微秒為單位)。
在這種情況下,30e6 對應於 30000000 微秒,即 30 秒。
上傳程式碼後,按 RST 按鈕開始執行程式碼,然後將 RST 連線到 GPIO 16。ESP8266 應該每 30 秒喚醒一次,並在 Serial Monitor 中列印一條訊息,如下所示。
此示例僅在序列監視器中列印一條訊息,但在現實世界的應用程式中,您將執行一項有用的任務,例如發出請求、釋出感測器讀數等。
ESP-01 定時器喚醒電路
如果您想使用 ESP-01 板進行類似的設定,您需要焊接一根電線,如下所示。那個小引腳是 GPIO 16,它需要連線到 RST 引腳。
然而,引腳非常小,很難將這樣的電線焊接到 ESP-01 上的 GPIO 16 上……因此,對於這種喚醒模式,您應該使用NodeMCU 板或裸露的 ESP12-E 晶片。
#2 ESP8266 帶外部喚醒的深度睡眠
您還可以透過外部喚醒來喚醒 ESP8266,例如按下按鈕或簧片開關。您只需將 ESP8266 無限期地置於深度睡眠模式,然後將 RST 引腳設定為低電平即可將其喚醒。
要測試此設定,請將按鈕連線到 ESP8266 板,如下圖所示。當您按下按鈕時,RST 引腳變為低電平。
如果您使用的是 ESP-01,請按照下圖進行操作。
ESP8266 外部喚醒草圖
然後,將以下程式碼上傳到您的 ESP8266 開發板。
/*
* ESP8266 Deep sleep mode example
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);
// Wait for serial to initialize.
while(!Serial) { }
// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board) is connected to the RESET pin
//Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
//ESP.deepSleep(30e6);
// Deep sleep mode until RESET pin is connected to a LOW signal (for example pushbutton or magnetic reed switch)
Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
ESP.deepSleep(0);
}
void loop() {
}
此程式碼將 ESP8266 無限期地置於深度睡眠模式。為此,您只需將 0 作為引數傳遞給沉睡()功能:
ESP.deepSleep(0);
ESP 只會在某些東西重置電路板時喚醒。在這種情況下,按下按鈕將 RST 引腳拉至 GND。
當您按下按鈕時,ESP8266 會喚醒,執行程式設計任務並重新進入睡眠狀態,直到觸發新的復位事件。
測量電流
當板子處於深度睡眠模式時,用萬用表測量電流消耗,看看它消耗了多少功率。
以下是放置萬用表探頭的方法。
當 ESP-01 處於深度睡眠模式時,它僅使用 0.3mA,大約為 300uA。
請記住,在正常使用 Wi-Fi 期間,ESP8266 可能消耗 50mA 到 170mA 之間的電流。