bilibili-视频演示
本文记录NTP时间同步并显示日期
-
开启WIFI
-
同步NTP时间
-
LVGL显示当前日期(年月日时分秒)和周几
官网文档
https://docs.micropython.org/en/latest/esp32/quickref.html#networking
文档已有示例,只需要修改对应的wifi名称和密码
ssid为wifi名
key为wifi密码
def do_connect():
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('ssid', 'key')
while not wlan.isconnected():
pass
print('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 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))
同步后查看当前时间
import time
localtime_now=time.localtime()
print("localtime_now",localtime_now)
代码运行
Double buffer
ILI9488 initialization completed
FT6X36 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=None
if num>9:
num_str=str_num
else:
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=None
if num>9:
num_str=str_num
else:
num_str="0"+str(str_num)
return num_str
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])
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=None
if num>9:
num_str=str_num
else:
num_str="0"+str(str_num)
return num_str
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]))
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点亮屏幕并设置触摸事件》