开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
ESP8266-休眠模式
睡眠模式的类型 共有三种不同的睡眠模式:调制解调器睡眠,轻度睡眠和深度睡眠  三种睡眠模式wifi都是关闭的,意味着很多情况下需要持续连接wifi的应用场景是不适用的。 深度睡眠模式只打开了时钟。其他都是关闭的。而深度睡眠也是最省电的只有20μA。 每一种睡眠模式有他们适用的应用场景。 ## 调制解调器睡眠 调制解调器睡眠通常用于需要CPU供电的应用程序。 当不需要恒定的wifi连接时,且应用程序需要保留的状态下,对于减少功耗是很有用的。 如:需要实时的脉冲宽度调制(PWM)光CPU控制。 对于这种模式的控制通过对wifi的控制来实现 ``` WiFi.forceSleepBegin(); // Wifi关闭 WiFi.forceSleepWake(); // Wifi开启 ``` ``` #include <ESP8266WiFi.h> void data() { //注意!!! //使用wifi的需要先连接上wifi再执行后面的程序 //放一些需要执行的程序 } void setup() { Serial.begin(115200); } void loop() { data(); //执行的函数,可以自定义函数 delay(200); //执行完函数等待一会 Serial.println("现在休眠"); WiFi.forceSleepBegin(); // Wifi关闭 delay(1000*10); //等待一定时间 WiFi.forceSleepWake(); // Wifi开启 Serial.println("关闭休眠"); } ``` 执行完内容,让esp模块进入睡眠模式,睡眠10s后,进行唤醒。再次重复操作 ## 轻度睡眠 ``` #include <ESP8266WiFi.h> void data() { int value = analogRead(A0); float volts=(value * 3.03) / 1024; //转换成V tempC = volts*100.0; //转换为℃ Serial.print("Temperature C: "); Serial.println(tempC); if (client.connected()) { Serial.println("MQTT client connected"); client.publish("/homeautomation/temperature", String(tempC)); delay(1000); } else { Serial.println("MQTT client not connected"); } } void initWifi() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("连接WIFI: "); //尝试连接10秒钟 int i = 10; while(WiFi.status() != WL_CONNECTED && i >=0) { delay(1000); Serial.print(i); Serial.print(". "); i--; } Serial.println(""); if(WiFi.status() == WL_CONNECTED){ Serial.println("WiFi IP地址: "); Serial.println(WiFi.localIP()); Serial.println("连接MQTT: "); while (!client.connect(id, user, user_password)) { Serial.print("."); delay(1000); } //client.subscribe("/homeautomation/temperature"); } else { Serial.println("连接失败-检查您的凭据或连接"); } } void light_sleep(){ wifi_station_disconnect(); //关闭wifi wifi_set_opmode_current(NULL_MODE); wifi_fpm_set_sleep_type(LIGHT_SLEEP_T); // 设置睡眠类型 wifi_fpm_open(); // 启用强制睡眠 gpio_pin_wakeup_enable(GPIO_ID_PIN(2), GPIO_PIN_INTR_LOLEVEL); // GPIO_ID_PIN(2)设置引脚GPIO2,逻辑电平低电平 wifi_fpm_do_sleep(0xFFFFFFF); // 睡尽可能长的时间 } void setup(){ WiFi.begin("ssid", "password"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } } void loop() { initWifi(); //休眠结束后连接WIFI data(); //连接wifi后执行的程序 delay(200); Serial.println("启动休眠"); light_sleep(); //设置休眠 doDelays(); Serial.println("结束休眠"); } ``` 这里面设置的睡眠时间是最长的时间,唤醒通过按钮将GPIO2 接地。 可以通过调整睡眠时间来定时发送数据。 唤醒后要做的是连接wifi。因此需要在loop中第一句连接wifi ## 深度睡眠 对于耗电有要求,而且发送数值不频繁 可以使用睡眠模式,里面应有程序数据在深度睡眠模式将都不执行。相当于关机 ``` void setup() { Serial.begin(115200); Serial.setTimeout(2000); //等待串口初始化 while(!Serial) { } //深度睡眠模式持续30秒,当GPIO 16(NodeMCU板中的D0)连接至复位引脚时,ESP8266自动唤醒 //Serial.println("我醒着,但我要进入深度睡眠模式30秒"); //ESP.deepSleep(30e6); //时间到了自动复位 //深度睡眠模式,直到复位引脚连接到低信号(例如按钮或磁簧开关) Serial.println("我醒着,但我进入深度睡眠模式,直到复位引脚连接到低信号"); ESP.deepSleep(0); //等待手动复位 } void loop() { } ``` ### 定时器唤醒 将 GPIO16 与 RST 连接   esp01使用定时来实现睡眠模式不太好做,需要接出来一个非常小的引脚 调用函数 ESP.deepSleep(30e6); (单位us) 使esp模块进入深度睡眠模式 30s. 30s达到后 GPIO16进行唤醒 最多睡眠时长4,294,967,295 µs 也就是大概71分钟 ### 外部按键唤醒   使用 ESP.deepSleep(0); 进行长时间的深度睡眠状态 当按钮按下 RST有低电平信号,将进行唤醒,唤醒后执行到这条语句将再次睡眠直到下一次按钮按下
造物者W
2022年1月11日 19:03
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码