arduinoesp8266定时器_ESP8266深度睡眠与Arduino IDE(NodeMCU)
本指南展示了如何使用Arduino IDE與ESP8266(NodeMCU)一起使用深度睡眠。我們將使用定時器喚醒來喚醒深度睡眠,并使用復位(RST)引腳來喚醒外部喚醒。
引入深度睡眠模式
如果您使用電池供電的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毫安? ? ? ? ??–
它們都有不同的用途,應在不同的應用程序中使用。
在本文中,我們將介紹深度睡眠模式。除了實時時鐘(RTC),ESP8266會一直跟蹤時間,一切都總是關閉。
這是最省電的選擇,ESP芯片僅消耗約20uA的電流。但是,如果您使用帶有內置編程器,LED等的全功能開發板,則將無法實現低功耗狀態。
深度睡眠素描
借助深度睡眠,示例應用程序如下所示:ESP8266連接到Wi-Fi
ESP8266執行任務(讀取傳感器,發布MQTT消息等)
睡眠一段預定的時間
ESP8266喚醒
一遍又一遍地重復該過程
喚醒源
將ESP8266置于深度睡眠模式后,可以通過多種方法喚醒它:#1定時器喚醒:?ESP8266在預定義的時間段后自行喚醒
#2外部喚醒:按RST按鈕時ESP8266喚醒(ESP8266重新啟動)
對于低功耗項目,您可以考慮使用ESP32板,該板提供更多的深度睡眠模式和喚醒源。
#1 ESP8266帶有定時器喚醒的深度睡眠
要使用ESP8266的定時器喚醒功能,您需要在NodeMCU板中將RST引腳連接到標有D0的GPIO 16?。只需遵循下一個原理圖:
僅在上傳代碼后,才將RST引腳連接到GPIO 16。
如果您看一下NodeMCU引腳排列,您會發現GPIO 16是一個特殊的引腳,并且具有喚醒功能。
//------------------------------------------------------------------------------------------------------
ESP8266運行時,ESP8266的RST引腳始終為高電平。但是,當RST引腳接收到LOW信號時,它將重新啟動微控制器。
如果您使用ESP8266設置了深度睡眠計時器,則計時器結束后,GPIO 16將發送LOW信號。這意味著,GPIO 16連接到RST引腳后,可以在設定的時間后喚醒ESP8266。
ESP8266 NodeMCU定時器喚醒草圖
安裝了適用于Arduino IDE的ESP8266插件(如何在Arduino IDE中安裝ESP8266板),轉到“?工具”,然后選擇“?NodeMCU(ESP-12E Module)?”。這是您需要上傳到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(uS)并以毫秒為單位傳遞睡眠時間作為參數。
在這種情況下,30e6對應于30000000微秒,等于30秒。
上載代碼后,按RST按鈕開始運行代碼,然后將RST連接到GPIO16。ESP8266應該每30秒喚醒一次,并在串行監視器中顯示一條消息,如下所示。
該示例僅在串行監視器中打印一條消息,但是在實際應用程序中,您將執行有用的任務,例如發出請求,發布傳感器讀數等。
ESP-01定時器喚醒電路
如果要使用ESP-01板進行類似的設置,則需要如下所示焊接導線。這個微小的引腳是GPIO 16,需要連接到RST引腳。
但是,引腳是如此之細,以至于很難像ESP-01上的GPIO 16那樣焊接導線。因此,對于這種喚醒模式,您應該使用NodeMCU板或裸露的ESP12-E芯片。
///-----------------------------------------------------------------------------------------//
#2 ESP8266外部喚醒的深度睡眠
您也可以通過外部喚醒來喚醒ESP8266,例如按下按鈕或簧片開關。您只需要將ESP8266置于深度睡眠模式不確定的時間,然后將RST引腳設置為LOW即可將其喚醒。
要測試此設置,請按以下原理圖所示,將按鈕連接到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作為參數傳遞給deepSleep()函數:
ESP.deepSleep(0);
僅當某些東西使電路板復位時,ESP才會喚醒。在這種情況下,按下按鈕會將RST引腳拉至GND。
按下按鈕后,ESP8266會喚醒,執行已編程的任務,然后返回睡眠狀態,直到觸發新的重置事件為止。
測量電流
當評估板處于深度睡眠模式時,請用萬用表測量電流消耗,以查看消耗了多少功率。
這是放置萬用表探針的方法。
當ESP-01處于深度睡眠模式時,它僅使用0.3mA電流(約300uA)。
請記住,在Wi-Fi正常使用期間,ESP8266可能消耗50mA至170mA的電流。
包起來
現在您知道如何使用deepSleep()函數,電池供電的項目可以持續更長時間。
原文章地址:https://randomnerdtutorials.com/esp8266-deep-sleep-with-arduino-ide/
總結
以上是生活随笔為你收集整理的arduinoesp8266定时器_ESP8266深度睡眠与Arduino IDE(NodeMCU)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html选择按键点击后锁死输入框_js实
- 下一篇: 打开wmware没反应_没呼吸没脉搏,溺