class SPIDisplay – Driver per display SPI

La classe SPIDisplay pilota piccoli pannelli TFT e OLED collegati via SPI – più comunemente l’OLED RGB SSD1351 128x160 sull’OpenMV LCD Shield. Il driver gestisce internamente il bus SPI e una linea GPIO di chip-select / DC, quindi i chiamanti devono solo configurare la geometria del pannello, la frequenza di aggiornamento ed eventuali flag di orientamento. L’inizializzazione specifica del pannello (sequenze di registri, framing della scrittura in RAM) viene fornita tramite l’argomento keyword controller – passa un’istanza SSD1351 per pilotare l’LCD Shield, oppure implementa la tua classe controller per altri pannelli.

I frame vengono presentati chiamando write() con un image.Image. Il driver converte la sorgente in RGB565 e applica internamente scaling, ROI, palette e trasformazioni di orientamento, quindi il chiamante non ha bisogno di pre-dimensionare l’immagine. La luminosità della retroilluminazione può essere lasciata come un semplice GPIO on/off (predefinito) oppure pilotata da DACBacklight / PWMBacklight passandone uno come argomento keyword backlight.

Esempio – riproduce la camera sull’OLED SSD1351 dell’OpenMV LCD Shield:

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())

Costruttori

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 Larghezza dell’LCD SPI in pixel (1..32767).

height Altezza dell’LCD SPI in pixel (1..32767).

refresh Frequenza di aggiornamento dell’LCD in hertz (1..120). Controlla la frequenza del clock SPI.

bgr imposta a True per scambiare i canali rosso e blu.

byte_swap imposta a True per scambiare i byte dei pixel RGB565 inviati all’LCD.

hmirror imposta a True per specchiare orizzontalmente l’uscita del display.

vflip imposta a True per capovolgere verticalmente l’uscita del display.

triple_buffer se True rende gli aggiornamenti dello schermo non bloccanti al costo di 3 volte la dimensione del display in RAM. Il valore predefinito dipende dalla scheda (attivo per le schede con SDRAM).

controller solo keyword. Passa un’istanza della classe del chip controller per inizializzarla insieme al display. Quando fornito, vengono invocati i metodi init, display_on, display_off e ram_write del controller (se presenti) invece dei comandi integrati.

backlight solo keyword. Passa un modulo controller della retroilluminazione da usare. Per impostazione predefinita la retroilluminazione viene controllata tramite un pin GPIO.

width() int

Restituisce la larghezza dello schermo.

height() int

Restituisce l’altezza dello schermo.

refresh() int

Restituisce la frequenza di aggiornamento.

bgr() bool

Restituisce se i canali rosso e blu sono scambiati.

byte_swap() bool

Restituisce se i pixel RGB565 vengono inviati con i byte invertiti.

triple_buffer() bool

Restituisce se il triple buffering è abilitato.

framesize() int

Restituisce l’identificatore framesize configurato.

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

Visualizza image con il suo angolo in alto a sinistra in (x, y). È possibile passare una stringa di percorso al posto di un’immagine per caricarla e disegnarla in un solo passaggio.

x_scale fattore di scala sull’asse x. I valori negativi capovolgono orizzontalmente. Se y_scale viene omesso segue x_scale per preservare le proporzioni.

y_scale fattore di scala sull’asse y. I valori negativi capovolgono verticalmente (richiede triple_buffer=True). Se x_scale viene omesso segue y_scale.

roi rettangolo della regione di interesse (x, y, w, h) dell’immagine sorgente da disegnare.

rgb_channel canale RGB da estrarre da un’immagine sorgente RGB565 (0=R, 1=G, 2=B, -1=tutti). Intervallo: -1..2.

alpha opacità dell’immagine. 0 è completamente trasparente (nero), 255 è opaco. Intervallo: 0..255.

color_palette enum di palette di colori (ad es. image.PALETTE_RAINBOW) oppure un’immagine RGB565 di 256 pixel usata come tabella di lookup dei colori sul valore in scala di grigi della sorgente. Applicata dopo l’estrazione di rgb_channel.

alpha_palette immagine in scala di grigi di 256 pixel usata come tabella di lookup dell’alpha per pixel che modula alpha in base al valore in scala di grigi della sorgente.

hint OR logico dei flag:

clear(display_off: bool = False) None

Cancella lo schermo LCD portandolo a nero.

display_off se True, spegne la logica del display invece di cancellare il framebuffer. Anche la retroilluminazione dovrebbe essere disabilitata successivamente.

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

Con value, imposta l’intensità della retroilluminazione (0=spenta..100=piena). Senza argomenti, restituisce il valore corrente della retroilluminazione.

A meno che non venga passato un controller DACBacklight o PWMBacklight alla costruzione, la retroilluminazione viene pilotata come un pin GPIO e va solo da 0 (spenta) a un valore diverso da zero (accesa).

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

Invia cmd al display sul bus SPI, opzionalmente seguito da args (un byte int o un buffer di byte). dcs seleziona il framing DCS quando supportato dal controller.

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

Invia cmd sul bus SPI e legge in risposta len byte, restituendoli come un bytearray. args viene opzionalmente scritto prima della lettura (un byte int o un buffer di byte). dcs seleziona il framing DCS quando supportato dal controller.

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

Esegue un ioctl cmd specifico del controller con un arg opzionale. Solleva ValueError se il display sottostante non supporta ioctl.