classe SPIDisplay – Driver de Display SPI

A classe SPIDisplay controla pequenos painéis TFT e OLED conectados via SPI – mais comumente o OLED RGB SSD1351 de 128x160 no OpenMV LCD Shield. O driver gerencia internamente o barramento SPI e uma linha GPIO de chip-select / DC, de modo que os chamadores apenas configuram a geometria do painel, a taxa de atualização e quaisquer flags de orientação. A inicialização específica do painel (sequências de registradores, enquadramento de gravação na RAM) é fornecida através do argumento de palavra-chave controller – passe uma instância de SSD1351 para controlar o LCD Shield, ou implemente sua própria classe de controlador para outros painéis.

Os quadros são apresentados chamando write() com uma image.Image. O driver converte a fonte para RGB565 e aplica internamente o escalonamento, a ROI, a paleta e as transformações de orientação, de modo que o chamador não precisa pré-dimensionar a imagem. O brilho da luz de fundo pode ser deixado como um simples GPIO liga/desliga (padrão) ou controlado por DACBacklight / PWMBacklight passando um deles como argumento de palavra-chave backlight.

Exemplo – espelhar a câmera no OLED SSD1351 do 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())

Construtores

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 Largura do LCD SPI em pixels (1..32767).

height Altura do LCD SPI em pixels (1..32767).

refresh Taxa de atualização do LCD em hertz (1..120). Controla a taxa de clock do SPI.

bgr defina como True para trocar os canais vermelho e azul.

byte_swap defina como True para trocar os bytes de pixel RGB565 enviados ao LCD.

hmirror defina como True para espelhar horizontalmente a saída do display.

vflip defina como True para inverter verticalmente a saída do display.

triple_buffer se True, torna as atualizações da tela não bloqueantes ao custo de 3X o tamanho do display em RAM. O padrão depende da placa (ligado para placas com SDRAM).

controller somente por palavra-chave. Passe uma instância de classe de chip controlador para inicializá-lo junto com o display. Quando fornecido, os métodos init, display_on, display_off e ram_write do controlador (se presentes) são invocados em vez dos comandos embutidos.

backlight somente por palavra-chave. Passe um módulo controlador de luz de fundo a ser usado. Por padrão, a luz de fundo é controlada por meio de um pino GPIO.

width() int

Retorna a largura da tela.

height() int

Retorna a altura da tela.

refresh() int

Retorna a taxa de atualização.

bgr() bool

Retorna se os canais vermelho e azul estão trocados.

byte_swap() bool

Retorna se os pixels RGB565 são enviados com bytes invertidos.

triple_buffer() bool

Retorna se o triple buffering está habilitado.

framesize() int

Retorna o 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

Exibe image com seu canto superior esquerdo em (x, y). Uma string de caminho pode ser passada no lugar de uma imagem para carregá-la e desenhá-la em uma única etapa.

x_scale fator de escala no eixo x. Valores negativos invertem horizontalmente. Se y_scale for omitido, ele segue x_scale para preservar a proporção.

y_scale fator de escala no eixo y. Valores negativos invertem verticalmente (requer triple_buffer=True). Se x_scale for omitido, ele segue y_scale.

roi retângulo da região de interesse (x, y, w, h) da imagem de origem a ser desenhada.

rgb_channel canal RGB a ser extraído de uma imagem de origem RGB565 (0=R, 1=G, 2=B, -1=todos). Faixa: -1..2.

alpha opacidade da imagem. 0 é totalmente transparente (preto), 255 é opaco. Faixa: 0..255.

color_palette enum de paleta de cores (por exemplo, image.PALETTE_RAINBOW) ou uma imagem RGB565 de 256 pixels usada como tabela de consulta de cores sobre o valor em escala de cinza da fonte. Aplicada após a extração de rgb_channel.

alpha_palette imagem em escala de cinza de 256 pixels usada como tabela de consulta de alpha por pixel, modulando alpha com base no valor em escala de cinza da fonte.

hint OR lógico das flags:

clear(display_off: bool = False) None

Limpa a tela do LCD deixando-a preta.

display_off se True, desliga a lógica do display em vez de limpar o framebuffer. A luz de fundo também deve ser desabilitada em seguida.

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

Com value, define a intensidade da luz de fundo (0=desligado..100=máximo). Sem argumentos, retorna o valor atual da luz de fundo.

A menos que um controlador DACBacklight ou PWMBacklight seja passado na construção, a luz de fundo é controlada como um pino GPIO e só vai de 0 (desligado) a um valor diferente de zero (ligado).

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

Envia cmd ao display pelo barramento SPI, opcionalmente seguido de args (um byte int ou um buffer de bytes). dcs seleciona o enquadramento DCS quando suportado pelo controlador.

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

Envia cmd pelo barramento SPI e lê len bytes de volta, retornando-os como um bytearray. args é opcionalmente escrito antes da leitura (um byte int ou um buffer de bytes). dcs seleciona o enquadramento DCS quando suportado pelo controlador.

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

Emite um ioctl cmd específico do controlador com arg opcional. Levanta ValueError se o display subjacente não suportar ioctl.