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综合应用之智慧教室项目开发
发布了46 篇原创文章 · 获赞 59 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Nirvana_6174/article/details/104485963