ESP8266的低功耗方案-睡眠模式


在某些時候我們設計的產品可能不具備持久供電的環境,那通常會采用鋰電池、干電池一類的輕便型的非持久性電源。當遇到這種情況時,產品的續航能力可能就會成用戶評估產品的一個重要指標,加大電池容量當然是最為直接的方案,但是這也意味着提高產品的生產成本。那增加產品續航能力的另一個方案就是原自產品自身——降低不必要的能源消耗。

ESP8266有一個非常實用的低功耗運行模式 - 睡眠模式。

ESP8266系列產品的睡眠模式共有以下幾種可選:

No-sleep

打開芯片所有的功能使所有功能處理長期持久的工作狀態,此時芯片的功耗將處於最大狀態。顯然,這並不是一種推薦的用法,除非ESP8266芯片要處理長時間的實時性任務(此場景在真實的產品應用中並不多見)。

Modem-sleep

Modem-sleep是ESP8266的默認睡眠方式且僅工作於Station模式(即中繼器模式 AP),而且只有連接到路由器后才會生效。

當ESP8266以AP方式連接到路由器且運行於Modem-sleep模式時,它會在兩次DTIM Beacon間隔內關閉WIFI電路以達到省電效果,在下次Beacon到來前自動喚醒。睡眠時間由路由器的DTIM Beacon時間決定。睡眠的同時ESP8266可以保持與路由器的WI-FI連接,並通路由器接受來自手機或者服務器的交互信息。

一般路由器的DTIM Beacon間隔為100ms~1,000ms

Light-sleep

Light-sleep的工作模式與Modem-sleep相似,而不同的是除了關閉WI-FI模塊電路以外,在該模下還會關閉時間並暫停內部CPU,從而達到比Modem-sleep模式更低的功耗。

Light-sleep模式可用於需要保持與路由器的連接,可以實時響應路由器發來的數據的場合。並且在未接收到命令時,CPU可以處於空閑狀態。比如WI-FI開關的應用,大數據時間CPU是空閑的,直到收到控制命令,CPU才需要進行GPIO的操作。

Deep-sleep

Deep-sleep則是最狠的一種省電模式了,但此模式下ESP8266將會關閉除GPIO狀態外的所有的電路,此時ESP8266幾乎就處於假死狀態,其電流的消耗僅僅為20uA

而事實上ESP8266並不會持續地維持這種深度睡眠狀態,而是在一個指定間隔內關閉所有其它電路,當達到指定時間間隔后ESP8266將會自動重新啟動一次,這個最大時間間隔為 4,294,967,295 µs 約合71分鍾,其實也真的算得上睡得夠久了。但這種模式非常適合於那種對時間間隔要求很長的場合,例如最長見的溫度濕度檢測,河水水位檢測等。

要啟用Deep-sleep模式不能單單通過固件控制而需要進行跳線,具體辦法就是將D0(GPIO16)與RST腳相連。只要RST腳處於低電平狀態時就會引發ESP8266重啟,而Deep-sleep的真正實現方法就是在固件所指定的時間間隔內向GPIO16輸出低電平引發芯片的重啟,以達到喚醒的效果。

以下是在固件內引發Deep-sleep的代碼:

void setup() {
  Serial.begin(115200);
  Serial.setTimeout(2000);

  // Wait for serial to initialize.
  while(!Serial) { }
  
  Serial.println("I'm awake.");

  Serial.println("Going into deep sleep for 20 seconds");

  // 一但遇到以下方法ESP就會進入deepSleep狀態
  ESP.deepSleep(20e6); // 20e6 is 20 microseconds
}

void loop() {
}

下表為三種模式的具體對比:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM