【问题标题】:ESP8266 Micropython schedulerESP8266 Micropython 调度器
【发布时间】:2018-04-15 21:39:56
【问题描述】:
我正在寻找一种简单的方法来安排每天重启我的 ESP8266,目前在 Micropython 上运行。
我做了相当多的研究,但没有找到任何我可以使用/理解的东西。
我想知道这是否需要通过 Micropython 或其他系统语言来完成。
在最坏的情况下,我将创建一个无限循环来检查一天中的时间,但这似乎非常极端,并不是对 RAM 的最佳使用。
重新启动背后的原因是控制器将长时间无人看管,我需要每天重置它以防它崩溃,所以我不会超过 24 小时没有它当前提供的数据。
我看过uasyncio但不明白。
【问题讨论】:
标签:
scheduler
esp8266
micropython
【解决方案1】:
根据the docs,可以使用看门狗定时器machine.WDT。但是this forum discussion 表明当前的 ESP8266 Micropython 实际上并没有按照文档所说的那样做:
好的,所以看门狗似乎没有完全实现
esp8266,因为它在内部使用。
看来你所能做的就是通过禁用中断来触发它,
不知道这会有多大用处。
通常,您将使用您选择的超时配置看门狗,然后确保您的代码以比超时设置更短的间隔调用其feed 方法。如果您的代码已崩溃并且超时到期,则看门狗会重置系统。这听起来好像目前还没有在 ESP8266 版本上完全实现。
您可以在Micropython forum 上找到更多信息和解决方法,如果没有,您可能会在那里得到更好的回答。
【解决方案2】:
首先,您应该决定使用哪个计时器,以下是缺点;
循环 - timelib 中的“睡眠”停止执行当前线程
毫秒 - timelib 中的 "time" 或 "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()
第三,最后设置时间偏移以在当前操作之外开始下一次重新启动,
否则将重复重新启动,直到您指定的时区通过。