ESP8266模塊睡眠模式

當我們使用電池給esp模塊進行供電的時候,爲了節省電量。我們要實際應用的時候,這個問題就需要去解決。
而這個問題的解決方法就是使用esp模塊的睡眠模式

睡眠模式的類型

共有三種不同的睡眠模式:調制解調器睡眠,輕度睡眠和深度睡眠。下表顯示了每種模式之間的差異(ESP8266數據表中的信息)。
enter description here
esp低電量解決方案官方文檔

我們可以看到三種睡眠模式wifi都是關閉的。這就意味着很多情況下需要持續連接wifi的應用場景是不適用的。
深度睡眠模式只打開了時鐘。其他都是關閉的。而深度睡眠也是最省電的只有20μA。
每一種睡眠模式有他們適用的應用場景。

調制解調器睡眠

調制解調器睡眠通常用於需要CPU供電的應用程序。一個
應用的例子是需要實時的脈衝寬度調製(PWM)光
CPU控制。
當不需要恆定的wifi連接時,且應用程序需要保留的狀態下,對於減少功耗是很有用的。
對於這種模式的控制通過對wifi的控制來實現

WiFi.forceSleepBegin(); // Wifi off
delay();
WiFi.forceSleepWake(); // Wifi on

當需要進入睡眠模式時 使用第一條語句
當需要喚醒時,使用第二條語句。
可以在loop中使用。
示例

void loop() {
data();
delay(200);
Serial.println(“Going to sleep now”);
WiFi.forceSleepBegin(); // Wifi Off
delay(1000*10); // sleep for 10 seconds
WiFi.forceSleepWake(); // Wifi On
Serial.println(“Wake up”);
}

data() 函數是獲取傳感器的值 並使用mqtt發送
可以看到 獲取到值後,讓esp模塊進入睡眠模式,睡眠10s後,進行喚醒。再次重複操作。
參考鏈接

輕度睡眠

Light sleep。
依舊可以在loop中進行睡眠。
調用 可以使用light_sleep()

void light_sleep(){
wifi_station_disconnect();
wifi_set_opmode_current(NULL_MODE);
wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
wifi_fpm_open(); // Enables force sleep
gpio_pin_wakeup_enable(GPIO_ID_PIN(2), GPIO_PIN_INTR_LOLEVEL);
wifi_fpm_do_sleep(0xFFFFFFF); // Sleep for longest possible time
}

這裏面設置的睡眠時間是最長的時間,喚醒通過按鈕將GPIO2 接地。
可以通過調整睡眠時間來定時發送數據。
喚醒後要做的是連接wifi。因此需要在loop中第一句連接wifi

參考ESP8266 Light Sleep with MQTT

深度睡眠

deep sleep
對於耗電有要求,而且發送數值不頻繁 可以使用睡眠模式,裏面應有程序數據在深度睡眠模式將都不執行。相當於關機
實現方式有兩個。
第一種是定時器喚醒,可以理解爲定時開關機
傳入代碼後將GPIO16 與RST連接。
enter description here
調用函數 ESP.deepSleep(30e6); (單位us)
使esp模塊進入深度睡眠模式 30s.
30s達到後 GPIO16進行喚醒
最多睡眠時長4,294,967,295 µs 也就是大概71分鐘

esp01使用定時來實現睡眠模式不太好做,需要接出來一個非常小的引腳
enter description here

第二種方式是通過外部觸發進行喚醒
enter description here
使用 ESP.deepSleep(0);
進行長時間的深度睡眠狀態
當按鈕按下 RST有低電平信號,將進行喚醒,喚醒後執行到這條語句將再次睡眠直到下一次按鈕按下。
esp01s是同樣的方式
enter description here
參考代碼

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 Deep Sleep with Arduino IDE (NodeMCU)
參考 ESP8266 Deep sleep mode
參考The sleep states of the ESP8266

補充

對dht11 獲取溫度值 進行 light sleep模式測試
有可能是模塊的原因 獲取到的值不準確 因爲每次都是獲取到的初始化的值 可能會存在問題。(目前還不確定與輕度睡眠有關係沒)

更多學習教程

ESP開發學習基礎知識

基礎知識包括對esp模塊的認識與瞭解 mqtt協議的瞭解,arduino IDE運用代碼編寫等等。

  1. arduino基礎學習
  2. esp系列模塊的介紹
  3. mqtt協議的介紹與使用
  4. 利用mqtt esp模塊 基於arduino IDE開發方法
  5. esp模塊的AT指令 刷固件
  6. esp模塊睡眠模式使用
  7. esp8266-01s介紹與使用
  8. esp8266-12f介紹與使用
  9. NodeMcu介紹與使用
esp開發IOT應用

基於esp8266的模塊以及其他模塊根據實際的應用場景與需求製作的物聯網應用

  1. 基於FRID arduino 繼電器 電磁鎖開發的FRID門禁系統
  2. esp32-cam獲取視頻流圖像處理
  3. 基於步進電機 esp8266 mqtt開發的自動窗簾控制
  4. 基於DHT11 Esp8266 mqtt獲取室內溫溼度
  5. 基於CCS811 esp8266 mqtt 獲取室內空氣質量
  6. 基於紅外模塊 esp8266 mqtt開發的智能遙控控制
  7. 基於ws2812 esp8266 mqtt開發的智能多級照明燈
  8. 基於ws2812 esp8266 mqtt開發的智能多模式氛圍燈
  9. 基於mp3player esp8266 mqtt開發的智能語音播報系統
  10. IOT綜合應用之智慧教室項目開發
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章