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)¶
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 SPI.bgrdefina como True para trocar os canais vermelho e azul.byte_swapdefina como True para trocar os bytes de pixel RGB565 enviados para o LCD.hmirrordefina como True para espelhar horizontalmente a saída do ecrã.vflipdefina como True para inverter verticalmente a saída do ecrã.triple_bufferse 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).controllerapenas palavra-chave. Passe uma instância de classe do chip controlador para o inicializar juntamente com o ecrã. Quando fornecido, os métodosinit,display_on,display_offeram_writedo controlador (se presentes) são invocados em vez dos comandos incorporados.backlightapenas palavra-chave. Passe um módulo controlador de retroiluminação a utilizar. Por defeito, a retroiluminação é controlada por 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¶
Apresenta
imagecom 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_scalefator de escala do eixo x. Valores negativos espelham horizontalmente. Sey_scalefor omitido, seguex_scalepara preservar a proporção.y_scalefator de escala do eixo y. Valores negativos invertem verticalmente (requertriple_buffer=True). Sex_scalefor omitido, seguey_scale.roiretângulo de região de interesse(x, y, w, h)da imagem de origem a desenhar.rgb_channelcanal RGB a extrair de uma imagem de origem RGB565 (0=R, 1=G, 2=B, -1=todos). Intervalo: -1..2.alphaopacidade da imagem. 0 é totalmente transparente (preto), 255 é opaco. Intervalo: 0..255.color_paletteenum 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 dergb_channel.alpha_paletteimagem em escala de cinzentos de 256 pixels utilizada como tabela de consulta de alfa por pixel que modulaalphacom base no valor em escala de cinzentos da origem.hintOR lógico dos sinalizadores:image.AREA: Utiliza escalonamento por área ao reduzir.image.BILINEAR: Utiliza escalonamento bilinear.image.BICUBIC: Utiliza escalonamento bicúbico.image.CENTER: Centra a imagem no ecrã (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 ecrã.image.SCALE_ASPECT_EXPAND: Escala para preencher o ecrã (com corte).image.SCALE_ASPECT_IGNORE: Escala para preencher o ecrã (com distorção).image.ROTATE_90: Roda 90 graus (VFLIP | TRANSPOSE).image.ROTATE_180: Roda 180 graus (HMIRROR | VFLIP).image.ROTATE_270: Roda 270 graus (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Limpa o ecrã LCD para preto.
display_offse 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
DACBacklightouPWMBacklightseja 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
cmdpara o ecrã pelo barramento SPI, opcionalmente seguido deargs(um byte inteiro 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, devolvendo-os como umbytearray.argsé opcionalmente escrito antes da leitura (um byte inteiro ou um buffer de bytes).dcsseleciona o enquadramento DCS quando suportado pelo controlador.