樹(shù)莓派Pico驅(qū)動(dòng)1.3寸LCD全攻略:從SPI基礎(chǔ)到PIO性能優(yōu)化
1. 項(xiàng)目緣起為什么是Pico LCD 1.3最近在搗鼓一個(gè)需要小型顯示界面的嵌入式項(xiàng)目選型時(shí)一塊名為“Pico LCD 1.3”的屏幕進(jìn)入了我的視野。這名字聽(tīng)起來(lái)就挺有意思它通常指的是適配樹(shù)莓派PicoRP2040微控制器的1.3英寸LCD顯示屏。市面上這類(lèi)屏幕很多但真正上手后你會(huì)發(fā)現(xiàn)它遠(yuǎn)不止是“一塊小屏幕”那么簡(jiǎn)單。對(duì)于很多剛接觸嵌入式開(kāi)發(fā)或者想給Pico項(xiàng)目增加一個(gè)直觀交互界面的朋友來(lái)說(shuō)這塊屏幕是一個(gè)性?xún)r(jià)比和易用性都相當(dāng)不錯(cuò)的起點(diǎn)。它能顯示文字、圖形甚至簡(jiǎn)單的動(dòng)畫(huà)足以勝任大多數(shù)需要狀態(tài)顯示、參數(shù)設(shè)置或簡(jiǎn)易菜單的項(xiàng)目比如便攜式氣象站、迷你游戲機(jī)、智能家居控制器等等。然而從拿到這塊裸屏到讓它穩(wěn)定、高效地顯示你想要的內(nèi)容中間有不少門(mén)道。驅(qū)動(dòng)方式的選擇、顯存的管理、刷新率的優(yōu)化每一個(gè)環(huán)節(jié)都可能成為新手路上的“攔路虎”。我花了不少時(shí)間折騰從最基礎(chǔ)的SPI驅(qū)動(dòng)到利用Pico的PIO可編程IO來(lái)加速踩過(guò)一些坑也總結(jié)出一些能讓開(kāi)發(fā)更順暢的經(jīng)驗(yàn)。這篇文章我就來(lái)詳細(xì)拆解一下“Pico LCD 1.3”這個(gè)項(xiàng)目從硬件連接到軟件驅(qū)動(dòng)再到性能優(yōu)化和實(shí)際應(yīng)用希望能幫你少走彎路。2. 硬件拆解與連接認(rèn)識(shí)你的屏幕首先我們得搞清楚手里這塊“Pico LCD 1.3”到底是什么。市面上常見(jiàn)的版本其核心驅(qū)動(dòng)芯片通常是ST7789或ST7735屏幕分辨率多為240x240或240x135。我手頭這塊是240x240的ST7789驅(qū)動(dòng)款這也是目前最主流、資料最全的一種。注意在購(gòu)買(mǎi)或使用前務(wù)必確認(rèn)你的屏幕具體型號(hào)驅(qū)動(dòng)IC和分辨率這直接關(guān)系到后續(xù)的驅(qū)動(dòng)代碼和初始化序列。屏幕的背面通常會(huì)有一個(gè)小小的FPC柔性印刷電路排線(xiàn)接口。為了方便與Pico連接廠商一般會(huì)提供一個(gè)轉(zhuǎn)接板將屏幕的引腳引出成標(biāo)準(zhǔn)的2.54mm間距排母。我們來(lái)看一下最關(guān)鍵的幾個(gè)引腳VCC/GND電源通常是3.3V。務(wù)必確保與Pico的3.3V輸出連接接5V大概率會(huì)燒毀屏幕。SCL/SDA這是I2C通信引腳但請(qǐng)注意對(duì)于ST7789這類(lèi)彩屏I2C通常僅用于觸摸芯片如果屏幕帶觸摸功能主顯示驅(qū)動(dòng)并不使用I2C。不帶觸摸的屏幕這兩個(gè)引腳可能懸空。SCK/MOSI這是SPI通信的時(shí)鐘線(xiàn)和數(shù)據(jù)線(xiàn)。驅(qū)動(dòng)屏幕顯示主要靠SPI。DC數(shù)據(jù)/命令選擇引腳。這是一個(gè)非常關(guān)鍵的引腳。當(dāng)DC置為低電平時(shí)通過(guò)SPI發(fā)送的數(shù)據(jù)會(huì)被屏幕解釋為命令如設(shè)置顯示區(qū)域、睡眠模式當(dāng)DC置為高電平時(shí)發(fā)送的數(shù)據(jù)則是要顯示的像素?cái)?shù)據(jù)RGB值。如果這個(gè)引腳接錯(cuò)或控制邏輯反了屏幕要么一片空白要么顯示亂碼。RST復(fù)位引腳低電平有效。用于硬件復(fù)位屏幕在初始化時(shí)是必須的步驟。CS片選引腳低電平有效。當(dāng)你有多個(gè)SPI設(shè)備連接到同一組SPI總線(xiàn)時(shí)用這個(gè)引腳來(lái)選擇當(dāng)前要通信的設(shè)備。如果只有屏幕一個(gè)設(shè)備可以將其永久接地始終選中但在代碼中規(guī)范地控制它是一個(gè)好習(xí)慣。BL背光控制引腳。接高電平開(kāi)啟背光接低電平關(guān)閉??梢酝ㄟ^(guò)PWM來(lái)控制背光亮度。典型的連接方式如下以樹(shù)莓派Pico為例Pico LCD 1.3 引腳樹(shù)莓派 Pico GPIO功能說(shuō)明VCC3V3(OUT) (Pin 36)3.3V電源GNDGND (任意如 Pin 38)地SCKGPIO 2SPI時(shí)鐘MOSIGPIO 3SPI主設(shè)備輸出從設(shè)備輸入DCGPIO 4數(shù)據(jù)/命令選擇RSTGPIO 5復(fù)位也可接固定3.3V用軟件命令復(fù)位CSGPIO 1片選BLGPIO 0背光控制PWM可選連接好后硬件部分就準(zhǔn)備好了。接下來(lái)就是讓Pico“認(rèn)識(shí)”并“驅(qū)動(dòng)”這塊屏幕的軟件部分。3. 軟件驅(qū)動(dòng)基礎(chǔ)從SPI初始到點(diǎn)亮第一像素驅(qū)動(dòng)LCD屏幕本質(zhì)上是微控制器按照特定時(shí)序通過(guò)SPI接口向屏幕的驅(qū)動(dòng)芯片ST7789發(fā)送一系列初始化命令和像素?cái)?shù)據(jù)。我們不需要從零編寫(xiě)這些底層協(xié)議通??梢越柚F(xiàn)有的庫(kù)。在MicroPython環(huán)境下st7789_mpy庫(kù)是一個(gè)優(yōu)秀的選擇在C/C環(huán)境下Pico官方SDK的示例中也有相關(guān)驅(qū)動(dòng)或者使用pico_st7789之類(lèi)的第三方庫(kù)。這里我以MicroPython為例因?yàn)樗换バ詮?qiáng)更適合快速原型驗(yàn)證。首先你需要將包含st7789.py驅(qū)動(dòng)文件的庫(kù)上傳到Pico的文件系統(tǒng)中。核心的初始化與顯示流程可以分為以下幾步3.1 導(dǎo)入庫(kù)與引腳定義import machine import st7789 import time # 定義引腳 spi_sck machine.Pin(2, machine.Pin.OUT) spi_mosi machine.Pin(3, machine.Pin.OUT) spi_miso machine.Pin(4, machine.Pin.IN) # 屏幕不需要MISO但SPI對(duì)象需要這個(gè)參數(shù) reset_pin machine.Pin(5, machine.Pin.OUT) dc_pin machine.Pin(4, machine.Pin.OUT) cs_pin machine.Pin(1, machine.Pin.OUT) bl_pin machine.Pin(0, machine.Pin.OUT)3.2 初始化SPI與屏幕對(duì)象# 初始化SPI設(shè)置波特率影響刷新速度 spi machine.SPI(0, baudrate40_000_000, polarity1, phase0, sckspi_sck, mosispi_mosi, misospi_miso) # 初始化屏幕驅(qū)動(dòng)對(duì)象 display st7789.ST7789( spi, 240, # 寬度 240, # 高度 resetreset_pin, dcdc_pin, cscs_pin, backlightbl_pin, rotation0 # 旋轉(zhuǎn)角度0/1/2/3 分別對(duì)應(yīng)0°, 90°, 180°, 270° ) # 執(zhí)行硬件復(fù)位并初始化屏幕內(nèi)部寄存器 display.reset() display.init() # 開(kāi)啟背光 bl_pin.value(1)3.3 繪制基本圖形與文字庫(kù)通常提供了基本的繪圖函數(shù)# 1. 填充整個(gè)屏幕為某種顏色 (RGB565格式如紅色: 0xF800) display.fill(0xF800) # 紅色 time.sleep(1) # 2. 在指定位置畫(huà)一個(gè)矩形 display.fill_rect(50, 50, 100, 100, 0x07E0) # 綠色矩形 time.sleep(1) # 3. 畫(huà)單個(gè)像素 display.pixel(120, 120, 0x001F) # 中心畫(huà)一個(gè)藍(lán)色像素 # 4. 顯示文字需要先有字庫(kù)例如內(nèi)置的bitmap字庫(kù) display.text(“Hello Pico!”, 60, 110, 0xFFFF, 0x0000) # 白色字黑色背景執(zhí)行完上述代碼你應(yīng)該能看到屏幕先變紅然后出現(xiàn)一個(gè)綠色方塊最后顯示“Hello Pico!”的文字。至此最基本的驅(qū)動(dòng)就完成了。實(shí)操心得baudrate波特率參數(shù)對(duì)顯示流暢度影響巨大。一開(kāi)始我用了默認(rèn)的幾MHz刷屏感覺(jué)很慢。逐步提高到40MHz甚至60MHz取決于屏幕和布線(xiàn)質(zhì)量動(dòng)畫(huà)效果就流暢多了。但要注意過(guò)高的波特率可能導(dǎo)致數(shù)據(jù)出錯(cuò)屏幕出現(xiàn)雪花點(diǎn)或條紋。需要根據(jù)實(shí)際情況測(cè)試一個(gè)穩(wěn)定值。4. 性能瓶頸與優(yōu)化當(dāng)SPI速度遇到極限當(dāng)你嘗試?yán)L制更復(fù)雜的界面或播放動(dòng)畫(huà)時(shí)可能會(huì)發(fā)現(xiàn)幀率很低畫(huà)面刷新緩慢。瓶頸主要出現(xiàn)在兩個(gè)地方一是SPI傳輸大量像素?cái)?shù)據(jù)的速度二是MicroPython本身解釋執(zhí)行的效率。SPI傳輸優(yōu)化對(duì)于240x240的屏幕全屏刷新一次需要傳輸 240 * 240 * 2 115,200 字節(jié)RGB565格式每個(gè)像素2字節(jié)。即使在40MHz的SPI時(shí)鐘下理論傳輸時(shí)間也要約23ms不含命令開(kāi)銷(xiāo)即理論最高幀率約43FPS。但MicroPython的SPI傳輸有 overhead實(shí)際幀率會(huì)低很多。MicroPython效率優(yōu)化局部刷新只刷新屏幕上發(fā)生變化的部分區(qū)域而不是整個(gè)屏幕。使用fill_rect或blit塊傳輸函數(shù)來(lái)更新特定區(qū)域。使用幀緩沖區(qū)Framebuffer這是最重要的優(yōu)化手段。我們可以在Pico的內(nèi)存中開(kāi)辟一塊和屏幕分辨率對(duì)應(yīng)的緩沖區(qū)bytearray所有的繪圖操作都先在這個(gè)內(nèi)存緩沖區(qū)中進(jìn)行。操作完成后一次性調(diào)用display.blit_buffer()或display.show()將整個(gè)緩沖區(qū)通過(guò)SPI發(fā)送到屏幕。這樣做有兩個(gè)巨大好處一是避免了頻繁的小數(shù)據(jù)SPI傳輸帶來(lái)的協(xié)議開(kāi)銷(xiāo)二是可以實(shí)現(xiàn)雙緩沖在后臺(tái)緩沖區(qū)繪制下一幀圖像時(shí)前臺(tái)緩沖區(qū)保持顯示當(dāng)前幀繪制完成后再交換消除屏幕撕裂。預(yù)計(jì)算與緩存對(duì)于不變的UI元素如背景、靜態(tài)文字可以預(yù)先繪制到緩沖區(qū)的一個(gè)副本中需要時(shí)直接拷貝而不是重新繪制。下面是一個(gè)使用幀緩沖區(qū)的示例import framebuf # 創(chuàng)建一個(gè)幀緩沖區(qū)格式為RGB565 buffer bytearray(240 * 240 * 2) fb framebuf.FrameBuffer(buffer, 240, 240, framebuf.RGB565) # 在幀緩沖區(qū)中繪圖這些操作都在內(nèi)存中極快 fb.fill(0x0000) # 黑色背景 fb.text(“Framebuffer Demo”, 30, 100, 0xFFFF) fb.fill_rect(80, 80, 80, 80, 0xF800) # 將整個(gè)緩沖區(qū)一次性發(fā)送到屏幕 display.blit_buffer(buffer, 0, 0, 240, 240)使用幀緩沖區(qū)后界面更新的流暢度會(huì)有質(zhì)的提升。對(duì)于動(dòng)畫(huà)你可以創(chuàng)建兩個(gè)緩沖區(qū)交替進(jìn)行繪制和顯示。5. 進(jìn)階玩法釋放PIO的威力即使優(yōu)化了MicroPython代碼和SPI傳輸當(dāng)需要非常高的刷新率比如用于游戲或需要同時(shí)驅(qū)動(dòng)屏幕和其他高帶寬外設(shè)時(shí)標(biāo)準(zhǔn)的SPI外設(shè)可能仍然力不從心或者會(huì)占用大量CPU時(shí)間。這時(shí)樹(shù)莓派Pico的秘密武器——PIO可編程輸入/輸出就該登場(chǎng)了。PIO是RP2040芯片上獨(dú)立于CPU的微型可編程狀態(tài)機(jī)它可以被編程來(lái)實(shí)現(xiàn)幾乎任何同步或異步的通信協(xié)議并且?guī)缀醪徽加肅PU資源。我們可以用PIO來(lái)編寫(xiě)一個(gè)“SPI數(shù)據(jù)泵”專(zhuān)門(mén)負(fù)責(zé)以最高效、最穩(wěn)定的時(shí)序?qū)彌_區(qū)中的數(shù)據(jù)“推”到LCD屏幕上。5.1 PIO驅(qū)動(dòng)SPI的原理我們不再使用芯片硬件SPI外設(shè)而是用PIO狀態(tài)機(jī)模擬SPI的時(shí)序。優(yōu)勢(shì)在于極致速度PIO時(shí)鐘可以與系統(tǒng)時(shí)鐘同步達(dá)到極高的數(shù)據(jù)輸出速率。確定性延時(shí)PIO程序的執(zhí)行周期是確定的避免了MicroPython垃圾回收或其他中斷帶來(lái)的時(shí)序抖動(dòng)。解放CPU一旦啟動(dòng)PIO狀態(tài)機(jī)它就會(huì)自動(dòng)從緩沖區(qū)中讀取數(shù)據(jù)并發(fā)送CPU可以騰出來(lái)處理業(yè)務(wù)邏輯。5.2 一個(gè)簡(jiǎn)單的PIO SPI實(shí)現(xiàn)示例這里給出一個(gè)概念性的PIO匯編程序片段用于rp2模塊和配套的Python代碼用于并行輸出RGB565數(shù)據(jù)需要多個(gè)引腳更復(fù)雜。實(shí)際上對(duì)于SPI我們通常用PIO實(shí)現(xiàn)一個(gè)8位或16位的并轉(zhuǎn)串輸出。社區(qū)已經(jīng)有成熟的庫(kù)例如pico_st7789的C語(yǔ)言版本就大量使用了PIO。在MicroPython中我們也可以利用rp2模塊寫(xiě)PIO程序。下面是一個(gè)極度簡(jiǎn)化的思路實(shí)際驅(qū)動(dòng)需要考慮DC引腳控制、命令/數(shù)據(jù)模式切換等import rp2 from machine import Pin import array # 定義PIO程序模擬SPI發(fā)送16位數(shù)據(jù)假設(shè)DC引腳已提前設(shè)置好 rp2.asm_pio(out_init(rp2.PIO.OUT_LOW,)*8, out_shiftdirrp2.PIO.SHIFT_LEFT, autopullTrue, pull_thresh16) def spi_out_16b(): set(pins, 0) # 初始引腳為低 pull(block) # 從FIFO拉取16位數(shù)據(jù)到OSR out(pins, 16) # 將OSR中的16位數(shù)據(jù)輸出到引腳 nop() .side(1) # 產(chǎn)生一個(gè)時(shí)鐘上升沿假設(shè)SCK由side-set控制 nop() .side(0) # 時(shí)鐘下降沿 # 初始化狀態(tài)機(jī) sm rp2.StateMachine(0, spi_out_16b, freq100_000_000, out_basePin(3)) # out_base是MOSI引腳起始位 # 需要配置多個(gè)引腳來(lái)并行輸出這里僅為示意 # 將像素?cái)?shù)據(jù)放入數(shù)組 pixel_data array.array(‘H’, [0xF800, 0x07E0, 0x001F]) # 紅綠藍(lán) # 啟動(dòng)狀態(tài)機(jī)并發(fā)送數(shù)據(jù) sm.active(1) for pixel in pixel_data: sm.put(pixel)重要提示以上PIO代碼僅為原理演示一個(gè)完整的、驅(qū)動(dòng)240x240 LCD的PIO程序要復(fù)雜得多需要處理屏幕初始化命令序列、定義完整的SPI協(xié)議包括SCK、MOSI、CS、DC、以及高效地從內(nèi)存緩沖區(qū)搬運(yùn)數(shù)據(jù)。強(qiáng)烈建議初學(xué)者直接使用社區(qū)已經(jīng)驗(yàn)證過(guò)的、集成了PIO驅(qū)動(dòng)的成熟庫(kù)例如在C/C環(huán)境下探索pico_st7789或pico_ssd1306等項(xiàng)目的源碼來(lái)學(xué)習(xí)。在MicroPython中可以尋找像micropython-st7789的某些優(yōu)化分支它們可能已經(jīng)集成了PIO支持。6. 項(xiàng)目實(shí)戰(zhàn)打造一個(gè)迷你系統(tǒng)狀態(tài)顯示器理論說(shuō)了這么多我們來(lái)做一個(gè)綜合性的小項(xiàng)目用Pico LCD 1.3制作一個(gè)能顯示Pico內(nèi)部溫度、ADC讀取的電壓值以及一個(gè)動(dòng)態(tài)進(jìn)度條的系統(tǒng)狀態(tài)監(jiān)視器。硬件Pico LCD 1.3 一個(gè)電位器接ADC引腳 Pico開(kāi)發(fā)板。軟件思路初始化初始化屏幕、幀緩沖區(qū)、ADC用于讀取電位器電壓、內(nèi)部溫度傳感器。主循環(huán)讀取ADC值和內(nèi)部溫度。在離屏緩沖區(qū)中繪制所有元素清空背景、繪制邊框和標(biāo)題、以文本形式顯示溫度和電壓值、根據(jù)電壓值繪制一個(gè)水平進(jìn)度條。將離屏緩沖區(qū)的內(nèi)容一次性blit到屏幕上。短暫延時(shí)控制刷新率如10Hz。import machine import st7789 import framebuf import time import math # ... 屏幕初始化代碼同上使用幀緩沖區(qū) ... # 初始化ADC假設(shè)電位器接GPIO26 adc machine.ADC(26) # 內(nèi)部溫度傳感器 sensor_temp machine.ADC(4) conversion_factor 3.3 / (65535) # 創(chuàng)建離屏幀緩沖區(qū) buffer bytearray(240 * 240 * 2) fb framebuf.FrameBuffer(buffer, 240, 240, framebuf.RGB565) def draw_background(): 繪制靜態(tài)背景 fb.fill(0x0000) # 黑色背景 fb.rect(10, 10, 220, 220, 0xFFFF) # 白色邊框 fb.text(“Pico Monitor”, 70, 30, 0x07E0) # 綠色標(biāo)題 def draw_progress_bar(x, y, width, height, value, max_value): 繪制進(jìn)度條value為當(dāng)前值max_value為最大值 # 繪制外框 fb.rect(x, y, width, height, 0xFFFF) # 計(jì)算填充長(zhǎng)度 fill_width int((value / max_value) * (width - 2)) # 繪制填充部分從x1, y1開(kāi)始 if fill_width 0: fb.fill_rect(x1, y1, fill_width, height-2, 0xF800) # 紅色填充 while True: # 1. 讀取數(shù)據(jù) adc_value adc.read_u16() voltage adc_value * conversion_factor # 讀取溫度需要根據(jù)Pico手冊(cè)進(jìn)行公式換算 reading sensor_temp.read_u16() * conversion_factor temperature 27 - (reading - 0.706)/0.001721 # 2. 在離屏緩沖區(qū)繪制 draw_background() # 顯示文本 fb.text(“Temp: {:.1f}C”.format(temperature), 20, 80, 0xFFFF) fb.text(“Volt: {:.2f}V”.format(voltage), 20, 110, 0xFFFF) # 繪制進(jìn)度條電壓映射到0-3.3V draw_progress_bar(20, 140, 200, 20, voltage, 3.3) # 3. 更新屏幕 display.blit_buffer(buffer, 0, 0, 240, 240) # 4. 控制刷新率 time.sleep(0.1) # 約10Hz刷新這個(gè)項(xiàng)目綜合運(yùn)用了SPI驅(qū)動(dòng)、幀緩沖區(qū)、ADC讀取、數(shù)據(jù)格式化顯示等知識(shí)。你可以看到通過(guò)幀緩沖區(qū)我們輕松地組合了靜態(tài)背景和動(dòng)態(tài)數(shù)據(jù)刷新過(guò)程平滑無(wú)閃爍。7. 避坑指南與常見(jiàn)問(wèn)題排查在折騰Pico LCD 1.3的過(guò)程中我遇到了一些典型問(wèn)題這里匯總一下屏幕白屏或完全不亮檢查電源首先確認(rèn)VCC接的是3.3V不是5V或VSYS。檢查背光測(cè)量BL引腳電壓嘗試將其直接接到3.3V看背光是否亮起。檢查復(fù)位確保RST引腳有正確的復(fù)位序列先拉低至少10ms再拉高??梢試L試在代碼中顯式調(diào)用display.reset()。檢查SPI引腳確認(rèn)SCK、MOSI、DC、CS的引腳號(hào)在代碼中和實(shí)際連接完全對(duì)應(yīng)。屏幕花屏、條紋或顯示錯(cuò)位降低SPI波特率這是最常見(jiàn)的原因。過(guò)高的波特率導(dǎo)致時(shí)序錯(cuò)誤。嘗試將baudrate從40_000_000逐步降低到20_000_000或10_000_000。檢查初始化序列不同的ST7789屏幕尤其是來(lái)自不同廠商的可能需要微調(diào)初始化命令。查閱屏幕供應(yīng)商提供的資料或者嘗試在st7789.py驅(qū)動(dòng)庫(kù)中查找并替換初始化命令數(shù)組。檢查DC引腳邏輯確認(rèn)在發(fā)送命令和發(fā)送數(shù)據(jù)時(shí)DC引腳的電平設(shè)置正確。顯示內(nèi)容上下或左右顛倒調(diào)整旋轉(zhuǎn)參數(shù)在初始化ST7789對(duì)象時(shí)修改rotation參數(shù)0, 1, 2, 3。修改掃描方向有些驅(qū)動(dòng)庫(kù)允許通過(guò)發(fā)送特定的命令如MADCTL來(lái)設(shè)置屏幕的掃描方向、顏色順序等。這通常在驅(qū)動(dòng)庫(kù)的初始化方法中完成。刷新速度慢啟用幀緩沖區(qū)這是最大的性能提升點(diǎn)務(wù)必使用。提高SPI波特率在保證穩(wěn)定的前提下逐步提高。局部刷新只更新變化的區(qū)域??紤]使用PIO或C語(yǔ)言對(duì)于性能要求極高的應(yīng)用MicroPython可能成為瓶頸可以考慮使用C/C SDK配合PIO驅(qū)動(dòng)。MicroPython內(nèi)存不足240x240的RGB565幀緩沖區(qū)需要115.2KB內(nèi)存而Pico的MicroPython默認(rèn)的堆內(nèi)存可能不足。如果創(chuàng)建緩沖區(qū)失敗可以嘗試在編譯MicroPython固件時(shí)增加堆大小或者使用分辨率較低的顯示模式如果屏幕支持或者換用C語(yǔ)言環(huán)境。最后調(diào)試這類(lèi)硬件問(wèn)題一個(gè)邏輯分析儀或者示波器是極好的幫手可以直觀地看到SPI總線(xiàn)上的時(shí)序和數(shù)據(jù)是否正確能快速定位是硬件連接問(wèn)題還是軟件配置問(wèn)題。從點(diǎn)亮第一個(gè)像素到做出流暢的交互界面這個(gè)過(guò)程充滿(mǎn)挑戰(zhàn)也充滿(mǎn)樂(lè)趣。希望這篇詳細(xì)的拆解能幫你順利搞定手中的這塊“Pico LCD 1.3”讓它成為你下一個(gè)創(chuàng)意項(xiàng)目中最出彩的部分。

相關(guān)新聞

ESP32-P4-ETH:高性能有線(xiàn)連接與AI加速的嵌入式SoC開(kāi)發(fā)指南

ESP32-P4-ETH:高性能有線(xiàn)連接與AI加速的嵌入式SoC開(kāi)發(fā)指南

1. 項(xiàng)目概述:ESP32-P4-ETH,一顆為高性能有線(xiàn)連接而生的“新大腦”最近在搗鼓一些需要穩(wěn)定、高速網(wǎng)絡(luò)連接的嵌入式項(xiàng)目,比如工業(yè)網(wǎng)關(guān)、邊緣計(jì)算盒子或者多路視頻流處理設(shè)備,你是不是也常常在Wi-Fi的波動(dòng)和傳統(tǒng)MCU的性能瓶頸之間糾結(jié)…

2026/8/2 0:34:01 閱讀更多
工業(yè)級(jí)USB轉(zhuǎn)4路隔離RS485轉(zhuǎn)換器:CH344L方案、多線(xiàn)程應(yīng)用與布線(xiàn)指南

工業(yè)級(jí)USB轉(zhuǎn)4路隔離RS485轉(zhuǎn)換器:CH344L方案、多線(xiàn)程應(yīng)用與布線(xiàn)指南

1. 項(xiàng)目概述:從“USB TO 4CH RS485 (B)”看多路隔離串口的工業(yè)價(jià)值最近在整理工控設(shè)備時(shí),翻出一個(gè)老朋友——一塊標(biāo)著“USB TO 4CH RS485 (B)”的轉(zhuǎn)換板。這名字聽(tīng)起來(lái)有點(diǎn)技術(shù)宅,但說(shuō)白了,它就是個(gè)“一拖四”的USB轉(zhuǎn)串口神器&…

2026/8/2 0:34:01 閱讀更多
嵌入式HDMI視頻采集處理系統(tǒng)實(shí)戰(zhàn):從硬件設(shè)計(jì)到AI部署全鏈路解析

嵌入式HDMI視頻采集處理系統(tǒng)實(shí)戰(zhàn):從硬件設(shè)計(jì)到AI部署全鏈路解析

1. 項(xiàng)目概述:從“7HP-CAPQLED”看嵌入式顯示接口的實(shí)戰(zhàn)演進(jìn)最近在折騰一個(gè)嵌入式項(xiàng)目,核心代號(hào)叫“7HP-CAPQLED”。乍一看這名字有點(diǎn)唬人,像是某個(gè)神秘硬件的型號(hào)。但結(jié)合手頭的Jetson Nano、樹(shù)莓派,還有一堆HDMI線(xiàn)纜和屏幕&#…

2026/8/2 1:14:05 閱讀更多
13.3英寸HDMI LCD屏幕驅(qū)動(dòng)板原理、系統(tǒng)集成與硬件設(shè)計(jì)全解析

13.3英寸HDMI LCD屏幕驅(qū)動(dòng)板原理、系統(tǒng)集成與硬件設(shè)計(jì)全解析

1. 項(xiàng)目概述:13.3英寸HDMI LCD屏幕的定位與價(jià)值最近在折騰一個(gè)桌面小項(xiàng)目,需要一塊中等尺寸、即插即用的顯示屏,最終選定了這塊13.3英寸的HDMI LCD屏幕,并且是帶外殼的版本。這看起來(lái)是個(gè)簡(jiǎn)單的硬件,但實(shí)際用下來(lái)&…

2026/8/2 1:14:05 閱讀更多
JetRacer Pro AI Kit:從硬件拆解到視覺(jué)跟隨的機(jī)器人開(kāi)發(fā)實(shí)戰(zhàn)

JetRacer Pro AI Kit:從硬件拆解到視覺(jué)跟隨的機(jī)器人開(kāi)發(fā)實(shí)戰(zhàn)

1. 項(xiàng)目概述:從玩具賽車(chē)到AI移動(dòng)平臺(tái)的蛻變?nèi)绻銓?duì)AI和機(jī)器人感興趣,肯定聽(tīng)說(shuō)過(guò)NVIDIA Jetson Nano這個(gè)強(qiáng)大的邊緣計(jì)算平臺(tái)。但很多時(shí)候,我們拿到開(kāi)發(fā)板后,面對(duì)一堆零散的傳感器和電機(jī),會(huì)陷入“從何下手”的迷茫。Jet…

2026/8/2 1:14:05 閱讀更多
4.3寸HDMI顯示屏驅(qū)動(dòng)原理與嵌入式系統(tǒng)集成實(shí)戰(zhàn)

4.3寸HDMI顯示屏驅(qū)動(dòng)原理與嵌入式系統(tǒng)集成實(shí)戰(zhàn)

1. 項(xiàng)目概述:一塊4.3英寸HDMI顯示屏的“非典型”應(yīng)用之旅最近在搗鼓一個(gè)需要便攜顯示的小項(xiàng)目,手頭正好有一塊閑置的“4.3inch HDMI LCD (B)”。這玩意兒聽(tīng)起來(lái)平平無(wú)奇,不就是一塊帶HDMI接口的小屏幕嘛。但真用起來(lái),你會(huì)發(fā)現(xiàn)它遠(yuǎn)…

2026/8/2 1:14:05 閱讀更多
基于Jetson與LLM的離線(xiàn)語(yǔ)音控制電機(jī)系統(tǒng):從架構(gòu)到實(shí)踐

基于Jetson與LLM的離線(xiàn)語(yǔ)音控制電機(jī)系統(tǒng):從架構(gòu)到實(shí)踐

1. 項(xiàng)目緣起:當(dāng)語(yǔ)音大模型遇見(jiàn)邊緣計(jì)算最近在折騰一個(gè)挺有意思的玩意兒:讓Jetson開(kāi)發(fā)板聽(tīng)懂人話(huà),然后去控制電機(jī)。聽(tīng)起來(lái)是不是有點(diǎn)像科幻片里的場(chǎng)景?其實(shí),這背后是語(yǔ)音識(shí)別、大語(yǔ)言模型(LLM)和…

2026/8/2 1:14:05 閱讀更多
單片機(jī)畢設(shè)項(xiàng)目:基于 STM32 的可調(diào)速電機(jī)智能監(jiān)測(cè)終端實(shí)現(xiàn) 基于霍爾傳感器的實(shí)時(shí)車(chē)速檢測(cè)系統(tǒng)設(shè)計(jì)(016601)

單片機(jī)畢設(shè)項(xiàng)目:基于 STM32 的可調(diào)速電機(jī)智能監(jiān)測(cè)終端實(shí)現(xiàn) 基于霍爾傳感器的實(shí)時(shí)車(chē)速檢測(cè)系統(tǒng)設(shè)計(jì)(016601)

博主介紹:??碼農(nóng)一枚 ,專(zhuān)注于大學(xué)生項(xiàng)目實(shí)戰(zhàn)開(kāi)發(fā)、講解和畢業(yè)🚢文撰寫(xiě)修改等。全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專(zhuān)注于嵌入式單片機(jī),Java、小程序技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ??…

2026/8/2 1:04:04 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/1 0:09:33 閱讀更多