O display LCD TFT 1.8″ 128×160 é uma opção de baixo custo para apresentar textos e imagens coloridos. Neste post vamos ver como usá-lo com a Raspberry Pi.
Material Necessário
- Raspberry Pi (vou usar a Raspberry Pi Zero W, mas as instruções valem para todos os modelos, exceto os sem conexão a rede)
- Cartão micro SD (ou SD se o seu Raspberry for muito antigo)
- Fonte DC chaveada micro USB 5V/2A
- Display LCD TFT 1.8″ 128×160
- Jumpers fêmea-fêmea
Conhecendo o Display LCD TFT 1.8″ 128×160
O display propriamente dito é um display LCD (cristal líquido) com tecnologia TFT (thin-film transistor) com uma resolução de 128×160 pontos.
Para controlar o display é usado um controlador STT7735 (datasheet). Este controlador é capaz de controlar displays coloridos com resolução de 132×162 ou 128×160 (que é o nosso caso) e possui memória interna para manter a imagem atual. Ele suporta várias interfaces, o módulo que vamos usar trabalha com SPI a três sinais (dado, clock e seleção), o que significa que só é possível escrever no controlador.
A biblioteca que vamos utilizar configura o ST7735 para trabalhar com 16 bits de cores, no formato 565 BGR (5 bits para azul, seis bits para verde e 5 bits para vermelho). A interface de programação usa valores de 0 a 255 para cada componente, dividindo os valores pelos fatores adequados.
Os sinais SPI trabalham a 3.3V , porém a alimentação do módulo é 5V (tem um regulador na placa).
Conexão do Display LCD TFT na Raspberry Pi
Existem duas versões deste módulo:
- com slot para cartão SD e conector de 8 pinos
- com slot para cartão microSD e conector de 11 pinos
Nos meus testes eu usei a versão com microSD, a tabela abaixo mostra as conexões a serem feitas:
A minha montagem com uma Raspberry Pi Zero W e o display na versão MicroSD:
Preparativos para o Display LCD TFT na Raspberry Pi
Os passo abaixo estão descritos em outros artigos no blog:
- Gravar o Raspberry OS no cartão micro SD. Nos meus testes usei o Raspberry Pi OS (32-bit) Lite de 27/05/2020.
- Configurar para acesso via SSH*
- Se você for usar um modelo com WiFi (ou um adaptador WiFi), configurar para acessar o seu roteador
- Se você for usar uma configuração sem WiFi, conecte via cabo Ethernet ao seu roteador
- Conecte ao Raspberry via SSH a partir de um micro*
*alternativamente, você pode ligar um monitor e teclado a Raspberry Pi e entrar com os comandos direto no console.
Os passos abaixo instalam o módulo para acesso ao display via Python:
sudo apt-get update sudo apt-get install build-essential python-dev python-smbus python-pip python-pil python-numpy sudo apt-get install git git clone https://github.com/TexasInstrumentsDIY/Python_ST7735.git cd Python_ST7735 sudo python setup.py install
É preciso habilitar a interface SPI do Raspberry:
sudo raspi-config
Entrar em “Interface Options” / “SPI” / “Yes”
Código
O exemplo abaixo mostra um pouco dos recursos disponíveis:
# Demonstracao de uso do Display LCD TFT RGB de 1.8" from PIL import Image from PIL import ImageDraw from PIL import ImageFont import ST7735 as TFT import Adafruit_GPIO as GPIO import Adafruit_GPIO.SPI as SPI WIDTH = 128 HEIGHT = 160 SPEED_HZ = 4000000 # Conexoes DC = 24 RST = 25 SPI_PORT = 0 SPI_DEVICE = 0 # Cria o objeto de controle do display disp = TFT.ST7735( DC, rst=RST, spi=SPI.SpiDev( SPI_PORT, SPI_DEVICE, max_speed_hz=SPEED_HZ)) # Inicia e limpa o display disp.begin() disp.clear((32,32,32)) # Obtem o objeto ImageDraw para desenhar com o PIL draw = disp.draw() # Desenha cinco circulos draw.ellipse((0, 0, 16, 16), outline=(0,0,255), fill=(0,0,96)) draw.ellipse((0, 144, 16, 159), outline=(0,0,255), fill=(0,0,96)) draw.ellipse((112, 0, 127, 16), outline=(0,0,255), fill=(0,0,96)) draw.ellipse((112, 144, 127, 159), outline=(0,0,255), fill=(0,0,96)) draw.ellipse((32, 48, 96, 112), outline=(255, 0, 0), fill=(64,0,0)) # Desenha um triangulo dentro do circulo central draw.polygon((96, 80, 48, 108, 48, 52), outline=(255,255,255)) # Uma caixa para o texto draw.rectangle((104,30,124,134), outline=(64,64,64), fill=(0, 192, 0)) # Escreve um texto font=ImageFont.load_default() # Funcao para escrever texto rotacionado # (Extraida dos exemplos da biblioteca) def draw_rotated_text(image, text, position, angle, font, fill=(255,255,255)): # Get rendered font width and height. draw = ImageDraw.Draw(image) width, height = draw.textsize(text, font=font) # Create a new image with transparent background to store the text. textimage = Image.new('RGBA', (width, height), (0,0,0,0)) # Render the text. textdraw = ImageDraw.Draw(textimage) textdraw.text((0,0), text, font=font, fill=fill) # Rotate the text image. rotated = textimage.rotate(angle, expand=1) # Paste the text into the image, using it as a mask for transparency. image.paste(rotated, position, rotated) draw_rotated_text(disp.buffer, 'Display LCD TFT!', (110, 36), 270, font, fill=(255,255,255)) # atualiza a tela disp.display()
Alguns comentários:
- No display usado para testes, com a biblioteca ST7735, as cores são definidas como (B, G, R) ao invés do mais habitual (R, G, B)
- O desenho de gráficos e texto segue a seguinte sequência:
- Obter uma instância de PIL.ImageDraw através de “draw = disp.draw”
- Fazer o desenho usando as funções da biblioteca PIL sobre o draw
- Atualizar o display através de “disp.display()”
Resultado
Executando o código acima obtemos a figura mostrada na foto no início do post.
Conclusão
O Display LCD TFT 1.8″ 128×160 é uma opção poderosa para apresentação de informações nos seus projetos baseados na Raspberry Pi. Sendo gráfico e colorido, é possível uma interação mais sofisticada que display LCD alfanumérico ou gráfico monocromático. O seu tamanho é ideal para projetos que não precisam apresentar quantidades grandes de informações e que serão montados de forma compacta.
Agora que você já conhece o Display LCD TFT 1.8″ 128×160 e sabe como usá-lo, que tal testar algum projeto com ele?
Gostou do artigo “Usando o Display LCD TFT 1.8″ 128×160 com a Raspberry Pi”? Deixe seu comentário logo abaixo dizendo o que achou. Para mais artigos e tutorias de projetos acesse nosso blog.
Caro Daniel, excelente post! Com um pequeno display conectado ao raspberry, p.ex 0.9″ é possível mostrar algumas configurações como endereço de IP, hora, etc…
Thank you.
I was able to draw with RZP for the first time.
I am a beginner of RZP and have tried TFT drawing with this combination by referring to various web pages, but I have never succeeded.
I succeeded with your assistance for the first time today.