class RGBDisplay – Driver per display RGB¶
La classe RGBDisplay pilota LCD RGB paralleli a 24 bit attraverso il controller STM32 LTDC (LCD-TFT). L’LTDC trasmette i pixel direttamente da un framebuffer in SDRAM al pixel clock scelto, quindi sono possibili frequenze di aggiornamento elevate (fino a 120 Hz) senza coinvolgere la CPU.
Sulla OpenMV Cam Pure Thermal lo stesso bus parallelo a 24 bit alimenta anche un encoder HDMI TFP410 integrato, perciò anche la sua uscita HDMI è pilotata tramite questa classe – usa display_on=False per spegnere l’LCD integrato continuando comunque a inviare i pixel all’encoder.
La risoluzione del pannello viene selezionata tramite framesize usando le costanti definite nel modulo display (QVGA, VGA, WVGA, HD, FHD, …). Le sequenze di inizializzazione specifiche del pannello vengono inserite tramite l’argomento keyword controller (per esempio ST7701 per i pannelli basati su ST7701). La luminosità della retroilluminazione è pilotata per impostazione predefinita come un semplice GPIO, oppure tramite DACBacklight / PWMBacklight se ne viene passato uno come backlight.
I frame vengono presentati chiamando write() con un image.Image. Il driver gestisce internamente la conversione RGB, lo scaling, la ROI, la palette e le trasformazioni di orientamento.
Esempio – riproduce la camera su un pannello 480x272 a 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)
Costruttori¶
- 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)¶
framesizeUna delle risoluzioni standard supportate (vedi le costanti del modulodisplay).refreshImposta la frequenza di aggiornamento dello schermo in hertz (30-120). Questo controlla il pixel clock dell’LCD RGB.display_onAbilita l’uscita LCD locale. PassaFalsesulla OpenMV Cam Pure Thermal, il cui bus parallelo a 24 bit pilota sia l’LCD integrato sia l’encoder HDMI TFP410 – in questo modo l’LCD integrato resta spento mentre l’encoder HDMI continua a essere alimentato. Sulle altre OpenMV Cam non esiste un sink condiviso e questo parametro può essere lasciato al valore predefinito.triple_bufferSeTrue, rende gli aggiornamenti dello schermo non bloccanti al costo di 3 volte la dimensione del display in RAM.portraitScambia la larghezza e l’altezza della framesize.controllerPassa un’istanza della classe del chip controller per inizializzarla insieme al display.backlightPassa un’istanza del modulo controller della retroilluminazione da usare. Per impostazione predefinita la retroilluminazione viene controllata tramite un pin GPIO.- deinit() None¶
Rilascia i pin di I/O e la RAM usati dalla classe. Viene chiamato automaticamente alla distruzione.
- clear(display_off: bool = False) None¶
Cancella lo schermo LCD portandolo a nero.
display_offseTrue, spegne la logica del display invece di cancellare il framebuffer a nero. Dovresti anche spegnere la retroilluminazione dopo questa operazione per assicurarti che lo schermo diventi nero, poiché molti display appaiono bianchi quando è accesa solo la retroilluminazione.
- backlight(value: int | None = None) int¶
Imposta il valore di attenuazione della retroilluminazione dell’LCD, da 0 (spenta) a 100 (accesa). Non passare alcun argomento per ottenere il valore corrente della retroilluminazione.
A meno che non sia stato passato al costruttore un controller
DACBacklightoPWMBacklight, la retroilluminazione viene controllata come un pin GPIO e potrà andare solo da 0 (spenta) a un valore diverso da zero (accesa).
- 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¶
Visualizza un”
imageil cui angolo in alto a sinistra parte dalla posizionex,y. È possibile passare anche una stringa di percorso invece di un oggetto immagine per caricare automaticamente l’immagine dal disco.x_scalecontrolla di quanto l’immagine visualizzata viene scalata nella direzione x. Se questo valore è negativo l’immagine verrà capovolta orizzontalmente. Sey_scalenon è specificato corrisponderà ax_scaleper mantenere le proporzioni.y_scalecontrolla di quanto l’immagine visualizzata viene scalata nella direzione y. Se questo valore è negativo l’immagine verrà capovolta verticalmente (richiede il triple buffering). Sex_scalenon è specificato corrisponderà ay_scaleper mantenere le proporzioni.roiè la tupla rettangolo della regione di interesse(x, y, w, h)dell’immagine da visualizzare.rgb_channelè il canale RGB (0=R, 1=G, 2=B) da estrarre da un’immagine RGB565 e da rendere in scala di grigi.-1disabilita l’estrazione del canale.alphacontrolla quanto è opaca l’immagine, da 0 (completamente trasparente / nero) a 255 (opaco).color_paletteun’immagine RGB565 di 256 pixel totali usata come tabella di lookup dei colori sul valore in scala di grigi dell’immagine di input. Applicata dopo l’estrazione dirgb_channel. Può anche essere un enum di palette (ad es.image.PALETTE_RAINBOW).alpha_paletteun’immagine GRAYSCALE di 256 pixel totali usata come tabella di lookup dell’alpha per pixel sul valore in scala di grigi dell’immagine di input. Applicata dopo l’estrazione dirgb_channel.hintè un OR logico dei flag:image.AREA: Usa lo scaling per area durante la riduzione invece del nearest neighbor.image.BILINEAR: Usa lo scaling bilineare invece del nearest neighbor.image.BICUBIC: Usa lo scaling bicubico invece del nearest neighbor.image.CENTER: Centra l’immagine sul display (applicato dopo lo scaling).image.HMIRROR: Specchia orizzontalmente l’immagine.image.VFLIP: Capovolge verticalmente l’immagine.image.TRANSPOSE: Traspone l’immagine (scambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Esegue l’estrazione dirgb_channelprima dello scaling.image.APPLY_COLOR_PALETTE_FIRST: Applicacolor_paletteprima dello scaling.image.SCALE_ASPECT_KEEP: Scala l’immagine per adattarla all’interno del display.image.SCALE_ASPECT_EXPAND: Scala l’immagine per riempire il display (con ritaglio).image.SCALE_ASPECT_IGNORE: Scala l’immagine per riempire il display (con stiramento).image.ROTATE_90: Ruota di 90 gradi (VFLIP | TRANSPOSE).image.ROTATE_180: Ruota di 180 gradi (HMIRROR | VFLIP).image.ROTATE_270: Ruota di 270 gradi (HMIRROR | TRANSPOSE).