785|1

9

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第4期】进阶任务 [复制链接]

  本帖最后由 eew_uscYT9 于 2024-2-14 23:25 编辑

任务要求:从NTP服务器(注意数据交互格式的解析)同步时间,获取时间送显示屏(串口)显示。

 

NTP服务器:NTP 是用于同步网络中计算机时间的协议,全称为网络时间协议(Network Time Protocol)。在我们日常使用的电子设备中,只要能联网的,大都需要连接到 NTP 服务器,确保自己的时间和世界上的一致。

 

借鉴了@StreakingJerry大佬的帖子和电子烂人的帖子完成了ntp服务器时间的同步
代码如下
import ntptime
#import library
from machine import Pin,SPI,PWM
import framebuf
import usocket 
import network
import time

#LED define
led = Pin(25, Pin.OUT)

BL = 13
DC = 8
RST = 12
MOSI = 11
SCK = 10
CS = 9
"""
W5x00 chip initialization.
 
param: None
returns: None

"""
def w5x00_init():
    #spi init
    spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
    nic = network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pin
    nic.active(True)#network active
    nic.ifconfig(('192.168.1.20','255.255.255.0','192.168.1.1','8.8.8.8'))#Set static network address information
    while not nic.isconnected():
        time.sleep(1)
        print(nic.regs())#Print register information
        
    #Print network address information
    print("IP Address:",nic.ifconfig()[0])
    print("Subnet Mask:",nic.ifconfig()[1])
    print("Gateway:",nic.ifconfig()[2])
    print("DNS:",nic.ifconfig()[3])
    return nic

def dns_query(domain):
    ip = usocket.getaddrinfo(domain, 80,0, usocket.SOCK_STREAM)
    return ip[0][4][0]


class LCD_1inch14(framebuf.FrameBuffer):
    def __init__(self):
        self.width = 240
        self.height = 135
        
        self.cs = Pin(CS,Pin.OUT)
        self.rst = Pin(RST,Pin.OUT)
        
        self.cs(1)
        self.spi = SPI(1)
        self.spi = SPI(1,1000_000)
        self.spi = SPI(1,10000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None)
        self.dc = Pin(DC,Pin.OUT)
        self.dc(1)
        self.buffer = bytearray(self.height * self.width * 2)
        super().__init__(self.buffer, self.width, self.height, framebuf.RGB565)
        self.init_display()
        
        self.red   =   0x07E0
        self.green =   0x001f
        self.blue  =   0xf800
        self.white =   0xffff
        
    def write_cmd(self, cmd):
        self.cs(1)
        self.dc(0)
        self.cs(0)
        self.spi.write(bytearray([cmd]))
        self.cs(1)

    def write_data(self, buf):
        self.cs(1)
        self.dc(1)
        self.cs(0)
        self.spi.write(bytearray([buf]))
        self.cs(1)

    def init_display(self):
        """Initialize dispaly"""  
        self.rst(1)
        self.rst(0)
        self.rst(1)
        
        self.write_cmd(0x36)
        self.write_data(0x70)

        self.write_cmd(0x3A) 
        self.write_data(0x05)

        self.write_cmd(0xB2)
        self.write_data(0x0C)
        self.write_data(0x0C)
        self.write_data(0x00)
        self.write_data(0x33)
        self.write_data(0x33)

        self.write_cmd(0xB7)
        self.write_data(0x35) 

        self.write_cmd(0xBB)
        self.write_data(0x19)

        self.write_cmd(0xC0)
        self.write_data(0x2C)

        self.write_cmd(0xC2)
        self.write_data(0x01)

        self.write_cmd(0xC3)
        self.write_data(0x12)   

        self.write_cmd(0xC4)
        self.write_data(0x20)

        self.write_cmd(0xC6)
        self.write_data(0x0F) 

        self.write_cmd(0xD0)
        self.write_data(0xA4)
        self.write_data(0xA1)

        self.write_cmd(0xE0)
        self.write_data(0xD0)
        self.write_data(0x04)
        self.write_data(0x0D)
        self.write_data(0x11)
        self.write_data(0x13)
        self.write_data(0x2B)
        self.write_data(0x3F)
        self.write_data(0x54)
        self.write_data(0x4C)
        self.write_data(0x18)
        self.write_data(0x0D)
        self.write_data(0x0B)
        self.write_data(0x1F)
        self.write_data(0x23)

        self.write_cmd(0xE1)
        self.write_data(0xD0)
        self.write_data(0x04)
        self.write_data(0x0C)
        self.write_data(0x11)
        self.write_data(0x13)
        self.write_data(0x2C)
        self.write_data(0x3F)
        self.write_data(0x44)
        self.write_data(0x51)
        self.write_data(0x2F)
        self.write_data(0x1F)
        self.write_data(0x1F)
        self.write_data(0x20)
        self.write_data(0x23)
        
        self.write_cmd(0x21)

        self.write_cmd(0x11)

        self.write_cmd(0x29)

    def show(self):
        self.write_cmd(0x2A)
        self.write_data(0x00)
        self.write_data(0x28)
        self.write_data(0x01)
        self.write_data(0x17)
        
        self.write_cmd(0x2B)
        self.write_data(0x00)
        self.write_data(0x35)
        self.write_data(0x00)
        self.write_data(0xBB)
        
        self.write_cmd(0x2C)
        
        self.cs(1)
        self.dc(1)
        self.cs(0)
        self.spi.write(self.buffer)
        self.cs(1)
def main():
    pwm = PWM(Pin(BL))
    pwm.freq(1000)
    pwm.duty_u16(32768)#max 65535

    LCD = LCD_1inch14()
    nic = w5x00_init()
    #color BRG
    #ip = dns_query("www.baidu.com")
    #print("IP address is %s"%(ip))
    LCD.fill(LCD.white)
    
    print(rtc.datetime())

    LCD.show()
 
    time.sleep(1)
    LCD.fill(0xFFFF)    


    while True:
        try:
            ntptime.settime()
            t = time.localtime(time.time() + 8*3600)
            time.sleep_ms(1000)
            break
        except:
            print("Can not get time!")
    print("time: %s-%s-%s %s:%s:%s" % (t[0],t[1],t[2],t[3],t[4],t[5]))
    LCD.text("Follow me NO.4",20,20,LCD.red)
    LCD.text("%s-%s-%s"% (t[0],t[1],t[2]),20,40,LCD.blue)
    LCD.text('%s:%s:%s'% (t[3],t[4],t[5]),20,60,LCD.blue)
    LCD.show()        
if __name__ == "__main__":
    main()







效果如下图所示

 

 

 

最新回复

ntp服务器时间的同步效果,还行吧,,,,   详情 回复 发表于 2024-2-16 22:27
点赞 关注
 
 

回复
举报

6614

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

ntp服务器时间的同步效果,还行吧,,,,

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
如何设计2个按键同时按的键盘扫描C程序

4*4键盘扫描C程序,每次只能扫到一个按键,如果要两个按键同时按,是不是先按下去的按键是进入中断

TINA 高级仿真

本帖最后由 dontium 于 2015-1-23 11:35 编辑 TINA是一款开放的、功能完整的仿真软件,附件中介绍的是一些常用的高级仿真方法。 ...

430驱动继电器死机问题~

小弟做了一块板子,用msp430f149通过继电器来驱动2路220V的负载,开始试验的时候用台灯、电脑显示器等做负载,运行的还比较正常 ...

【暑假酷学】写一个程序(工程项目)该怎么一步步去做?

昨晚上写这个帖子的时候写的有点随意,呵呵,就像一个没有做好 规划 和 设计的程序。这里,请允许我补充一些说明。 尽 ...

MatLab 命令大全.pdf

MatLab 命令大全.pdf

运放问题

如图是一个低端电流检测电路,主要检测1mA到1A的电流变化,目前测试几种385表现的情况各不相同,有的358可以精确放大出1mA的电流 ...

【AT-START-F425测评】+硬件SPI与软件模拟SPI速率对比

本帖最后由 freeelectron 于 2022-4-19 17:31 编辑 1、前言 本文使用AT32F425驱动RC522来测试SPI1的速率,关于RC522的详细 ...

LTspice .subckt(3) 反向图纸

变压器 subckt 代码 638335 变压器 subckt 代码 *nominal .SUBCKT 760301108 1 2 3 4 ...

【MPS商城钜惠体验季】开箱

MPS的主打产品就是电源管理了,趁着活动参加一波。快递是真的快,国内仓库顺丰特快。 包装把我惊到了,这么大一个箱子。 6 ...

第三代半导体氮化镓65W快充芯片已经成为行业主流?

氮化镓(GaN)功率芯片将多个电力电子功能集成到一颗GaN芯片中,可有效提高产品充电速度、效率、可靠性和成本效益。在很多情况下 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表