MicroPython[ESP32-S3]:硬件定时器设置日期刷新文字显示

bilibili-视频演示

点击本文字,打开哔哩哔哩APP

NO.1
本期功能

以下内容

  1. 设置定时器每8小时请求一次NTP网络时间同步

  2. 设置日期时间按秒刷新显示在屏幕

放一张以前的动图

参考左上角时间动态刷新

img

NO.2
定时器

官网文档

https://docs.micropython.org/en/latest/wipy/tutorial/timer.html

参考文章

MicroPython[ESP32]:ESP32-S3设置ntp时间同步日期显示,哔哩哔哩粉丝计数,博客实时在线人数

  1. 不要使用while Ture来阻塞进程

  2. 不要设置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参数

  1. period为定时时长,单位为毫秒

mode参数

  1. mode=Timer.PERIODIC为循环执行

  2. mode=Timer.ONE_SHOT 为只执行一次

callback参数

  1. callback为回调函数

  2. 想要传参可以使用lambda表达式(不适用的话会默认有一个timer参数,导致传参各种错误)

NO.3
8小时同步NTP时间

参考文章

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())
NO.4
按秒刷新时间显示

同样是设置一个定时器,时间为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())

img

NO.5
Tips

注意事项

  1. 不建议在定时器回调函数中创建变量,比较消耗内存,建议使用全局变量

  2. 不要在终端里print,会干扰回调执行效率,以及影响程序中断,同时也较为消耗内存

END