如何在不连续重置的情况下将 esp8266 从深度睡眠中唤醒

问题描述 投票:0回答:4

我正在使用 esp8266 构建一个 IR 到 wifi 桥。基本上,我正在构建一个连接到红外遥控器内的 esp8266 的红外接收器,以通过 wifi 将接收到的红外遥控器按键转发到服务器。我正在使用 Wemos D1 Mini。

我已经让 IR 解码和网络转发部分正常工作,但它始终处于打开状态,这会消耗大量电池,尤其是考虑到 99% 的时间都没有按下任何按钮。

我想让它在一段时间没有按下按钮时进入深度睡眠状态。

If I connect the IR receiver to the RST pin,that can wake the esp from deep sleep,but the problem with that it will keep resetting the esp over and over as the IR keeps incoming,这将使esp无法实际解码 IR 命令,因为它不断被重置。

我需要它通过 RST 将 esp 从深度睡眠中唤醒,然后忽略进一步的 RST 激活,直到我以编程方式再次将其发送到深度睡眠中。

我真正需要的是一个合适的 gpio 中断,这样我就可以忽略进一步的重置,直到我进入深度睡眠,但是 AFAIK esp8266 不支持 gpio 中断从深度睡眠中唤醒。

我需要某种可重置的一次性触发器,只发出一次重置,直到您告诉它您将再次入睡。

我不确定我将如何实现它?有人有主意吗?我宁愿不必使用另一个外部微控制器来重置 esp8266,遥控器内部的空间也很紧张,所以我宁愿不必使用很多外部零件。

sleep esp8266 interrupt-handling infrared sleep-mode
4个回答
10
投票

这是我用来允许一次性中断从 ESP8266 的深度睡眠中唤醒的电路。它通过仅在深度睡眠定时器激活(D0 被拉低)后允许中断复位来运行。在你的深度睡眠功能上设置一个短暂的超时以立即启用中断。

经过一些测试,我发现上面的电路并没有像我想象的那样省电,因为它只是阻止了芯片启动,但 ESP 内部部分处于活动状态,并在等待复位时消耗大约 15ma 的电流。这比深度睡眠中的 60ua 多得多!

如果您有信号在激活后保持几秒钟(如 PIR 运动传感器),则下面的电路可能会工作。它使用电容器只允许边沿触发,然后运行代码可以检查 GPIO4 上的输入信号。然而,整体功耗仍然不佳,因为 ESP8266 最大睡眠时间约为 1 小时。这意味着 ESP8266 仍然会唤醒并使用 15ma 几秒钟,然后再回到睡眠状态。在 5 分钟的深度睡眠周期中,1500mah 大约可以使用 5 天。


2
投票

您是否看过有关 ESP8266 睡眠模式的 Espressif 文档? 可在此处获得:http://www.espressif.com/sites/default/files/9b-esp8266-low_power_solutions_en_0.pdf

上面写着:

在深度睡眠模式下,芯片可以通过外部IO在EXT_RSTB引脚上产生的低电平脉冲唤醒和初始化。

所以,我不确定是否有可能避免重置(虽然,也许存在一些 hacky 方法?),但是另一种睡眠模式呢? 喜欢轻度睡眠。


1
投票

这篇关于电子堆栈的文章 描述了如何使用几个额外的部件制作一次性按钮。然而,在空间方面,它们加起来比使用另一个微型计算机要大,因此 OP 决定使用 MCU。微型将使用最少的附加部件并占用最少的空间。


0
投票

我有一个相关的后续问题:我尝试使用 @Tomsim 的上述电路使用 Wemos D1 迷你板来完成这项工作。不幸的是,我的 ESP 似乎确实进入了未定义状态,而不是成功重置。我记录了 RST 引脚上的电压,一切看起来都很好。如果我正常重置 ESP,它会按预期恢复生机。

图片single shot RST pin ESP8266

对于那些想知道为什么我认为 ESP 处于未定义状态的人:板载 LED 持续点亮,串行控制台输出出现乱码。

图片garbled serial console output

© www.soinside.com 2019 - 2024. All rights reserved.