前面(1)~(5)节一套连招下来,我们的桌面时钟已经有模有样了,但是看上去总感觉怪怪的。我们把横线和竖线加上,把时间、天气、星座分隔开,把整个屏幕分割成三块,看上去就会舒服很多:
tfttext.hline(0,185,240,st7789py.color565(0,0,255))
tfttext.vline(119,0,185,st7789py.color565(255,0,0))
第一行里面,0代表从第0列开始显示,185表示从第185行开始显示,240代表长度。
第二行里面,119代表从第119列开始显示,0表示从第0行开始显示,185代表高度。
差不多了,这是最终版代码:
from machine import Pin,SPI
import st7789py
import time
import vga2_bold_16x32 as font
import vga2_8x16 as font1
import st7789_itprojects
import time,ntptime,network
import _thread
import urequests,ujson
spi = SPI(1,baudrate = 40_000_000,polarity = 1,sck = Pin(2),mosi = Pin(3),miso = None)
# 此处reset对应屏幕RES所接的开发板的GPIO10脚,dc对应屏幕DC所接的开发板的GPIO6脚
tfttext = st7789py.ST7789(spi,320,240,reset = Pin(10,Pin.OUT),dc = Pin(6,Pin.OUT),cs = None,backlight = None,rotation = 0) #rotation 方向0-3方位
tfttext.fill(st7789py.color565(0,0,0))
tft = st7789_itprojects.ST7889_Image(spi, dc=Pin(6), cs=None, rst=Pin(10))
tft.fill(st7789_itprojects.color565(0,0, 0)) # 背景设置为黑色
def wifi_main():
global inif
wifi=network.WLAN(network.STA_IF) #WIFI模式
if not wifi.isconnected():
print('wifi ing......')
wifi.active(True)
wifi.connect('laboratory','m17826804692n') #连接WIFI
while not wifi.isconnected():
tfttext.text(font1,'wifi failed',50,204,st7789py.color565(255,0,0),st7789py.color565(0,0,0))
pass
print('Wifi connection succeeded')
print('network config:', wifi.ifconfig())
def timeconfirm():
xingqi=['Today is Monday','Today is Tuesday','Today is Wednesday','Today is Thursday','Today is Friday','Today is Saturday','Today is Sunday']
while True: #时间校准
try:
print('time ing')
ntptime.settime()
print('time ok')
break;
except:
print('time no')
time.sleep(1)
mytime=time.localtime()
myhour='%d:%d'%(mytime[3]+8,mytime[4])
mydate='%d - %d - %d'%(mytime[0],mytime[1],mytime[2])
return mydate,myhour,xingqi[mytime[6]],mytime[1],mytime[2],mytime[3]+8
def show_img(m):
with open("selwe_dat/"+str(m)+".dat", "rb") as f:
for row in range(64):
buffer = f.read(128)
tft.show_img(160,row+30,224,row+30, buffer)
def star_img(m):
with open("star_dat/star"+str(m)+".dat", "rb") as f:
for row in range(64):
buffer = f.read(128)
tft.show_img(30,row+20,94,row+20, buffer)
def tianqi():
data = urequests.get("https://api.seniverse.com/v3/weather/now.json?key=S4RyXhsHlxmLksBp9&location=ningbo&language=en&unit=c")
weth=ujson.loads(data.text)
print(weth)
return weth["results"][0]["now"]["text"]
def tianqi_show(m):
if str(tianqi())!='Fair' and str(tianqi())!='Partly Cloudy' and str(tianqi())!='Mostly Cloudy':
show_img(str(tianqi()))
else:
if m>=6 and m<=18:
show_img(str(tianqi()))
else:
show_img('ye'+tianqi())
if __name__=="__main__":
wifi_main()
ntptime.host = 'ntp.ntsc.ac.cn'
tfttext.hline(0,185,240,st7789py.color565(0,0,255))
tfttext.vline(119,0,185,st7789py.color565(255,0,0))
start_time = time.time()
timeshow=timeconfirm()
tfttext.text(font,timeshow[0],10,204,st7789py.color565(128,0,128),st7789py.color565(0,0,0))
tfttext.text(font,timeshow[1],80,246,st7789py.color565(255,1922,203),st7789py.color565(0,0,0))
tfttext.text(font1,timeshow[2],55,288,st7789py.color565(255,128,0),st7789py.color565(0,0,0))
if timeshow[4]<=23:
if timeshow[3]>=4:
star_img(timeshow[3]-3)
else:
star_img(timeshow[3]+9)
else:
if timeshow[3]>=4:
star_img(timeshow[3]-2)
else:
star_img(timeshow[3]+10)
tianqi_show(int(timeshow[5]))
while True:
timeshow=timeconfirm()
tfttext.text(font,timeshow[0],6,204,st7789py.color565(128,0,128),st7789py.color565(0,0,0))
tfttext.text(font,timeshow[1],80,246,st7789py.color565(255,1922,203),st7789py.color565(0,0,0))
tfttext.text(font1,timeshow[2],55,288,st7789py.color565(255,128,0),st7789py.color565(0,0,0))
if timeshow[4]<=23:
if timeshow[3]>=4:
star_img(timeshow[3]-3)
else:
star_img(timeshow[3]+9)
else:
if timeshow[3]>=4:
star_img(timeshow[3]-2)
else:
star_img(timeshow[3]+10)
if time.time()-start_time>=1200:
tianqi_show(int(timeshow[5]))
start_time=time.time()
else:
pass
说说不足吧:第一个就是wifi的接入,在程序里面是写定住的,其实我本来的想法是再弄个蓝牙,然后通过蓝牙输入wifi的名称和密码,尚在开发中,当然也希望有会的大佬能和我交流下。第二个就是,我嫌做中文字模太麻烦,所以一直在投机取巧,也希望有大佬能在我程序里面改进。