bilibili-视频演示
以下内容
-
设置定时器每8小时请求一次NTP网络时间同步
-
设置日期时间按秒刷新显示在屏幕
放一张以前的动图
参考左上角时间动态刷新
官网文档
https://docs.micropython.org/en/latest/wipy/tutorial/timer.html
参考文章
《MicroPython[ESP32]:ESP32-S3设置ntp时间同步日期显示,哔哩哔哩粉丝计数,博客实时在线人数》
-
不要使用while Ture来阻塞进程
-
不要设置time.sleep来阻塞进程,阻塞画面渲染等
可以使用Timer
from machine import Timer
实例化定时器
tim1 = Timer(1)
设置回调函数
def delay_func():
print("delay_func")
执行定时器
tim1.init(period=1000, mode=Timer.PERIODIC, callback=lambda t:delay_func())
period参数
-
period为定时时长,单位为毫秒
mode参数
-
mode=Timer.PERIODIC为循环执行
-
mode=Timer.ONE_SHOT 为只执行一次
callback参数
-
callback为回调函数
-
想要传参可以使用lambda表达式(不适用的话会默认有一个timer参数,导致传参各种错误)
参考文章
《MicroPython[ESP32-S3]:开启WIFI设置NTP时间同步并显示当前日期和周》
创建实例
tim12 = Timer(12)
定义函数
def sync_ntp():
print("开始同步网络时间")
import ntptime
try:
ntptime.NTP_DELTA = 3155644800 # 可选 UTC+8偏移时间(秒),不设置就是UTC0
ntptime.host = 'ntp1.aliyun.com' # 可选,ntp服务器,默认是"pool.ntp.org" 这里使用阿里服务器
ntptime.settime() # 修改设备时间,到这就已经设置好了
except Exception as e:
print("同步ntp时间错误",repr(e))
执行定时器
1000*60*60*8毫秒,代表8小时
tim12.init(period=1000*60*60*8, mode=Timer.PERIODIC, callback=lambda t:sync_ntp())
同样是设置一个定时器,时间为1s执行一次
依赖于之前的环境
参考文章
《MicroPython[ESP32-S3]:开启WIFI设置NTP时间同步并显示当前日期和周》
设置定时器
tim15 = Timer(15)
定义函数
def refrash_date():
localtime_now=time.localtime()
time_str='%s-%s-%s-%s:%s:%s'%(localtime_now[0],zero_str(localtime_now[1]),zero_str(localtime_now[2]),zero_str(localtime_now[3]),zero_str(localtime_now[4]),zero_str(localtime_now[5]))
label_date.set_text(time_str)
设置1秒执行一次
tim15.init(period=1000, mode=Timer.PERIODIC, callback=lambda t:refrash_date())
注意事项
-
不建议在定时器回调函数中创建变量,比较消耗内存,建议使用全局变量
-
不要在终端里print,会干扰回调执行效率,以及影响程序中断,同时也较为消耗内存
END