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

在某些時候咱們設計的產品可能不具有持久供電的環境,那一般會採用鋰電池、乾電池一類的輕便型的非持久性電源。當遇到這種狀況時,產品的續航能力可能就會成用戶評估產品的一個重要指標,加大電池容量固然是最爲直接的方案,可是這也意味着提升產品的生產成本。那增長產品續航能力的另外一個方案就是原自產品自身——下降沒必要要的能源消耗。服務器

ESP8266有一個很是實用的低功耗運行模式 - 睡眠模式。oop

ESP8266系列產品的睡眠模式共有如下幾種可選:大數據

No-sleep

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

Modem-sleep

Modem-sleep是ESP8266的默認睡眠方式且僅工做於Station模式(即中繼器模式 AP),並且只有鏈接到路由器後纔會生效。3d

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

通常路由器的DTIM Beacon間隔爲100ms~1,000msblog

Light-sleep

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

Light-sleep模式可用於須要保持與路由器的鏈接,能夠實時響應路由器發來的數據的場合。而且在未接收到命令時,CPU能夠處於空閒狀態。好比WI-FI開關的應用,大數據時間CPU是空閒的,直到收到控制命令,CPU才須要進行GPIO的操做。路由

Deep-sleep

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

而事實上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() {
}

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

相關文章
相關標籤/搜索