2018-12-25 09:22:20 [显示全部楼层]
4191浏览
查看: 4191|回复: 0

[入门教程] 【掌控】网络授时的模拟时钟

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


【第一关】
联上网络:

[mw_shl_code=python,true]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]),0,16)
oled.show()[/mw_shl_code]
【掌控】网络授时的模拟时钟图1

【知识点】

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]),0,16)中[]0为1/2/3,将会显示所接入网络的netmask, gateway, DNS,当然这时候同步修改上一行代码中的文字保持一致。

【网络授时时钟】
【掌控】网络授时的模拟时钟图2
代码:
[mw_shl_code=python,true]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)[/mw_shl_code]

【学习笔记】
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)[/mw_shl_code]


OSError        操作系统错误

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




【小提示】本代码需要最新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软件可以直接激活)
注意:板上的代码要备份一下再更新固件,不然会丢掉



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail