class SPIDisplay – Controlador de pantalla SPI

La clase SPIDisplay controla pequeños paneles TFT y OLED conectados por SPI, siendo el más común el OLED RGB SSD1351 de 128x160 del OpenMV LCD Shield. El controlador gestiona internamente el bus SPI y una línea GPIO de selección de chip / DC, por lo que quienes lo invocan solo configuran la geometría del panel, la tasa de refresco y cualquier bandera de orientación. La inicialización específica del panel (secuencias de registros, encuadre de escritura en RAM) se suministra mediante el argumento de palabra clave controller: pase una instancia de SSD1351 para controlar el LCD Shield, o implemente su propia clase de controlador para otros paneles.

Los fotogramas se presentan llamando a write() con una image.Image. El controlador convierte la fuente a RGB565 y aplica internamente el escalado, la ROI, la paleta y las transformaciones de orientación, por lo que quien lo invoca no necesita predimensionar la imagen. El brillo de la retroiluminación puede dejarse como un simple GPIO de encendido/apagado (predeterminado) o controlarse mediante DACBacklight / PWMBacklight pasando uno como argumento de palabra clave backlight.

Ejemplo – reflejar la cámara en el OLED SSD1351 del 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())

Constructores

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 Ancho del LCD SPI en píxeles (1..32767).

height Alto del LCD SPI en píxeles (1..32767).

refresh Tasa de refresco del LCD en hercios (1..120). Controla la frecuencia del reloj SPI.

bgr establézcalo en True para intercambiar los canales rojo y azul.

byte_swap establézcalo en True para intercambiar los bytes de los píxeles RGB565 enviados al LCD.

hmirror establézcalo en True para reflejar horizontalmente la salida de la pantalla.

vflip establézcalo en True para voltear verticalmente la salida de la pantalla.

triple_buffer si es True, hace que las actualizaciones de la pantalla no sean bloqueantes a costa de triplicar el tamaño de la pantalla en RAM. El valor predeterminado depende de la placa (activado en placas con SDRAM).

controller solo por palabra clave. Pase una instancia de la clase del chip controlador para inicializarlo junto con la pantalla. Cuando se proporciona, se invocan los métodos init, display_on, display_off y ram_write del controlador (si están presentes) en lugar de los comandos integrados.

backlight solo por palabra clave. Pase un módulo controlador de retroiluminación a usar. De forma predeterminada, la retroiluminación se controla mediante un pin GPIO.

width() int

Devuelve el ancho de la pantalla.

height() int

Devuelve el alto de la pantalla.

refresh() int

Devuelve la tasa de refresco.

bgr() bool

Devuelve si los canales rojo y azul están intercambiados.

byte_swap() bool

Devuelve si los píxeles RGB565 se envían con los bytes invertidos.

triple_buffer() bool

Devuelve si el triple búfer está habilitado.

framesize() int

Devuelve el identificador de framesize configurado.

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

Muestra image con su esquina superior izquierda en (x, y). Se puede pasar una cadena de ruta en lugar de una imagen para cargarla y dibujarla en un solo paso.

x_scale factor de escala del eje x. Los valores negativos voltean horizontalmente. Si se omite y_scale, sigue a x_scale para preservar la relación de aspecto.

y_scale factor de escala del eje y. Los valores negativos voltean verticalmente (requiere triple_buffer=True). Si se omite x_scale, sigue a y_scale.

roi rectángulo de región de interés (x, y, w, h) de la imagen de origen a dibujar.

rgb_channel canal RGB a extraer de una imagen de origen RGB565 (0=R, 1=G, 2=B, -1=todos). Rango: -1..2.

alpha opacidad de la imagen. 0 es totalmente transparente (negro), 255 es opaco. Rango: 0..255.

color_palette enum de paleta de color (p. ej. image.PALETTE_RAINBOW) o una imagen RGB565 de 256 píxeles usada como tabla de búsqueda de color sobre el valor en escala de grises de la fuente. Se aplica después de la extracción de rgb_channel.

alpha_palette imagen en escala de grises de 256 píxeles usada como tabla de búsqueda de alfa por píxel que modula alpha según el valor en escala de grises de la fuente.

hint OR lógico de las banderas:

clear(display_off: bool = False) None

Borra la pantalla LCD a negro.

display_off si es True, apaga la lógica de la pantalla en lugar de borrar el framebuffer. La retroiluminación también debe desactivarse después.

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

Con value, establece la intensidad de la retroiluminación (0=apagado..100=máximo). Sin argumentos, devuelve el valor actual de la retroiluminación.

A menos que se pase un controlador DACBacklight o PWMBacklight en la construcción, la retroiluminación se controla como un pin GPIO y solo va de 0 (apagado) a un valor distinto de cero (encendido).

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

Envía cmd a la pantalla a través del bus SPI, opcionalmente seguido de args (un byte entero o un búfer de bytes). dcs selecciona el encuadre DCS cuando el controlador lo admite.

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

Envía cmd a través del bus SPI y lee len bytes de respuesta, devolviéndolos como un bytearray. args se escribe opcionalmente antes de la lectura (un byte entero o un búfer de bytes). dcs selecciona el encuadre DCS cuando el controlador lo admite.

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

Emite un ioctl cmd específico del controlador con un arg opcional. Lanza ValueError si la pantalla subyacente no admite ioctl.