Os displays TFT possibilitam a exibição de textos e imagens coloridas com controle através de plataformas como Arduino. Neste artigo, é mostrada a programação MicroPython com uso de biblioteca para exibição de imagens em display TFT em uma Raspberry Pi Pico.
Display TFT e Raspberry Pi Pico
A Raspberry Pi Pico é uma plataforma bastante versátil, principalmente tratando-se de como é programada: através de C, Wiring, MicroPython ou CircuitPython. O MicroPython tem despontado como uma opção bastante interessante, pois o Python tem sido porta de entrada para iniciantes em programação, ou programadores mais experientes podem ter mais facilidade em ingressar no mundo do hardware através desta linguagem.
O display utilizado neste artigo é o TFT, que possui comunicação via SPI. Este protocolo permite o seu uso conectado a diversos tipos de plataformas, como o Arduino. Se quiser apreder como utiliza-lo no Arduino, confira nosso artigo: Como utilizar o display IPS LCD 0.96″ colorido
O experimento de hoje traz o uso de imagens externas a serem exibidas no display.
Materiais necessários
- Raspberry Pi Pico (com headers soldados)
- Cabo micro USB
- Protoboard 830 pontos
- Display IPS LCD 1.44” colorido
- Jumpers macho-macho
Montagem do circuito do display IPS LCD 1.44″ colorido
Faremos o circuito conforme mostrado na figura abaixo:
Onde:
Raspberry Pi Pico | Display |
GND | GND |
VBUS | VCC |
GP10 | SCL (ou SCK) |
GP11 | SDA (ou MOSI) |
GP17 | RES (ou RST) |
GP16 | DC |
GP18 | CS |
3V3 | BL (Backlight) |
Instalação de biblioteca
A Raspberry Pi Pico deve estar preparada para receber arquivos em MicroPython. Veja os primeiros passos para deixar sua placa pronta para uso neste artigo aqui, na seção Primeiros passos com a Raspberry Pi Pico e MicroPython.
Faremos uso da biblioteca ST7735.py, que deve estar dentro da memória da Pico. Abra o Thonny IDE e copie o código a seguir disponível no GitHub.
https://github.com/boochow/MicroPython-ST7735/blob/master/ST7735.py
Verifique o interpretador do Thonny IDE, clicando no rodapé direto: Se estiver a opção MicroPython (Raspberry Pi Pico), clique para habilitar. Senão, clique em Configurar interpretador… e escolha esta opção.
Se tudo estiver correto e a placa configurada para receber códigos em MicroPyhon, você verá o prompt habilitado e a placa no rodapé direito.
Salve o código da biblioteca usando o menu Arquivo (File) => Salvar (save). Será aberta uma janela como mostrada a seguir:
Escolha a opção Raspberry Pi Pico. Salve com o mesmo nome e extensão *.py, para não perder as propriedades da biblioteca.
Importando a imagem na memória da Raspberry Pi Pico
Os arquivos para visualização no display devem estar em formato BMP (bitmap) e não podem ter uma resolução alta, além de respeitar o tamanho do display. Neste caso, o display possui 128 x 128 pixels, a imagem utilizada deve ser redimensionada previamente com 128 x 128 pixels. Utilizei o GIMP para redimensionar a imagem (aqui um breve tutorial).
A imagem precisa estar salva na memória da Raspberry Pi Pico. Para isto, acesse o menu Visualizar => Arquivos. Será mostrada na lateral as pastas referentes ao computador (acima) e à Raspberry Pi Pico (abaixo). Navegue nas pastas do computador até encontrar a imagem a ser exibida no display.
Ao encontrar o arquivo, clique com o botão direito sobre ele e escolha a opção “Enviar para /”. Será enviada uma cópia da imagem para a memória da Pico. O arquivo será mostrado na navegação na parte inferior.
Código
Este código é uma adaptação do original escrito por Adafruit e Stechiez. Realiza testes gráficos com várias cores, além de testes de escrita e a exibição da imagem.
# Código original por Stechiez (29-06-2021) e Adafruit # Modificado por Gedeane Kenshima # Bibliotecas from ST7735 import TFT,TFTColor from sysfont import sysfont import time import math from machine import SPI,Pin # Configurações SPI spi = SPI(1, baudrate=20000000, polarity=0, phase=0, sck=Pin(10), mosi=Pin(11), miso=None) tft=TFT(spi,16,17,18) #Iniciação do display tft.initr() tft.rgb(True) tft.fill(TFT.BLACK) # Rotação (de 0 a 3) tft.rotation(2) def figura(): # Fundo preto tft.fill(TFT.BLACK) # Arquivo da figura f=open('MakerHero.bmp', 'rb') if f.read(2) == b'BM': #header dummy = f.read(8) #file size(4), creator bytes(4) offset = int.from_bytes(f.read(4), 'little') hdrsize = int.from_bytes(f.read(4), 'little') width = int.from_bytes(f.read(4), 'little') height = int.from_bytes(f.read(4), 'little') if int.from_bytes(f.read(2), 'little') == 1: #planes must be 1 depth = int.from_bytes(f.read(2), 'little') if depth == 24 and int.from_bytes(f.read(4), 'little') == 0:#compress method == uncompressed print("Image size:", width, "x", height) rowsize = (width * 3 + 3) & ~3 if height < 0: height = -height flip = False else: flip = True w, h = width, height if w > 128: w = 128 if h > 128: h = 128 tft._setwindowloc((0,0),(w - 1,h - 1)) for row in range(h): if flip: pos = offset + (height - 1 - row) * rowsize else: pos = offset + row * rowsize if f.tell() != pos: dummy = f.seek(pos) for col in range(w): bgr = f.read(3) tft._pushcolor(TFTColor(bgr[2],bgr[1],bgr[0])) spi.deinit() # Teste de linhas def testlines(color): tft.fill(TFT.BLACK) for x in range(0, tft.size()[0], 6): tft.line((0,0),(x, tft.size()[1] - 1), color) for y in range(0, tft.size()[1], 6): tft.line((0,0),(tft.size()[0] - 1, y), color) tft.fill(TFT.BLACK) for x in range(0, tft.size()[0], 6): tft.line((tft.size()[0] - 1, 0), (x, tft.size()[1] - 1), color) for y in range(0, tft.size()[1], 6): tft.line((tft.size()[0] - 1, 0), (0, y), color) # Função padrão def test_main(): new_line = '\n' tft.fill(TFT.BLACK) # Mensagens no display com tamanhos e cores diferentes tft.text((0, 4), "Raspberry Pi", TFT.WHITE, sysfont, 1) tft.text((0, 15), "Pico no display", TFT.YELLOW, sysfont, 2) tft.text((0, 60), "TFT", TFT.BLUE, sysfont, 3) time.sleep_ms(1000) while True: # Padrão inicial test_main() # Aguarda 500 ms time.sleep_ms(500) # Exibe figura figura() # Aguarda 1s time.sleep_ms(1000) # Exibe animação com linhas vermelhas testlines(TFT.RED) # Aguarda 500 ms time.sleep_ms(500)
Execute o código na sua Raspberry Pi Pico. As imagens do display devem aparecer como mostrado a seguir.
Você pode realizar alterações nas cores das linhas (testlines(TFT.RED)), substituindo RED por outra cor em inglês, além de personalizar o texto, seu tamnho, cores e a imagem de exibição.
Gostou de conhecer o display IPS LCD e como exibir nele imagens usando a Raspberry Pi Pico? Amplia muito as possibilidades de uso desta plataforma, além de poder exibir imagens personalizadas em seus projetos!
Deixe seu comentário logo abaixo se gostou do artigo. E considere nos seguir no Instagram =)
E se quiser aprender mais sobre MicroPython, confira nosso curso Curso de Programação em MicroPython com Raspberry Pi,