classe SPIDisplay – Controlador de Ecrã SPI

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

Os fotogramas são apresentados chamando write() com um image.Image. O controlador converte a fonte para RGB565 e aplica internamente escalonamento, ROI, paleta e transformações de orientação, pelo que o utilizador não precisa de pré-dimensionar a imagem. O brilho da retroiluminação pode ser deixado como um simples GPIO ligado/desligado (predefinição) ou controlado por DACBacklight / PWMBacklight passando um como argumento de palavra-chave backlight.

Exemplo – espelhar a câmara 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 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 para o LCD.

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

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

triple_buffer se True torna as atualizações do ecrã não bloqueantes ao custo de 3X o tamanho do ecrã em RAM. O valor predefinido depende da placa (ativado para placas com SDRAM).

controller apenas palavra-chave. Passe uma instância de classe do chip controlador para o inicializar juntamente com o ecrã. Quando fornecido, os métodos init, display_on, display_off e ram_write do controlador (se presentes) são invocados em vez dos comandos incorporados.

backlight apenas palavra-chave. Passe um módulo controlador de retroiluminação a utilizar. Por defeito, a retroiluminação é controlada por um pino GPIO.

width() int

Devolve a largura do ecrã.

height() int

Devolve a altura do ecrã.

refresh() int

Devolve a taxa de atualização.

bgr() bool

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

byte_swap() bool

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

triple_buffer() bool

Devolve se o triple buffering está ativado.

framesize() int

Devolve 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

Apresenta image com o seu canto superior esquerdo em (x, y). Pode ser passada uma string de caminho em vez de uma imagem para a carregar e desenhar num único passo.

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

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

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

rgb_channel canal RGB a extrair de uma imagem de origem RGB565 (0=R, 1=G, 2=B, -1=todos). Intervalo: -1..2.

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

color_palette enum de paleta de cor (ex.: image.PALETTE_RAINBOW) ou uma imagem RGB565 de 256 pixels utilizada como tabela de consulta de cor sobre o valor em escala de cinzentos da origem. Aplicada após a extração de rgb_channel.

alpha_palette imagem em escala de cinzentos de 256 pixels utilizada como tabela de consulta de alfa por pixel que modula alpha com base no valor em escala de cinzentos da origem.

hint OR lógico dos sinalizadores:

clear(display_off: bool = False) None

Limpa o ecrã LCD para preto.

display_off se True, desliga a lógica do ecrã em vez de limpar o framebuffer. A retroiluminação também deverá ser desativada posteriormente.

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

Com value, define a intensidade da retroiluminação (0=desligado..100=máximo). Sem argumentos, devolve o valor atual da retroiluminação.

A menos que um controlador DACBacklight ou PWMBacklight seja passado na construção, a retroiluminação é controlada como um pino GPIO e apenas alterna entre 0 (desligado) e não-zero (ligado).

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

Envia cmd para o ecrã pelo barramento SPI, opcionalmente seguido de args (um byte inteiro 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, devolvendo-os como um bytearray. args é opcionalmente escrito antes da leitura (um byte inteiro 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. Lança ValueError se o ecrã subjacente não suportar ioctl.