当我们使用电池给esp模块进行供电的时候,为了节省电量。我们要实际应用的时候,这个问题就需要去解决。
而这个问题的解决方法就是使用esp模块的睡眠模式
共有三种不同的睡眠模式:调制解调器睡眠,轻度睡眠和深度睡眠。下表显示了每种模式之间的差异(ESP8266数据表中的信息)。
我们可以看到三种睡眠模式wifi都是关闭的。这就意味着很多情况下需要持续连接wifi的应用场景是不适用的。
深度睡眠模式只打开了时钟。其他都是关闭的。而深度睡眠也是最省电的只有20μA。
每一种睡眠模式有他们适用的应用场景。
调制解调器睡眠通常用于需要CPU供电的应用程序。一个
应用的例子是需要实时的脉冲宽度调制(PWM)光
CPU控制。
当不需要恒定的wifi连接时,且应用程序需要保留的状态下,对于减少功耗是很有用的。
对于这种模式的控制通过对wifi的控制来实现
当需要进入睡眠模式时 使用第一条语句
当需要唤醒时,使用第二条语句。
可以在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
deep sleep
对于耗电有要求,而且发送数值不频繁 可以使用睡眠模式,里面应有程序数据在深度睡眠模式将都不执行。相当于关机
实现方式有两个。
第一种是定时器唤醒,可以理解为定时开关机
传入代码后将GPIO16 与RST连接。
esp01使用定时来实现睡眠模式不太好做,需要接出来一个非常小的引脚
第二种方式是通过外部触发进行唤醒
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() {
}
对dht11 获取温度值 进行 light sleep模式测试
有可能是模块的原因 获取到的值不准确 因为每次都是获取到的初始化的值 可能会存在问题。(目前还不确定与轻度睡眠有关系没)
基础知识包括对esp模块的认识与了解 mqtt协议的了解,arduino IDE运用代码编写等等。
基于esp8266的模块以及其他模块根据实际的应用场景与需求制作的物联网应用