arduinoesp8266定时器_ESP8266深度睡眠与Arduino IDE(NodeMCU)

本指南展示了如何使用Arduino IDE与ESP8266(NodeMCU)一起使用深度睡眠。我们将使用定时器唤醒来唤醒深度睡眠,并使用复位(RST)引脚来唤醒外部唤醒。

引入深度睡眠模式

如果您使用电池供电的ESP8266板制作了一个项目,或者只是将ESP8266 NodeMCU板连接到了移动电源。运行一段时间后,您会发现电池使用不了很长时间,特别是在使用Wi-Fi的情况下。

如果将ESP8266置于深度睡眠模式,则可以降低功耗,并且电池续航时间更长。

使ESP8266处于深度睡眠模式意味着可以减少那些在运行时会消耗更多功率的活动(例如Wi-Fi),但是在发生有趣的事情时仅留有足够的活动来唤醒处理器。

睡眠类型

共有三种不同的睡眠模式:调制解调器睡眠,轻度睡眠和深度睡眠。下表显示了每种模式之间的差异(ESP8266数据表中的信息)。

项目调制解调器睡眠浅睡眠沉睡

无线上网关                     关                   关

系统时钟上                    关                关

实时时钟上                      上                上

中央处理器上        待定                     关

基板电流15毫安     0.4毫安           约20 uA

平均电流(DTIM = 1)16.2毫安                        1.8毫安           –

平均电流(DTIM = 3)15.4毫安            0.9毫安          –

平均电流(DTIM = 10)15.2毫安          0.55毫安          –

它们都有不同的用途,应在不同的应用程序中使用。

在本文中,我们将介绍深度睡眠模式。除了实时时钟(RTC),ESP8266会一直跟踪时间,一切都总是关闭。

这是最省电的选择,ESP芯片仅消耗约20uA的电流。但是,如果您使用带有内置编程器,LED等的全功能开发板,则将无法实现低功耗状态。

深度睡眠素描

借助深度睡眠,示例应用程序如下所示:ESP8266连接到Wi-Fi

ESP8266执行任务(读取传感器,发布MQTT消息等)

睡眠一段预定的时间

ESP8266唤醒

一遍又一遍地重复该过程

唤醒源

将ESP8266置于深度睡眠模式后,可以通过多种方法唤醒它:#1定时器唤醒: ESP8266在预定义的时间段后自行唤醒

#2外部唤醒:按RST按钮时ESP8266唤醒(ESP8266重新启动)

对于低功耗项目,您可以考虑使用ESP32板,该板提供更多的深度睡眠模式和唤醒源。

#1 ESP8266带有定时器唤醒的深度睡眠

要使用ESP8266的定时器唤醒功能,您需要在NodeMCU板中将RST引脚连接到标有D0的GPIO 16 。只需遵循下一个原理图:

仅在上传代码后,才将RST引脚连接到GPIO 16。

如果您看一下NodeMCU引脚排列,您会发现GPIO 16是一个特殊的引脚,并且具有唤醒功能。

//------------------------------------------------------------------------------------------------------

ESP8266运行时,ESP8266的RST引脚始终为高电平。但是,当RST引脚接收到LOW信号时,它将重新启动微控制器。

如果您使用ESP8266设置了深度睡眠计时器,则计时器结束后,GPIO 16将发送LOW信号。这意味着,GPIO 16连接到RST引脚后,可以在设定的时间后唤醒ESP8266。

ESP8266 NodeMCU定时器唤醒草图

安装了适用于Arduino IDE的ESP8266插件(如何在Arduino IDE中安装ESP8266板),转到“ 工具”,然后选择“ NodeMCU(ESP-12E Module) ”。这是您需要上传到ESP的代码:

/*

* ESP8266 Deep sleep mode example

* Rui Santos

* Complete Project Details https://randomnerdtutorials.com

*/

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() {

}

在此示例中,我们在串行监视器中打印一条消息:

Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");

之后,ESP8266进入睡眠状态达30秒钟。

ESP.deepSleep(30e6);

要将ESP8266置于深度睡眠,请使用ESP.deepsleep(uS)并以毫秒为单位传递睡眠时间作为参数。

在这种情况下,30e6对应于30000000微秒,等于30秒。

上载代码后,按RST按钮开始运行代码,然后将RST连接到GPIO16。ESP8266应该每30秒唤醒一次,并在串行监视器中显示一条消息,如下所示。

该示例仅在串行监视器中打印一条消息,但是在实际应用程序中,您将执行有用的任务,例如发出请求,发布传感器读数等。

ESP-01定时器唤醒电路

如果要使用ESP-01板进行类似的设置,则需要如下所示焊接导线。这个微小的引脚是GPIO 16,需要连接到RST引脚。

但是,引脚是如此之细,以至于很难像ESP-01上的GPIO 16那样焊接导线。因此,对于这种唤醒模式,您应该使用NodeMCU板或裸露的ESP12-E芯片。

///-----------------------------------------------------------------------------------------//

#2 ESP8266外部唤醒的深度睡眠

您也可以通过外部唤醒来唤醒ESP8266,例如按下按钮或簧片开关。您只需要将ESP8266置于深度睡眠模式不确定的时间,然后将RST引脚设置为LOW即可将其唤醒。

要测试此设置,请按以下原理图所示,将按钮连接到ESP8266开发板上。当您按下按钮时,RST引脚变为低电平。

如果您使用的是  ESP-01,请改用下图。

ESP8266外部唤醒草图

然后,将以下代码上传到ESP8266开发板。

/*

* ESP8266 Deep sleep mode example

* Rui Santos

* Complete Project Details https://randomnerdtutorials.com

*/

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置于不确定的深度睡眠模式。为此,您只需要将0作为参数传递给deepSleep()函数:

ESP.deepSleep(0);

仅当某些东西使电路板复位时,ESP才会唤醒。在这种情况下,按下按钮会将RST引脚拉至GND。

按下按钮后,ESP8266会唤醒,执行已编程的任务,然后返回睡眠状态,直到触发新的重置事件为止。

测量电流

当评估板处于深度睡眠模式时,请用万用表测量电流消耗,以查看消耗了多少功率。

这是放置万用表探针的方法。

当ESP-01处于深度睡眠模式时,它仅使用0.3mA电流(约300uA)。

请记住,在Wi-Fi正常使用期间,ESP8266可能消耗50mA至170mA的电流。

包起来

现在您知道如何使用deepSleep()函数,电池供电的项目可以持续更长时间。

原文章地址:https://randomnerdtutorials.com/esp8266-deep-sleep-with-arduino-ide/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB对图片格式批量转换

从网上下载一些数据集,发现是PPM或者PGM格式的,一般照片查看器打不开。可以用MATLAB对其进行批量转换格式。当然,任何两种格式之间相互转换都可以用这个程序:% 本示例程序将 pgm 图片转换为 jpg 图片 % 如果仅对一张 pgm 图片作…

gunicorn部署Flask服务

作为一个Python选手,工作中需要的一些服务接口一般会用Flask来开发。 Flask非常容易上手,它自带的app.run(host"0.0.0.0", port7001)用来调试非常方便,但是用于生产环境无论是处理高并发还是鲁棒性都有所欠缺,一般会配合…

linux shell 中判断字符串为空的正确方法

help命令可以查看帮助 help test 正确做法: #!/bin/sh STRING if [ -z "$STRING" ]; then echo "STRING is empty" fi if [ -n "$STRING" ]; then echo "STRING is not empty" fi rootjames-desktop:~#…

打开wmware没反应_没呼吸没脉搏,溺水女孩危在旦夕!预产期只差9天的她挺着大肚子出手相助...

8月9日晚上8点半南海桂城中海锦城小区游泳池一位小女孩溺水了!脸色青紫、嘴唇发绀没有呼吸也没有脉搏情况非常不妙!↓↓↓救生员立马给女孩做心肺复苏。站在泳池边陪女儿才游不到200米的南海医院妇科医生胡碧洪,听见泳池边的骚动,…

使用JAXB的简介

我正在将一些依赖于Apache XMLBeans的模块迁移到JAXB。 这是令人兴奋且充满挑战的几天。 我想记下我遇到的一些重要事情,以供将来可能会发现有用的任何人使用。 首先,让我们来看一下设置用于JAXB代码生成的maven插件。 在撰写本文时,我遇到了…

关于opencv读取摄像头的未解之谜

前段时间做项目需要用opencv读usb摄像头的视频数据,遇到很多无解的问题,虽然后来没有用到,但是还是记录下来,也许以后就知道答案了呢。 1、无论摄像头的实际分辨率是多少,opencv读进来的视频分辨率都是640*480大小的&a…

[BZOJ2834]回家的路

Description Input Output Sample Input 2 1 1 2 1 1 2 2Sample Output 5思路还是很简单的&#xff0c;然而最短路打错各种对拍各种调了一早上代码&#xff1a;1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<vector>5 #includ…

dubbo优势_Dubbo与SpringCloud核心组件Ribbon、Hystrix、Feign的优劣势比较

在微服务架构中&#xff0c;分布式通信、分布式事务、分布式锁等问题是亟待解决的几个重要问题。Spring Cloud是一套完整的微服务解决方案&#xff0c;基于 Spring Boot 框架。确切的说&#xff0c;Spring Cloud是一个大容器(而不是一个框架)&#xff0c;它可以将通过集成一些好…

使用Java更新DynamoDB项

在上一篇文章中&#xff0c;我们继续使用Java将项目插入DynamoDB。 DynamoDB还支持更新项目。 我们将使用Login表获取更新示例。 发布更新时&#xff0c;必须指定要更新的项目的主键。 public void updateName(String email,String fullName) {Map<String,AttributeValue…

Python执行系统命令的方法 os.system(),os.popen(),commands

最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类。 最开始的时候用 Python 学会了 os.system() 这个方法是很多比如 C&#xff0c;Perl 相似的。 os.system(cat /proc/cpuinfo) 但是这样是无法获得到输出和返回值的&#xff0c;继续 Goog…

opencv的两个错误

1、imwrite未定义标识符先检查opencv和C有没有配置好&#xff0c;再看有没有包含相应的头文件&#xff0c;最后发现是因为没有使用cv的命名空间&#xff0c;需要加上using namespase cv&#xff1b; 2、cvCvtColor的使用函数原型&#xff1a;cvCvtColor&#xff08;src&#xf…

BTC、BCH和BSV三者到底有什么区别?

比特币发展到今天已经有10个年头了&#xff0c;在这十年的发展中&#xff0c;比特币一共经历了两次重要的分裂&#xff0c;现在变成了三种货币&#xff0c;第一种是目前继承了比特币绝大多数遗产的BTC&#xff1b;第二种是BCH&#xff1b;第三种是BSV。那这三种货币到底有什么区…

ping 不通 华为三层交换机vlan_华为三层交换机如何让VLAN间不能互通配置精编版...

时可以利用hybrid属性定义分属于不同的vlan的端口之间的互访&#xff0c;这是access和trunk端口所不能实现的。在一台交换机上不允许trunk端口和hybrid端口同时存在。1.先创建业务需要的vlan[SwitchA]vlan 10[SwitchA]vlan 20[SwitchA]vlan 30[SwitchA]vlan 40[SwitchA]vlan 50…

python进程池:multiprocessing.pool

阅读目录 例1&#xff1a;使用进程池例2&#xff1a;使用进程池&#xff08;阻塞&#xff09;例3&#xff1a;使用进程池&#xff0c;并关注结果例4&#xff1a;使用多个进程池 在利用Python进行系统管理的时候&#xff0c;特别是同时操作多个文件目录&#xff0c;或者远程控制…

eclipse juno_放弃Eclipse Juno

eclipse juno在上一个博客中&#xff0c;我发布了有关Eclipse 4.2 Juno设置的信息。 在需要重新安装其他东西的情况下&#xff0c;为我提供了很多参考。 那时我没有谈论的是我与Juno共同遇到的问题。 我以为这是我自己的安装程序&#xff0c;很麻烦&#xff0c;但是此后并没有太…

C语言结构体数组的使用

1、结构体数组的优点结构体可以存储不同的数据类型&#xff0c;将他们互相联系起来。结构体数组可以连续存储多个结构体&#xff0c;和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值&#xff0c;并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时&am…

arthas 查看哪个方法调用最耗时_Java开源诊断工具Arthas使用方法详解

一、前言1、热更新代码的场景(1)当线上服务器出现问题时&#xff0c;有些时候现有的手段不足以发现问题所在&#xff0c;可能需要追加打印日志或者增加一些调试代码&#xff0c;如果我们去改代码重新部署&#xff0c;会破坏问题现场&#xff0c;可以通过热部署的手段来增加调试…

Java 12 - Java StringBuffer和StringBuilder类

Java StringBuffer和StringBuilder类 当对字符串进行修改的时候&#xff0c;需要使用StringBuffer和StringBuilder类。 和String类不同的是&#xff0c;StringBuffer和StringBuilder类的对象能够被多次的修改&#xff0c;并且不产生新的未使用对象。 StringBuilder类在Java 5中…

将你的Vim 打造成轻巧强大的IDE

Vim和Emacs一个称为神之编辑器一个被称为编辑器之神&#xff0c;固然很是夸张&#xff0c;但也足以说明这两 款软件的优秀和在程序员界的地位。但是它们都已漫长的学习曲线让人望而生畏&#xff0c;阻止了大 多数人进入。作为一名几乎完全使用Vim写各种代码、文档的人&#xff…

NutchServer的安全层

我曾作为GSoC 2016项目在Apache Nutch的NutchServer的Security Layer上工作&#xff0c;并完成了它。 在此博客文章中&#xff0c;我将解释其工作原理和使用方法。 首先&#xff0c;建议您阅读以前有关GSoC 2016接受的帖子&#xff1a; http ://furkankamaci.com/gsoc-2016-acc…