【掌控】网络授时的数字时钟

2018-12-258339
精华项目
AI 快速预览详细 收起
本文介绍了如何使用掌控板实现网络授时的数字时钟。通过导入ntptime和network模块,设置WiFi连接,并使用time.localtime()函数获取当前时间。重点讲解了如何解决ntp链接超时问题,使初学者能够轻松获取准确时间。
早些时候写过一个帖子,讲到网络授时数字时钟,其实代码都是抄小唐的,我只是改了一小点,然后拿出去显摆。
出来混,早晚要还的,现在终于到把这段代码消化的时候了。

【掌控】网络授时的数字时钟图1

写代码时常常用到时间模块

import time
time 模块提供用于获取当前时间和日期、测量时间间隔和延迟的函数。


这个帖子,主要用到一个新的(对我来说)函数。


【新知】


time.localtime()

将一个以秒计的时间转换为一个包含下列内容的8元组:(年、月、日、小时、分钟、秒、一周中某日、一年中某日)。若未提供秒或为None,则使用RTC时间。

  • 年包括世纪(例如2014)
  • 月为 1-12
  • 日为 1-31
  • 小时为 0-23
  • 分钟为 0-59
  • 秒钟 0-59
  • 周中某日为 0-6 (对应周一到周日)
  • 年中某日为 1-366
【掌控】网络授时的数字时钟图2
【代码】
[mw_shl_code=python,true]import ntptime,network     # 导入国际标准时间、网络模块
from mpython import*
from machine import Timer  # 导入计时模块

mywifi=wifi()
mywifi.connectWiFi("ssid","password")  # WiFi设置

try:
    ntptime.settime()
except OSError :
    oled.DispChar("ntp链接超时,请重启!",0,20)
    oled.show()
else:

    def get_time(_):   #定义时钟刷屏时间
        t = time.localtime()
        print("%d年%d月%d日 %d:%d:%d"%(t[0],t[1],t[2],t[3],t[4],t[5]))
        oled.DispChar("{}年{}月{}日" .format(t[0],t[1],t[2]),20,8)
        oled.DispChar("{}:{}:{}" .format(t[3],t[4],t[5]),38,25)
        oled.show()
        oled.fill(0)

    tim1 = Timer(1)

    tim1.init(period=1000, mode=Timer.PERIODIC, callback=get_time)[/mw_shl_code]

学习了前面网络授时模拟钟表的内容,其它的代码都挺明白了,重点是:

def get_time(_):   #定义时钟刷屏时间
        t = time.localtime()
        print("%d年%d月%d日 %d:%d:%d"%(t[0],t[1],t[2],t[3],t[4],t[5]))
        oled.DispChar("{}年{}月{}日" .format(t[0],t[1],t[2]),20,8)
        oled.DispChar("{}:{}:{}" .format(t[3],t[4],t[5]),38,25)
        oled.show()
        oled.fill(0)

【time.localtime()

上面有资料,将一个以秒计的时间转换为一个包含下列内容的8元组:(年、月、日、小时、分钟、秒、一周中某日、一年中某日)。若未提供秒或为None,则使用RTC时间。
  • 年包括世纪(例如2014)
  • 月为 1-12
  • 日为 1-31
  • 小时为 0-23
  • 分钟为 0-59
  • 秒钟 0-59
  • 周中某日为 0-6 (对应周一到周日)
  • 年中某日为 1-366

print("%d年%d月%d日 %d:%d:%d"%(t[0],t[1],t[2],t[3],t[4],t[5]))
这句代码是让程序REPL同步输出time.localtime()给出的8元组内容中的前6项。
%d   格式符    十进制整数  依次对应后面()内元组的数据。


oled.DispChar("{}年{}月{}日" .format(t[0],t[1],t[2]),20,8)

格式化字符,{}对应填入format()元组中的内容

好吧,新手小白,每学习一点都挺困难。


【掌控】网络授时的数字时钟图3



创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
碧海
碧海
这个函数以前还真不知道
44107900
44107900
谢谢分享!
- 没有更多了 -