class SPIDisplay -- SPI 顯示器驅動程式¶
SPIDisplay 類別驅動小型 SPI 連接的 TFT 與 OLED 面板 -- 最常見的是 OpenMV LCD Shield 上的 SSD1351 128x160 RGB OLED。此驅動程式在內部擁有 SPI 匯流排以及 GPIO 晶片選擇 / DC 線,因此呼叫端只需設定面板幾何、更新率以及任何方向旗標。面板專屬的初始化(暫存器序列、RAM 寫入框架)是透過 controller 關鍵字引數提供的 -- 傳入 SSD1351 實例以驅動 LCD Shield,或為其他面板自行實作您的控制器類別。
影格是透過以 image.Image 呼叫 write() 來呈現的。此驅動程式會在內部將來源轉換為 RGB565,並套用縮放、ROI、調色盤與方向變換,因此呼叫端不需要事先調整影像的大小。背光亮度可保留為單純的開/關 GPIO(預設),或透過將 DACBacklight / PWMBacklight 作為 backlight 關鍵字引數傳入來驅動。
範例 -- 將相機畫面鏡像到 OpenMV LCD Shield 的 SSD1351 OLED 上:
import csi
import display
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize((128, 160)) # matches the SSD1351 panel
lcd = display.SPIDisplay(controller=display.SSD1351())
while True:
lcd.write(csi0.snapshot())
建構子¶
- class display.SPIDisplay(width: int = 128, height: int = 160, refresh: int = 60, bgr: bool = False, byte_swap: bool = False, hmirror: bool = True, vflip: bool = True, triple_buffer: bool | None = None, *, controller: object | None = None, backlight: object | None = None)¶
widthSPI LCD 寬度,以像素為單位(1..32767)。heightSPI LCD 高度,以像素為單位(1..32767)。refreshLCD 更新率,以赫茲為單位(1..120)。控制 SPI 時脈速率。bgr設為 True 以交換紅色與藍色通道。byte_swap設為 True 以交換傳送至 LCD 的 RGB565 像素位元組。hmirror設為 True 以水平鏡像顯示輸出。vflip設為 True 以垂直翻轉顯示輸出。triple_buffer若為 True,會使螢幕更新成為非阻塞式,代價是 RAM 中佔用三倍的顯示器大小。預設值視主機板而定(具備 SDRAM 的主機板預設為開啟)。controller僅限關鍵字。傳入控制器晶片類別的實例,以便與顯示器一同初始化它。提供時,會呼叫控制器的init、display_on、display_off與ram_write方法(若存在),而非內建的命令。backlight僅限關鍵字。傳入要使用的背光控制器模組。預設情況下,背光會透過 GPIO 接腳控制。- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
顯示
image,其左上角位於(x, y)。可傳入路徑字串以取代影像,一步完成載入與繪製。x_scalex 軸縮放係數。負值會水平翻轉。若省略y_scale,它會比照x_scale以維持長寬比。y_scaley 軸縮放係數。負值會垂直翻轉(需要triple_buffer=True)。若省略x_scale,它會比照y_scale。roi要繪製之來源影像的感興趣區域矩形(x, y, w, h)。rgb_channel要從 RGB565 來源影像中擷取的 RGB 通道(0=R、1=G、2=B、-1=全部)。範圍:-1..2。alpha影像的不透明度。0 為完全透明(黑色),255 為不透明。範圍:0..255。color_palette色彩調色盤列舉值(例如image.PALETTE_RAINBOW)或一張 256 像素的 RGB565 影像,用作來源灰階值的色彩查詢表。在rgb_channel擷取之後套用。alpha_palette一張 256 像素的灰階影像,用作逐像素 alpha 查詢表,依來源灰階值調變alpha。hint下列旗標的邏輯 OR:image.AREA:縮小時使用面積縮放。image.BILINEAR:使用雙線性縮放。image.BICUBIC:使用雙三次縮放。image.CENTER:將影像置中於顯示器上(在縮放之後)。image.HMIRROR:水平鏡像影像。image.VFLIP:垂直翻轉影像。image.TRANSPOSE:轉置影像(交換 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST:在縮放之前套用rgb_channel擷取。image.APPLY_COLOR_PALETTE_FIRST:在縮放之前套用color_palette。image.SCALE_ASPECT_KEEP:縮放以使其完整顯示於顯示器內。image.SCALE_ASPECT_EXPAND:縮放以填滿顯示器(會裁切)。image.SCALE_ASPECT_IGNORE:縮放以填滿顯示器(會拉伸)。image.ROTATE_90:旋轉 90 度(VFLIP | TRANSPOSE)。image.ROTATE_180:旋轉 180 度(HMIRROR | VFLIP)。image.ROTATE_270:旋轉 270 度(HMIRROR | TRANSPOSE)。
- clear(display_off: bool = False) None¶
將 LCD 螢幕清除為黑色。
display_off若為 True,會關閉顯示邏輯,而非清除影格緩衝區。在此之後也應停用背光。
- backlight(value: int | None = None) int | None¶
提供
value時,設定背光強度(0=關閉..100=全亮)。不提供引數時,傳回目前的背光值。除非在建構時傳入
DACBacklight或PWMBacklight控制器,否則背光是以 GPIO 接腳驅動,且只會在 0(關閉)與非零(開啟)之間切換。
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
透過 SPI 匯流排將
cmd傳送至顯示器,後面可選擇性地接著args(一個整數位元組或一個位元組緩衝區)。dcs在控制器支援時選擇 DCS 框架。