rzyzzxw 发表于 2018-12-25 09:22:20

【掌控】网络授时的模拟时钟

我决定把网络时钟做为学习掌控网络功能的第一关。
它不用调用API,不调用很多库。
哈哈,就是它了。


【第一关】
联上网络:

from mpython import *       #导入mpython模块

mywifi=wifi()   #实例化wifi类
mywifi.connectWiFi("ssid","password")# WiFi连接,设置ssid 和password

oled.fill(0)
oled.DispChar('联网成功,IP为:',0,0)
oled.DispChar(str(mywifi.sta.ifconfig()),0,16)
oled.show()


【知识点】MicroPython network 模块用于配置WiFi连接。有两个WiFi接口,STA模式即工作站模式(ESP32连接到路由器), AP模式提供接入服务(其他设备连接到ESP32)。如需了解MicroPython的网络连接方法,请查阅 network 模块。掌控板以基于network模块封装 mpython.wifi() 类简化wifi连接设置注解实例化wifi()后,会构建 sta 和 ap 两个对象。 sta 对象为工作站模式,通过路由器连接至网络。ap 为AP模式,提供热点接入。
您可以通过以下方式查看网络设置:mywifi.sta.ifconfig()

注解返回值4元组: (IP address, netmask, gateway, DNS)
在上面的代码中,修改oled.DispChar(str(mywifi.sta.ifconfig()),0,16)中[]0为1/2/3,将会显示所接入网络的netmask, gateway, DNS,当然这时候同步修改上一行代码中的文字保持一致。

【网络授时时钟】

代码:
import ntptime,network
from mpython import*
from machine import Timer

mywifi=wifi()
mywifi.connectWiFi("ssid","password")

try:
    ntptime.settime()
except OSError :
    oled.DispChar("ntp链接超时,请重启!",0,20)
    oled.show()
else:
    clock=UI.Clock(64,32,30)

    def Refresh(_):
      clock.settime()
      clock.drawClock()
      oled.show()
      clock.clear()

    tim1 = Timer(1)

    tim1.init(period=1000, mode=Timer.PERIODIC, callback=Refresh)

【学习笔记】
ntptime:NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。

network --- 网络配置该模块提供网络驱动程序和路由配置。此模块中提供了特定硬件的网络驱动程序,用于配置硬件网络接口。

异常处理try...except、raise

本程序中使用了try ....except...else 语句,当没有异常发生时,else中的语句将会被执行。


参考资料:https://www.cnblogs.com/Lival/p/6203111.html

代码中,尝试联网获取网络授时,如果联网没能获取到网络时间,则oled.DispChar("ntp链接超时,请重启!",0,20),否则成功获取到网络时间,则运行模拟时钟程序。
成功获取网络时间后,只要不断电,后面可以离开当前网络环境,时钟准确运行。
   
try:
    ntptime.settime()
except OSError :
    oled.DispChar("ntp链接超时,请重启!",0,20)
    oled.show()
else:
    clock=UI.Clock(64,32,30)

    def Refresh(_):
      clock.settime()
      clock.drawClock()
      oled.show()
      clock.clear()

    tim1 = Timer(1)

    tim1.init(period=1000, mode=Timer.PERIODIC, callback=Refresh)


OSError      操作系统错误

好的,这个模拟时钟代码终于明白了。

{:5_151:}


【小提示】本代码需要最新mpython11.23基础库V1.0支持。

使用中如果出现报错261,请参考【掌控】新技能: clock--模拟时钟https://mc.dfrobot.com.cn/thread-273241-1-1.html
处理。

【12.25更新】
mpython2基础库已经更新到1.0.1,可以直接从软件刷最新库了。

掌控1.0.1固件已经推送,重新打开mPython2软件即可收到
1.0.1固件默认内置了mpython.py(基础库)、tinywebio.py(与app inventor通讯)、labplus_handpy_online.py(掌控在线协议,无需设为默认,用Labplus软件可以直接激活)
注意:板上的代码要备份一下再更新固件,不然会丢掉



页: [1]
查看完整版本: 【掌控】网络授时的模拟时钟