矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1027|回复: 6

用esp32山寨一个网络时钟

[复制链接]
     
发表于 2025-1-26 14:35:23 | 显示全部楼层 |阅读模式
今天用esp32山寨一个网络时钟成功!

用的是thoon4.17.1版本。
安装网上一高手的固件和sy7735库,
运行正常。



我的网络时钟1.jpg
     
 楼主| 发表于 2025-1-26 14:39:01 | 显示全部楼层
main.py如下:


#正常运行
import machine
from machine import Pin, I2C, RTC,Timer,SPI
from st7735 import ST7735
import ntptime
import network


def connect():
    wifi = network.WLAN(network.STA_IF)
    if not wifi.isconnected():
        wifi.active(True)
        wifi.connect('网络名称', '密码')
        while not wifi.isconnected():
            pass
    print('network config:',wifi.ifconfig())

week = ['  一', 'Tuesday', 'Wednesay', 'Thursday', 'Friday', 'Saturday', '日']
time_list = ['', '', '']
#i2c = machine.SoftI2C(sda=Pin(13), scl=Pin(14))
# 初始化SPI
spi=SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13))
lcd = ST7735(128, 160, spi,dc=Pin(16),cs=Pin(18),rst=Pin(17),rot=0,bgr=0)
lcd.font_load('./GB2312-24.fon')

rtc = RTC()
if rtc.datetime()[0] != 2025:
    rtc.datetime()

def RTC_Run(tim):
    datetime = rtc.datetime() # 获取当前时间
    #print(datetime)
    lcd.fill(0x0000) # 清屏显示黑色背景
    lcd.text('lxa0的网络时钟',23,0,0xf7ff)
   
    lcd.text(str(datetime[0]) + '-' + str(datetime[1]) + '-' +
    str(datetime[2]) + ' ' + week[datetime[3]], 28, 18,0x451)
    # 显示时间需要判断时、分、秒的值否小于 10,如果小于 10,则在显示前面补“0”以
    # 达到较佳的显示效果
    for i in range(4, 7):
        if datetime[i] < 10:
            time_list[i - 4] = "0"
        else:
            time_list[i - 4] = ""
    # 显示时间
    lcd.text(time_list[0] + str(datetime[4]) + ':' + time_list[1] + str(datetime[5]) + ':' + time_list[2] + str(datetime[6]), 40, 35,0xF800)
    lcd.show()
   
connect()
ntptime.NTP_DELTA = 3155644800 #设置北京时间
ntptime.host = 'ntp.aliyun.com' #设置校时服务器
ntptime.settime()
#开启 RTOS 定时器
tim = Timer(-1)
tim.init(period=300, mode=Timer.PERIODIC, callback=RTC_Run) #周期 300ms


回复 支持 反对

使用道具 举报

     
发表于 2025-1-26 17:55:08 | 显示全部楼层
建议把代码贴在“代码文字”框内,便于坛友阅读:

  1. #正常运行
  2. import machine
  3. from machine import Pin, I2C, RTC,Timer,SPI
  4. from st7735 import ST7735
  5. import ntptime
  6. import network


  7. def connect():
  8.     wifi = network.WLAN(network.STA_IF)
  9.     if not wifi.isconnected():
  10.         wifi.active(True)
  11.         wifi.connect('网络名称', '密码')
  12.         while not wifi.isconnected():
  13.             pass
  14.     print('network config:',wifi.ifconfig())

  15. week = ['  一', 'Tuesday', 'Wednesay', 'Thursday', 'Friday', 'Saturday', '日']
  16. time_list = ['', '', '']
  17. #i2c = machine.SoftI2C(sda=Pin(13), scl=Pin(14))
  18. # 初始化SPI
  19. spi=SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13))
  20. lcd = ST7735(128, 160, spi,dc=Pin(16),cs=Pin(18),rst=Pin(17),rot=0,bgr=0)
  21. lcd.font_load('./GB2312-24.fon')

  22. rtc = RTC()
  23. if rtc.datetime()[0] != 2025:
  24.     rtc.datetime()

  25. def RTC_Run(tim):
  26.     datetime = rtc.datetime() # 获取当前时间
  27.     #print(datetime)
  28.     lcd.fill(0x0000) # 清屏显示黑色背景
  29.     lcd.text('lxa0的网络时钟',23,0,0xf7ff)
  30.    
  31.     lcd.text(str(datetime[0]) + '-' + str(datetime[1]) + '-' +
  32.     str(datetime[2]) + ' ' + week[datetime[3]], 28, 18,0x451)
  33.     # 显示时间需要判断时、分、秒的值否小于 10,如果小于 10,则在显示前面补“0”以
  34.     # 达到较佳的显示效果
  35.     for i in range(4, 7):
  36.         if datetime[i] < 10:
  37.             time_list[i - 4] = "0"
  38.         else:
  39.             time_list[i - 4] = ""
  40.     # 显示时间
  41.     lcd.text(time_list[0] + str(datetime[4]) + ':' + time_list[1] + str(datetime[5]) + ':' + time_list[2] + str(datetime[6]), 40, 35,0xF800)
  42.     lcd.show()
  43.    
  44. connect()
  45. ntptime.NTP_DELTA = 3155644800 #设置北京时间
  46. ntptime.host = 'ntp.aliyun.com' #设置校时服务器
  47. ntptime.settime()
  48. #开启 RTOS 定时器
  49. tim = Timer(-1)
  50. tim.init(period=300, mode=Timer.PERIODIC, callback=RTC_Run) #周期 300ms
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2025-1-26 18:27:02 | 显示全部楼层
本帖最后由 scoopydoo 于 2025-1-26 19:05 编辑

顺便再说一句,你这个代码肯定不是高手写的,就连俺这个 Python 永远的初学者都能看出来这代码不行。

举个栗子,给分和秒前面补零的代码,俺在 Python 中是这样写的:

  1. TIMEZONE = +8  # Beijing, China (GMT+8)
  2. now = time.localtime()
  3. hour, min, sec = (now[3] + TIMEZONE) % 24, now[4], now[5]
  4. print(f"{hour}:{min:02d}:{sec:02d}")
复制代码


回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-26 21:31:38 | 显示全部楼层
scoopydoo 发表于 2025-1-26 18:27
顺便再说一句,你这个代码肯定不是高手写的,就连俺这个 Python 永远的初学者都能看出来这代码不行。

举 ...


对高手的认定:比我厉害的我就认定他是高手。
你也是我眼里的高手。
回复 支持 反对

使用道具 举报

     
发表于 2025-1-26 21:43:18 | 显示全部楼层
lxa000 发表于 2025-1-26 21:31
对高手的认定:比我厉害的我就认定他是高手。
你也是我眼里的高手。

俺是永远的初学者,一边学一边忘,永远都成不了高手!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-27 15:01:49 | 显示全部楼层
scoopydoo 发表于 2025-1-26 17:55
建议把代码贴在“代码文字”框内,便于坛友阅读:

还没用过代码文字框。
刚才找到了 。
下次就可以用了 。
谢谢 !
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 00:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表