[micropython]esp32 s3驅(qū)動(dòng)st7789 1.69寸的240x280屏幕,注意初始化函數(shù)
from machine import Pin, SoftSPI,SPI
from st7789 import ST7789
from st7789 import CYAN
from st7789 import BLACK
from st7789 import BLUE
#hspi = SPI(2, baudrate=80000000, polarity=1, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
'''
scl 14
sda 13
rst 9
dc 8
cs 11
blk 7
'''
sck=Pin(14, Pin.OUT)
mosi=Pin(13, Pin.OUT)
miso=Pin(12, Pin.OUT)
rst =Pin(9, Pin.OUT)
dc=Pin(8, Pin.OUT)
cs=Pin(11, Pin.OUT)
blk=Pin(7, Pin.OUT)
#rst.on() #一定要off才有反映
cs.off()
blk.on()
#display = ST7789(hspi,320,240,reset=Pin(9),dc=Pin(8))
#display.fill(CYAN)
import lvgl as lv
from ili9XXX import st7789
import fs_driver
import time
#gc.collect()
#0.這個(gè)是關(guān)鍵的初始化函數(shù),支持TB購(gòu)買(mǎi)的1.69寸240x280的spi屏幕
disp=st7789(
? ? mosi=13,
? ? clk=14,
? ? cs=11,
? ? dc=8,
? ? rst=9,
? ? mhz=80,
? ? factor=16,#這個(gè)參數(shù)一定要設(shè)置為16,這樣才能支持240x280的屏幕
? ? #hybrid=True,
? ? width=240,
? ? height=280,
? ? start_x=0,
? ? start_y=20,
? ? double_buffer=1,
? ? rot=0,
? ? #half_duplex=False,
? ? #initialize=True
? ? )
# 1. 創(chuàng)建顯示screen對(duì)象。將需要顯示的組件添加到這個(gè)screen才能顯示
scr = lv.obj()? # scr====> screen 屏幕
fs_drv = lv.fs_drv_t()
fs_driver.fs_register(fs_drv, 'S')
scr = lv.scr_act()
scr.clean()
# 2. 封裝要顯示的組件
class MyWidget():
? ? def __init__(self, scr):
? ? ? ? # 創(chuàng)建滑塊slider組件
? ? ? ? self.slider = lv.slider(scr)
? ? ? ? self.slider.set_width(180)? # 設(shè)置滑塊的長(zhǎng)度
? ? ? ? # self.slider.set_range(10, 50)? # 默認(rèn)值是0-100
? ? ? ? self.slider.center()? # 在窗口的中間位置
? ? ? ? self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)? # 添加事件的回調(diào)函數(shù)
?
? ? ? ? # 創(chuàng)建一個(gè)標(biāo)簽label
? ? ? ? self.label = lv.label(scr)
? ? ? ? self.label.set_text("0")? # 默認(rèn)值
? ? ? ? self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -15)? # label的中間與滑塊的上外邊框中間對(duì)齊,然后y向上15像素 x不變
?
? ? def slider_event_cb(self, evt):
? ? ? ? slider = evt.get_target()
? ? ? ? # 修改label的值
? ? ? ? self.label.set_text(str(slider.get_value()))
?
?
?
# 3. 創(chuàng)建要顯示的組件
MyWidget(scr)
?
# 4. 顯示screen對(duì)象中的內(nèi)容
lv.scr_load(scr)
# ------------------------------ 看門(mén)狗,用來(lái)重啟ESP32設(shè)備 --start------------------------
try:
? ? from machine import WDT
? ? wdt = WDT(timeout=5000)? # enable it with a timeout of 2s
? ? print("提示: 按下鍵盤(pán)Ctrl+C鍵結(jié)束程序")
? ? while True:
? ? ? ? wdt.feed()
? ? ? ? time.sleep(0.9)
except KeyboardInterrupt as ret:
? ? print("程序停止運(yùn)行,ESP32已經(jīng)重啟...")
? ? time.sleep(10)
# ------------------------------ 看門(mén)狗,用來(lái)重啟ESP32設(shè)備 --stop-------------------------