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

时间:2016-09-14 01:26:13

标签: sleep esp8266 interrupt-handling infrared sleep-mode

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

我已经有红外线解码和网络转发部分工作,但它总是打开,它使用大量电池,特别是考虑到99%的时间没有按下按钮。

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

如果我将IR接收器连接到RST引脚,可以将esp从深度睡眠中唤醒,但问题是它会在IR不断进入时反复重置esp,这将使esp无法实际解码IR命令,因为它不断被重置。

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

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

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

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

3 个答案:

答案 0 :(得分:6)

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

Wake up interrupt control circuit

经过一些测试后,我发现上面的电路并没有像我想象的那样节省多少电量,因为它只能阻止芯片启动,但ESP的内部部分处于活动状态,并在15ma左右等待复位。在深度睡眠中,这已超过60岁了!

如果您有一个信号在激活后保持几秒钟(如PIR运动传感器),则下面的电路可能有效。它使用一个电容器只允许边沿触发,然后运行代码可以检查GPIO4上的输入信号。但是,由于ESP8266的最大睡眠时间约为1小时,因此整体用电量仍然不佳。这意味着ESP8266在醒来之前仍会醒来并使用15ma几秒钟。在5分钟的深度睡眠周期中,1500mah可能会持续5天左右。

Deep Sleep edge trigger

答案 1 :(得分:2)

您是否看过Espressif doc有关睡眠ESP8266模式的信息? 它可以在这里找到:http://www.espressif.com/sites/default/files/9b-esp8266-low_power_solutions_en_0.pdf

它说:

  

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

所以,我不确定是否有可能避免重置(虽然,可能存在一些hacky方式?),但是另一种睡眠模式呢? 就像光睡一样。

答案 2 :(得分:1)

This post on electronics stack描述了如何使用一些额外部件执行一次性按钮。然而,在空间方面,它们总和比使用另一个micro更大,因此OP决定采用MCU。 micro将使用最少的附加部件并声称空间最小。