třída RGBDisplay – ovladač RGB displeje

Třída RGBDisplay řídí 24bitové paralelní RGB LCD displeje prostřednictvím řadiče STM32 LTDC (LCD-TFT). LTDC streamuje pixely přímo z framebufferu uloženého v SDRAM zvolenou pixelovou frekvencí, takže jsou možné vysoké obnovovací frekvence (až 120 Hz) bez zapojení CPU.

Na OpenMV Cam Pure Thermal tatáž 24bitová paralelní sběrnice napájí také vestavěný HDMI enkodér TFP410, takže jeho HDMI výstup je řízen rovněž touto třídou – pomocí display_on=False zhasnete vestavěný LCD a přitom budete stále posílat pixely do enkodéru.

Rozlišení panelu se volí pomocí framesize s využitím konstant definovaných v modulu display (QVGA, VGA, WVGA, HD, FHD, …). Inicializační sekvence specifické pro daný panel se připojují přes klíčový argument controller (například ST7701 pro panely založené na ST7701). Jas podsvícení je ve výchozím nastavení řízen jako jednoduchý GPIO, nebo pomocí DACBacklight / PWMBacklight, pokud je některý z nich předán jako backlight.

Snímky se zobrazují voláním write() s objektem image.Image. Ovladač interně provádí převod na RGB, škálování, ROI, paletu a transformace orientace.

Příklad – zrcadlení kamery na panel 480x272 při 60 Hz:

import csi
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)

while True:
    lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)

Konstruktory

class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)

framesize Jedno ze standardně podporovaných rozlišení (viz konstanty modulu display).

refresh Nastavuje obnovovací frekvenci obrazovky v hertzech (30-120). Tím se řídí pixelová frekvence RGB LCD.

display_on Povoluje lokální LCD výstup. Na OpenMV Cam Pure Thermal předejte False, neboť její 24bitová paralelní sběrnice řídí jak vestavěný LCD, tak HDMI enkodér TFP410 – tím zůstane vestavěný LCD zhasnutý a přitom se stále napájí HDMI enkodér. Na ostatních OpenMV Cam neexistuje sdílený výstup a toto lze ponechat na výchozí hodnotě.

triple_buffer Pokud je True, učiní aktualizace obrazovky neblokujícími za cenu trojnásobku velikosti displeje v RAM.

portrait Prohodí šířku a výšku framesize.

controller Předejte instanci třídy řadicího čipu, která se inicializuje spolu s displejem.

backlight Předejte instanci modulu řadiče podsvícení, který se má použít. Ve výchozím nastavení je podsvícení řízeno pomocí GPIO pinu.

deinit() None

Uvolní I/O piny a RAM používané touto třídou. Volá se automaticky při zničení objektu.

width() int

Vrací šířku obrazovky.

height() int

Vrací výšku obrazovky.

triple_buffer() bool

Vrací, zda je povoleno trojité bufferování.

bgr() bool

Vrací, zda jsou prohozeny červený a modrý kanál.

byte_swap() bool

Vrací, zda jsou bajty pixelů RGB565 na výstupu prohozeny.

framesize() int

Vrací konstantu framesize, se kterou byl displej nakonfigurován.

refresh() int

Vrací obnovovací frekvenci.

clear(display_off: bool = False) None

Vymaže obrazovku LCD do černa.

display_off pokud je True, vypne logiku displeje namísto vymazání framebufferu do černa. Poté byste měli také vypnout podsvícení, abyste zajistili, že obrazovka zčerná, protože mnoho displejů je při zapnutém pouze podsvícení bílých.

backlight(value: int | None = None) int

Nastavuje hodnotu stmívání podsvícení LCD, od 0 (vypnuto) do 100 (zapnuto). Bez argumentů vrátí aktuální hodnotu podsvícení.

Pokud nebyl konstruktoru předán řadič DACBacklight nebo PWMBacklight, je podsvícení řízeno jako GPIO pin a může nabývat pouze hodnoty 0 (vypnuto) nebo nenulové (zapnuto).

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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

Zobrazí image, jehož levý horní roh začíná na pozici x, y. Místo objektu obrazu lze také předat řetězec s cestou, čímž se obraz automaticky načte z disku.

x_scale určuje, jak moc je zobrazený obraz škálován ve směru osy x. Pokud je tato hodnota záporná, obraz bude horizontálně překlopen. Pokud není y_scale zadáno, bude odpovídat x_scale pro zachování poměru stran.

y_scale určuje, jak moc je zobrazený obraz škálován ve směru osy y. Pokud je tato hodnota záporná, obraz bude vertikálně překlopen (vyžaduje trojité bufferování). Pokud není x_scale zadáno, bude odpovídat y_scale pro zachování poměru stran.

roi je n-tice obdélníku oblasti zájmu (x, y, w, h) obrazu, který se má zobrazit.

rgb_channel je RGB kanál (0=R, 1=G, 2=B), který se má extrahovat z obrazu RGB565 a vykreslit ve stupních šedi. Hodnota -1 extrakci kanálu vypne.

alpha určuje, jak neprůhledný obraz je, od 0 (zcela průhledný / černý) do 255 (neprůhledný).

color_palette obraz RGB565 o celkem 256 pixelech používaný jako vyhledávací tabulka barev nad hodnotou stupně šedi vstupního obrazu. Aplikuje se po extrakci rgb_channel. Může to být také enum palety (např. image.PALETTE_RAINBOW).

alpha_palette obraz ve stupních šedi o celkem 256 pixelech používaný jako vyhledávací tabulka alfy pro jednotlivé pixely nad hodnotou stupně šedi vstupního obrazu. Aplikuje se po extrakci rgb_channel.

hint je logický součet (OR) příznaků: