Usando o Display LCD TFT 1.8″ 128×160 na Raspberry Pi 1

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

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:

conectando a raspberry pi no display lcd

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”

configurando display lcd na raspberry pi passo 1 configurando display lcd na raspberry pi passo 2 configurando display lcd na raspberry pi passo 3

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

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.

Faça seu comentário

Acesse sua conta e participe

Um Comentário

  1. 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.