class RGBDisplay – RGB-displaydrivrutin

Klassen RGBDisplay driver 24-bitars parallella RGB-LCD-skärmar via STM32 LTDC (LCD-TFT)-styrenheten. LTDC strömmar pixlar direkt ut ur en SDRAM-baserad bildbuffert med den valda pixelklockan, så höga uppdateringsfrekvenser (upp till 120 Hz) är möjliga utan att CPU:n behöver vara inblandad.

På OpenMV Cam Pure Thermal matar samma 24-bitars parallella buss även en inbyggd TFP410 HDMI-kodare, så dess HDMI-utgång drivs också via denna klass – använd display_on=False för att släcka den inbyggda LCD-skärmen medan pixlar fortfarande klockas ut till kodaren.

Panelens upplösning väljs via framesize med konstanterna som definieras i modulen display (QVGA, VGA, WVGA, HD, FHD, …). Panelspecifika initieringssekvenser kopplas in via nyckelordsargumentet controller (till exempel ST7701 för ST7701-baserade paneler). Bakgrundsbelysningens ljusstyrka drivs som ett enkelt GPIO som standard, eller av DACBacklight / PWMBacklight om någon av dem skickas som backlight.

Bildrutor visas genom att anropa write() med en image.Image. Drivrutinen hanterar RGB-konvertering, skalning, ROI, palett och orienteringstransformationer internt.

Exempel – spegla kameran på en 480x272-panel vid 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)

Konstruktorer

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 En av de standardupplösningar som stöds (se konstanterna i modulen display).

refresh Ställer in skärmens uppdateringsfrekvens i hertz (30-120). Detta styr RGB-LCD:ns pixelklocka.

display_on Aktiverar den lokala LCD-utgången. Skicka False på OpenMV Cam Pure Thermal, vars 24-bitars parallella buss driver både den inbyggda LCD-skärmen och TFP410 HDMI-kodaren – detta håller den inbyggda LCD-skärmen släckt medan HDMI-kodaren fortfarande matas. På andra OpenMV Cam-modeller finns ingen delad mottagare och detta kan lämnas på sitt standardvärde.

triple_buffer Om True görs uppdateringar av skärmen icke-blockerande, till priset av 3x displaystorleken i RAM.

portrait Byter plats på bildrutans bredd och höjd.

controller Skicka en instans av en styrkretsklass för att initiera den tillsammans med displayen.

backlight Skicka en instans av en modul för styrning av bakgrundsbelysning som ska användas. Som standard styrs bakgrundsbelysningen via ett GPIO-stift.

deinit() None

Frigör de I/O-stift och det RAM som klassen använder. Detta anropas automatiskt vid destruktion.

width() int

Returnerar skärmens bredd.

height() int

Returnerar skärmens höjd.

triple_buffer() bool

Returnerar om trippelbuffring är aktiverad.

bgr() bool

Returnerar om de röda och blå kanalerna är ombytta.

byte_swap() bool

Returnerar om RGB565-pixelbyten byts om vid utmatning.

framesize() int

Returnerar den framesize-konstant som displayen konfigurerades med.

refresh() int

Returnerar uppdateringsfrekvensen.

clear(display_off: bool = False) None

Rensar LCD-skärmen till svart.

display_off om True stängs displaylogiken av i stället för att bildbufferten rensas till svart. Du bör även stänga av bakgrundsbelysningen efteråt för att säkerställa att skärmen blir svart, eftersom många skärmar är vita när enbart bakgrundsbelysningen är på.

backlight(value: int | None = None) int

Ställer in LCD-skärmens dämpningsvärde för bakgrundsbelysning, från 0 (av) till 100 (på). Skicka inga argument för att hämta det aktuella bakgrundsbelysningsvärdet.

Om inte en DACBacklight- eller PWMBacklight-styrenhet skickades till konstruktorn styrs bakgrundsbelysningen som ett GPIO-stift och kan endast gå från 0 (av) till skilt från noll (på).

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

Visar en image vars övre vänstra hörn börjar vid positionen x, y. En sökvägssträng kan även skickas i stället för ett bildobjekt för att automatiskt läsa in bilden från disk.

x_scale styr hur mycket den visade bilden skalas i x-riktningen. Om värdet är negativt vänds bilden horisontellt. Om y_scale inte anges matchar den x_scale för att bevara bildförhållandet.

y_scale styr hur mycket den visade bilden skalas i y-riktningen. Om värdet är negativt vänds bilden vertikalt (kräver trippelbuffring). Om x_scale inte anges matchar den y_scale för att bevara bildförhållandet.

roi är intresseområdets rektangeltupel (x, y, w, h) av bilden som ska visas.

rgb_channel är den RGB-kanal (0=R, 1=G, 2=B) som ska extraheras ur en RGB565-bild och renderas i gråskala. -1 inaktiverar kanalextraktion.

alpha styr hur ogenomskinlig bilden är, från 0 (helt genomskinlig / svart) till 255 (ogenomskinlig).

color_palette en RGB565-bild på totalt 256 pixlar som används som en färguppslagstabell på gråskalevärdet hos indatabilden. Tillämpas efter rgb_channel-extraktion. Kan även vara en palett-enum (t.ex. image.PALETTE_RAINBOW).

alpha_palette en GRAYSCALE-bild på totalt 256 pixlar som används som en alfauppslagstabell per pixel på gråskalevärdet hos indatabilden. Tillämpas efter rgb_channel-extraktion.

hint är en logisk ELLER av flaggorna: