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)¶
widthAncho del LCD SPI en píxeles (1..32767).heightAlto del LCD SPI en píxeles (1..32767).refreshTasa de refresco del LCD en hercios (1..120). Controla la frecuencia del reloj SPI.bgrestablézcalo en True para intercambiar los canales rojo y azul.byte_swapestablézcalo en True para intercambiar los bytes de los píxeles RGB565 enviados al LCD.hmirrorestablézcalo en True para reflejar horizontalmente la salida de la pantalla.vflipestablézcalo en True para voltear verticalmente la salida de la pantalla.triple_buffersi 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).controllersolo 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étodosinit,display_on,display_offyram_writedel controlador (si están presentes) en lugar de los comandos integrados.backlightsolo 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.- 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
imagecon 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_scalefactor de escala del eje x. Los valores negativos voltean horizontalmente. Si se omitey_scale, sigue ax_scalepara preservar la relación de aspecto.y_scalefactor de escala del eje y. Los valores negativos voltean verticalmente (requieretriple_buffer=True). Si se omitex_scale, sigue ay_scale.roirectángulo de región de interés(x, y, w, h)de la imagen de origen a dibujar.rgb_channelcanal RGB a extraer de una imagen de origen RGB565 (0=R, 1=G, 2=B, -1=todos). Rango: -1..2.alphaopacidad de la imagen. 0 es totalmente transparente (negro), 255 es opaco. Rango: 0..255.color_paletteenum 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 dergb_channel.alpha_paletteimagen en escala de grises de 256 píxeles usada como tabla de búsqueda de alfa por píxel que modulaalphasegún el valor en escala de grises de la fuente.hintOR lógico de las banderas:image.AREA: Usa escalado por área al reducir.image.BILINEAR: Usa escalado bilineal.image.BICUBIC: Usa escalado bicúbico.image.CENTER: Centra la imagen en la pantalla (después del escalado).image.HMIRROR: Refleja la imagen horizontalmente.image.VFLIP: Voltea la imagen verticalmente.image.TRANSPOSE: Transpone la imagen (intercambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica la extracción dergb_channelantes del escalado.image.APPLY_COLOR_PALETTE_FIRST: Aplicacolor_paletteantes del escalado.image.SCALE_ASPECT_KEEP: Escala para que quepa dentro de la pantalla.image.SCALE_ASPECT_EXPAND: Escala para llenar la pantalla (recortando).image.SCALE_ASPECT_IGNORE: Escala para llenar la pantalla (estirando).image.ROTATE_90: Rota 90 grados (VFLIP | TRANSPOSE).image.ROTATE_180: Rota 180 grados (HMIRROR | VFLIP).image.ROTATE_270: Rota 270 grados (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Borra la pantalla LCD a negro.
display_offsi 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
DACBacklightoPWMBacklighten 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
cmda la pantalla a través del bus SPI, opcionalmente seguido deargs(un byte entero o un búfer de bytes).dcsselecciona 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
cmda través del bus SPI y leelenbytes de respuesta, devolviéndolos como unbytearray.argsse escribe opcionalmente antes de la lectura (un byte entero o un búfer de bytes).dcsselecciona el encuadre DCS cuando el controlador lo admite.