lxa000 发表于 2025-1-26 14:35:23

用esp32山寨一个网络时钟

今天用esp32山寨一个网络时钟成功!

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



lxa000 发表于 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() != 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) + '-' + str(datetime) + '-' +
    str(datetime) + ' ' + week], 28, 18,0x451)
    # 显示时间需要判断时、分、秒的值否小于 10,如果小于 10,则在显示前面补“0”以
    # 达到较佳的显示效果
    for i in range(4, 7):
      if datetime < 10:
            time_list = "0"
      else:
            time_list = ""
    # 显示时间
    lcd.text(time_list + str(datetime) + ':' + time_list + str(datetime) + ':' + time_list + str(datetime), 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


scoopydoo 发表于 2025-1-26 17:55:08

建议把代码贴在“代码文字”框内,便于坛友阅读:

#正常运行
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() != 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) + '-' + str(datetime) + '-' +
    str(datetime) + ' ' + week], 28, 18,0x451)
    # 显示时间需要判断时、分、秒的值否小于 10,如果小于 10,则在显示前面补“0”以
    # 达到较佳的显示效果
    for i in range(4, 7):
      if datetime < 10:
            time_list = "0"
      else:
            time_list = ""
    # 显示时间
    lcd.text(time_list + str(datetime) + ':' + time_list + str(datetime) + ':' + time_list + str(datetime), 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

scoopydoo 发表于 2025-1-26 18:27:02

本帖最后由 scoopydoo 于 2025-1-26 19:05 编辑

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

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

TIMEZONE = +8# Beijing, China (GMT+8)
now = time.localtime()
hour, min, sec = (now + TIMEZONE) % 24, now, now
print(f"{hour}:{min:02d}:{sec:02d}")

lxa000 发表于 2025-1-26 21:31:38

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

举 ...

对高手的认定:比我厉害的我就认定他是高手。
你也是我眼里的高手。

scoopydoo 发表于 2025-1-26 21:43:18

lxa000 发表于 2025-1-26 21:31
对高手的认定:比我厉害的我就认定他是高手。
你也是我眼里的高手。

俺是永远的初学者,一边学一边忘,永远都成不了高手! :'(

lxa000 发表于 2025-1-27 15:01:49

scoopydoo 发表于 2025-1-26 17:55
建议把代码贴在“代码文字”框内,便于坛友阅读:

还没用过代码文字框。
刚才找到了 。
下次就可以用了 。
谢谢 !
页: [1]
查看完整版本: 用esp32山寨一个网络时钟