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)

width SPI LCD 寬度,以像素為單位(1..32767)。

height SPI LCD 高度,以像素為單位(1..32767)。

refresh LCD 更新率,以赫茲為單位(1..120)。控制 SPI 時脈速率。

bgr 設為 True 以交換紅色與藍色通道。

byte_swap 設為 True 以交換傳送至 LCD 的 RGB565 像素位元組。

hmirror 設為 True 以水平鏡像顯示輸出。

vflip 設為 True 以垂直翻轉顯示輸出。

triple_buffer 若為 True,會使螢幕更新成為非阻塞式,代價是 RAM 中佔用三倍的顯示器大小。預設值視主機板而定(具備 SDRAM 的主機板預設為開啟)。

controller 僅限關鍵字。傳入控制器晶片類別的實例,以便與顯示器一同初始化它。提供時,會呼叫控制器的 initdisplay_ondisplay_offram_write 方法(若存在),而非內建的命令。

backlight 僅限關鍵字。傳入要使用的背光控制器模組。預設情況下,背光會透過 GPIO 接腳控制。

width() int

傳回螢幕的寬度。

height() int

傳回螢幕的高度。

refresh() int

傳回更新率。

bgr() bool

傳回紅色與藍色通道是否被交換。

byte_swap() bool

傳回 RGB565 像素是否以位元組反轉方式傳送。

triple_buffer() bool

傳回是否啟用三重緩衝。

framesize() int

傳回所設定的 framesize 識別碼。

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_scale x 軸縮放係數。負值會水平翻轉。若省略 y_scale,它會比照 x_scale 以維持長寬比。

y_scale y 軸縮放係數。負值會垂直翻轉(需要 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:

clear(display_off: bool = False) None

將 LCD 螢幕清除為黑色。

display_off 若為 True,會關閉顯示邏輯,而非清除影格緩衝區。在此之後也應停用背光。

backlight(value: int | None = None) int | None

提供 value 時,設定背光強度(0=關閉..100=全亮)。不提供引數時,傳回目前的背光值。

除非在建構時傳入 DACBacklightPWMBacklight 控制器,否則背光是以 GPIO 接腳驅動,且只會在 0(關閉)與非零(開啟)之間切換。

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None

透過 SPI 匯流排將 cmd 傳送至顯示器,後面可選擇性地接著 args(一個整數位元組或一個位元組緩衝區)。dcs 在控制器支援時選擇 DCS 框架。

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray

透過 SPI 匯流排傳送 cmd 並讀回 len 個位元組,以 bytearray 形式傳回它們。args 會選擇性地在讀取之前寫入(一個整數位元組或一個位元組緩衝區)。dcs 在控制器支援時選擇 DCS 框架。

ioctl(cmd: int, arg: object | None = None) object

發出控制器專屬的 ioctl cmd,並帶有選擇性的 arg。若底層顯示器不支援 ioctl,則引發 ValueError