bilibili-视频演示
本文记录NTP时间同步并显示日期
-
开启WIFI
-
同步NTP时间
-
LVGL显示当前日期(年月日时分秒)和周几

官网文档
https://docs.micropython.org/en/latest/esp32/quickref.html#networking
文档已有示例,只需要修改对应的wifi名称和密码
ssid为wifi名
key为wifi密码

def do_connect():import networkwlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():print('connecting to network...')wlan.connect('ssid', 'key')while not wlan.isconnected():passprint('network config:', wlan.ifconfig())
wifi连接

官方文档
https://mpython.readthedocs.io/en/master/library/micropython/ntptime.html

MicroPython Lib ntptime源码地址
https://github.com/micropython/micropython-lib/blob/master/micropython/net/ntptime/ntptime.py

使用方法
引入依赖
import ntptime
设置时区
ntptime.NTP_DELTA = 3155644800
设置NTP服务器
根据网络情况来
官方默认为pool.ntp.org,可以改为国内源,如阿里,淘宝等
阿里的NTP服务地址 ntp1.aliyun.com
ntptime.host = 'ntp1.aliyun.com'
封装方法
因为NTP同步时间不是每次都能成功,所以要做容错处理
使用try except
def sync_ntp():print("开始同步网络时间")import ntptimetry:ntptime.NTP_DELTA = 3155644800 # 可选 UTC+8偏移时间(秒),不设置就是UTC0ntptime.host = 'ntp1.aliyun.com' # 可选,ntp服务器,默认是"pool.ntp.org" 这里使用阿里服务器ntptime.settime() # 修改设备时间,到这就已经设置好了except Exception as e:print("同步ntp时间错误",repr(e))
同步后查看当前时间
import timelocaltime_now=time.localtime()print("localtime_now",localtime_now)
代码运行
Double bufferILI9488 initialization completedFT6X36 touch IC ready (fw id 0x3 rel 1, lib 300A)connecting to network...network config: ('192.168.1.182', '255.255.255.0', '192.168.1.1', '192.168.1.1')开始同步网络时间localtime_now (2023, 5, 31, 10, 7, 34, 2, 151)

time.localtime结果说明
localtime_now(2023, 5, 31, 10, 7, 34, 2, 151)
依次是(年,月,日,时,分,秒,0-6,0-365)
前六位年月日时分秒,需要时获取对应的值即可
0-6代表本周周几,0为周一,1为周二,依次类推
0-365代表本年的第几天,1月1日为0,1月2日为1,依次类推
转换为指定的字符串(年-月-日 时:分:秒)
localtime_now=time.localtime()print("localtime_now",localtime_now)time_str='%s-%s-%s-%s:%s:%s'%(localtime_now[0],localtime_now[1],localtime_now[2],localtime_now[3],localtime_now[4],localtime_now[5])print("time_str",time_str)
运行结果
注意,默认年月日没有补零
也就是会出现 2023-1-1 1:5:3这种时间
但实际上想要展示的是2023-01-01 01:05:03,看起来会舒服一些
localtime_now (2023, 5, 31, 10, 15, 19, 2, 151)time_str 2023-5-31-10:15:19

设置补零函数
# 补零函数def zero_str(str_num):num=int(str_num)num_str=Noneif num>9:num_str=str_numelse:num_str="0"+str(str_num)return num_str
补零效果
time_str 2023-05-31-10:20:32
代码
def zero_str(str_num):num=int(str_num)num_str=Noneif num>9:num_str=str_numelse:num_str="0"+str(str_num)return num_strlocaltime_now=time.localtime()print("localtime_now",localtime_now)# time_str='%s-%s-%s-%s:%s:%s'%(localtime_now[0],localtime_now[1],localtime_now[2],localtime_now[3],localtime_now[4],localtime_now[5])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]))print("time_str",time_str)

获取当天星期几
设置列表
week_arr=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
直接按索引获取对应的值即可
week_arr=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]week_text=week_arr[localtime_now[6]]
值为
week_text 星期三

获取屏幕实例并清屏
每次启动之后先把屏幕清空
scr = lv.scr_act()scr.clean()
创建LVGL Label(文本)
label_date = lv.label(scr)
设置文本内容
label_date.set_text("str")
设置文本显示在屏幕的x坐标50,y坐标80
备注:横屏为480*320
label_date.set_x(50)label_date.set_y(80)
设置日期显示
# 补零函数def zero_str(str_num):num=int(str_num)num_str=Noneif num>9:num_str=str_numelse:num_str="0"+str(str_num)return num_strlocaltime_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]))scr = lv.scr_act()scr.clean()label_date = lv.label(scr)label_date.set_text(time_str)label_date.set_x(50)label_date.set_y(80)
实际效果

同样的,显示今天周几
代码如下
localtime_now=time.localtime()week_list=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]week_str=week_list[localtime_now[6]]label_week = lv.label(scr)label_week.set_text(week_str)label_week.set_x(50)label_week.set_y(50)
实际效果

现在还不能显示中文
没有经过中文字体处理,会显示乱码

到此为止,已经实现NTP同步,并且显示日期和星期
后期再整理
-
定时器,时间按秒刷新文字
-
设置中文字体,如沐瑶手写体并展示在屏幕
往期文章参考
《MicroPython[ESP32-S3]:刷入LVGL+MicroPython固件支持16M 外扩flash/8M PSRAM》
《MicroPython[ESP32-S3]:使用esptool刷入固件,支持lvgl》
《MicroPython[ESP32-S3]:LVGL点亮屏幕并设置触摸事件》