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)¶
widthLargura do LCD SPI em pixels (1..32767).heightAltura do LCD SPI em pixels (1..32767).refreshTaxa de atualização do LCD em hertz (1..120). Controla a taxa de clock do SPI.bgrdefina como True para trocar os canais vermelho e azul.byte_swapdefina como True para trocar os bytes de pixel RGB565 enviados ao LCD.hmirrordefina como True para espelhar horizontalmente a saída do display.vflipdefina como True para inverter verticalmente a saída do display.triple_bufferse 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).controllersomente por palavra-chave. Passe uma instância de classe de chip controlador para inicializá-lo junto com o display. Quando fornecido, os métodosinit,display_on,display_offeram_writedo controlador (se presentes) são invocados em vez dos comandos embutidos.backlightsomente 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.- 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
imagecom 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_scalefator de escala no eixo x. Valores negativos invertem horizontalmente. Sey_scalefor omitido, ele seguex_scalepara preservar a proporção.y_scalefator de escala no eixo y. Valores negativos invertem verticalmente (requertriple_buffer=True). Sex_scalefor omitido, ele seguey_scale.roiretângulo da região de interesse(x, y, w, h)da imagem de origem a ser desenhada.rgb_channelcanal RGB a ser extraído de uma imagem de origem RGB565 (0=R, 1=G, 2=B, -1=todos). Faixa: -1..2.alphaopacidade da imagem. 0 é totalmente transparente (preto), 255 é opaco. Faixa: 0..255.color_paletteenum 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 dergb_channel.alpha_paletteimagem em escala de cinza de 256 pixels usada como tabela de consulta de alpha por pixel, modulandoalphacom base no valor em escala de cinza da fonte.hintOR lógico das flags:image.AREA: Usa escalonamento por área ao reduzir.image.BILINEAR: Usa escalonamento bilinear.image.BICUBIC: Usa escalonamento bicúbico.image.CENTER: Centraliza a imagem no display (após o escalonamento).image.HMIRROR: Espelha a imagem horizontalmente.image.VFLIP: Inverte a imagem verticalmente.image.TRANSPOSE: Transpõe a imagem (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica a extração dergb_channelantes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplicacolor_paletteantes do escalonamento.image.SCALE_ASPECT_KEEP: Escala para caber dentro do display.image.SCALE_ASPECT_EXPAND: Escala para preencher o display (com corte).image.SCALE_ASPECT_IGNORE: Escala para preencher o display (esticando).image.ROTATE_90: Rotaciona em 90 graus (VFLIP | TRANSPOSE).image.ROTATE_180: Rotaciona em 180 graus (HMIRROR | VFLIP).image.ROTATE_270: Rotaciona em 270 graus (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Limpa a tela do LCD deixando-a preta.
display_offse 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
DACBacklightouPWMBacklightseja 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
cmdao display pelo barramento SPI, opcionalmente seguido deargs(um byte int ou um buffer de bytes).dcsseleciona o enquadramento DCS quando suportado pelo controlador.
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray¶
Envia
cmdpelo barramento SPI e lêlenbytes de volta, retornando-os como umbytearray.argsé opcionalmente escrito antes da leitura (um byte int ou um buffer de bytes).dcsseleciona o enquadramento DCS quando suportado pelo controlador.