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)¶
widthLarghezza dell’LCD SPI in pixel (1..32767).heightAltezza dell’LCD SPI in pixel (1..32767).refreshFrequenza di aggiornamento dell’LCD in hertz (1..120). Controlla la frequenza del clock SPI.bgrimposta a True per scambiare i canali rosso e blu.byte_swapimposta a True per scambiare i byte dei pixel RGB565 inviati all’LCD.hmirrorimposta a True per specchiare orizzontalmente l’uscita del display.vflipimposta a True per capovolgere verticalmente l’uscita del display.triple_bufferse 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).controllersolo keyword. Passa un’istanza della classe del chip controller per inizializzarla insieme al display. Quando fornito, vengono invocati i metodiinit,display_on,display_offeram_writedel controller (se presenti) invece dei comandi integrati.backlightsolo keyword. Passa un modulo controller della retroilluminazione da usare. Per impostazione predefinita la retroilluminazione viene controllata tramite un pin GPIO.- 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
imagecon 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_scalefattore di scala sull’asse x. I valori negativi capovolgono orizzontalmente. Sey_scaleviene omesso seguex_scaleper preservare le proporzioni.y_scalefattore di scala sull’asse y. I valori negativi capovolgono verticalmente (richiedetriple_buffer=True). Sex_scaleviene omesso seguey_scale.roirettangolo della regione di interesse(x, y, w, h)dell’immagine sorgente da disegnare.rgb_channelcanale RGB da estrarre da un’immagine sorgente RGB565 (0=R, 1=G, 2=B, -1=tutti). Intervallo: -1..2.alphaopacità dell’immagine. 0 è completamente trasparente (nero), 255 è opaco. Intervallo: 0..255.color_paletteenum 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 dirgb_channel.alpha_paletteimmagine in scala di grigi di 256 pixel usata come tabella di lookup dell’alpha per pixel che modulaalphain base al valore in scala di grigi della sorgente.hintOR logico dei flag:image.AREA: Usa lo scaling per area durante la riduzione.image.BILINEAR: Usa lo scaling bilineare.image.BICUBIC: Usa lo scaling bicubico.image.CENTER: Centra l’immagine sul display (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: Applica l’estrazione dirgb_channelprima dello scaling.image.APPLY_COLOR_PALETTE_FIRST: Applicacolor_paletteprima dello scaling.image.SCALE_ASPECT_KEEP: Scala per adattare all’interno del display.image.SCALE_ASPECT_EXPAND: Scala per riempire il display (con ritaglio).image.SCALE_ASPECT_IGNORE: Scala 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).
- clear(display_off: bool = False) None¶
Cancella lo schermo LCD portandolo a nero.
display_offse 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
DACBacklightoPWMBacklightalla 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
cmdal display sul bus SPI, opzionalmente seguito daargs(un byte int o un buffer di byte).dcsseleziona il framing DCS quando supportato dal controller.
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray¶
Invia
cmdsul bus SPI e legge in rispostalenbyte, restituendoli come unbytearray.argsviene opzionalmente scritto prima della lettura (un byte int o un buffer di byte).dcsseleziona il framing DCS quando supportato dal controller.