我正在寻找一种简单的方法来安排每天重启我的 ESP8266,目前在 Micropython 上运行。我做了相当多的研究,但没有找到任何我可以使用/理解的东西。我想知道这是否需要通过 Micropython 或其他系统语言来完成。在最坏的情况下,我将创建一个无限循环来检查一天中的时间,但这似乎非常极端,并不是对 RAM 的最佳使用。重新启动背后的原因是控制器将长时间无人看管,我需要每天重置它以防它崩溃,所以我不会超过 24 小时没有它当前提供的数据。
我看过uasyncio,但不明白。
我正在寻找一种简单的方法来安排每天重启我的 ESP8266,目前在 Micropython 上运行。我做了相当多的研究,但没有找到任何我可以使用/理解的东西。我想知道这是否需要通过 Micropython 或其他系统语言来完成。在最坏的情况下,我将创建一个无限循环来检查一天中的时间,但这似乎非常极端,并不是对 RAM 的最佳使用。重新启动背后的原因是控制器将长时间无人看管,我需要每天重置它以防它崩溃,所以我不会超过 24 小时没有它当前提供的数据。
我看过uasyncio,但不明白。
根据文档,您可以使用看门狗计时器machine.WDT
。然而这个论坛讨论表明当前的 ESP8266 Micropython 实际上并没有按照文档所说的那样做:
好的,所以看门狗似乎没有在 esp8266 上完全实现,因为它是在内部使用的。
看来您所能做的就是通过禁用中断来触发它,不确定这会有多大用处。
通常你会用你选择的超时配置看门狗,然后确保你的代码feed
以比超时设置更短的间隔调用它的方法。如果您的代码已崩溃并且超时到期,则看门狗会重置系统。这听起来好像目前还没有在 ESP8266 版本上完全实现。
您可以在Micropython 论坛上找到更多信息和解决方法,如果没有,您可能会在那里得到更好的回答。
首先,您应该决定使用哪个计时器,以下是缺点;
循环- 来自 timelib 的“睡眠”停止执行当前线程毫秒- 来自
timelib的“时间”或“ticks_ms”很好,但你必须知道如何克服毫秒周期
#as micropython lib
import utime as time
secs = time.time()
print (secs) #sec
millis = time.ticks_ms()
print (millis) #ms
rtc - 需要 rtc 模块
web - 需要通过 wifi 的 php 计时器
系统- 需要私人 wifi,外部组件必须始终在
gps上- 需要 gps 模块和信号
其次,选择一个定时器,只需指定特定时间即可挂断重启,然后安排重置:
#either hard reset, like power off-on
import machine
machine.reset()
#or soft reset
import sys
sys.exit()
第三,最后设置时间偏移以在当前动作之外开始下一次重启,否则将重复重启,直到您指定的时区过去。