classe RGBDisplay – Driver de Display RGB

A classe RGBDisplay controla LCDs RGB paralelos de 24 bits através do controlador LTDC (LCD-TFT) do STM32. O LTDC transmite os pixels diretamente de um framebuffer respaldado por SDRAM na taxa de clock de pixel escolhida, de modo que altas taxas de atualização (até 120 Hz) são possíveis sem envolvimento da CPU.

Na OpenMV Cam Pure Thermal, o mesmo barramento paralelo de 24 bits também alimenta um codificador HDMI TFP410 embutido na placa, de modo que sua saída HDMI também é controlada por essa classe – use display_on=False para apagar o LCD embutido enquanto continua enviando pixels ao codificador.

A resolução do painel é selecionada através de framesize usando as constantes definidas no módulo display (QVGA, VGA, WVGA, HD, FHD, …). As sequências de inicialização específicas de cada painel são conectadas através do argumento de palavra-chave controller (por exemplo, ST7701 para painéis baseados no ST7701). O brilho da luz de fundo é controlado como um simples GPIO por padrão, ou por DACBacklight / PWMBacklight se um deles for passado como backlight.

Os quadros são apresentados chamando write() com uma image.Image. O driver trata internamente a conversão RGB, o escalonamento, a ROI, a paleta e as transformações de orientação.

Exemplo – espelhar a câmera em um painel de 480x272 a 60 Hz:

import csi
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)

while True:
    lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)

Construtores

class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)

framesize Uma das resoluções padrão suportadas (veja as constantes do módulo display).

refresh Define a taxa de atualização da tela em hertz (30-120). Isso controla o clock de pixel do LCD RGB.

display_on Habilita a saída do LCD local. Passe False na OpenMV Cam Pure Thermal, cujo barramento paralelo de 24 bits controla tanto o LCD embutido quanto o codificador HDMI TFP410 – isso mantém o LCD embutido apagado enquanto continua alimentando o codificador HDMI. Em outras OpenMV Cams não há um destino compartilhado e isso pode ser deixado em seu valor padrão.

triple_buffer Se True, torna as atualizações da tela não bloqueantes ao custo de 3x o tamanho do display em RAM.

portrait Troca a largura e a altura do framesize.

controller Passe uma instância de classe de chip controlador para inicializá-lo junto com o display.

backlight Passe uma instância de módulo controlador de luz de fundo a ser usada. Por padrão, a luz de fundo será controlada por meio de um pino GPIO.

deinit() None

Libera os pinos de I/O e a RAM usados pela classe. Isso é chamado automaticamente na destruição.

width() int

Retorna a largura da tela.

height() int

Retorna a altura da tela.

triple_buffer() bool

Retorna se o triple buffering está habilitado.

bgr() bool

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

byte_swap() bool

Retorna se os bytes de pixel RGB565 são trocados na saída.

framesize() int

Retorna a constante de framesize com a qual o display foi configurado.

refresh() int

Retorna a taxa de atualização.

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 para preto. Você também deve desligar a luz de fundo depois disso para garantir que a tela fique preta, já que muitos displays ficam brancos quando apenas a luz de fundo está ligada.

backlight(value: int | None = None) int

Define o valor de atenuação da luz de fundo do LCD, de 0 (desligado) a 100 (ligado). Não passe argumentos para obter o valor atual da luz de fundo.

A menos que um controlador DACBacklight ou PWMBacklight tenha sido passado ao construtor, a luz de fundo é controlada como um pino GPIO e só vai de 0 (desligado) a um valor diferente de zero (ligado).

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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

Exibe uma image cujo canto superior esquerdo começa na localização x, y. Uma string de caminho também pode ser passada no lugar de um objeto de imagem para carregar automaticamente a imagem do disco.

x_scale controla o quanto a imagem exibida é escalonada na direção x. Se esse valor for negativo, a imagem será invertida horizontalmente. Se y_scale não for especificado, ele corresponderá a x_scale para manter a proporção.

y_scale controla o quanto a imagem exibida é escalonada na direção y. Se esse valor for negativo, a imagem será invertida verticalmente (requer triple buffering). Se x_scale não for especificado, ele corresponderá a y_scale para manter a proporção.

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

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a ser extraído de uma imagem RGB565 e renderizado em escala de cinza. -1 desabilita a extração de canal.

alpha controla o quão opaca é a imagem, de 0 (totalmente transparente / preto) a 255 (opaco).

color_palette uma imagem RGB565 de 256 pixels no total usada como tabela de consulta de cores sobre o valor em escala de cinza da imagem de entrada. Aplicada após a extração de rgb_channel. Também pode ser um enum de paleta (por exemplo, image.PALETTE_RAINBOW).

alpha_palette uma imagem GRAYSCALE de 256 pixels no total usada como tabela de consulta de alpha por pixel sobre o valor em escala de cinza da imagem de entrada. Aplicada após a extração de rgb_channel.

hint é um OR lógico das flags: