Manual

do

Maker

.

com

Display ST7789 no Raspberry

Display ST7789 no Raspberry

Faça uma cópia desse artigo, tire screenshot, imprima, tatue. Comecei às 4:15 da madrugada a configuração do display ST7789 no Raspberry e somente às 14:10 eu consegui colocar pra funcionar.

Apesar de ter encontrado uma biblioteca, não estava claro para mim o wiring. Fiz diversos testes, cheguei a ferver a CPU, não sei como não queimou nada, mas no final deu certo. Depois de habilitar, iniciei o projeto desejado que estava há dias postergando devido à complexidade da prova de conceito. Mas não se preocupe, porque aqui você terá tudo o que precisa para estar com seu display fazendo a mesma coisa ao final do artigo!

Já fiz uma brincadeira com o display OLED 128x32, fiquei feliz com o resultado em um display tão simples com pixels do tamanho de ladrilhos, mas ainda assim teve quem negativasse o vídeo, provavelmente me culpando pela qualidade do display.

Onde comprar o display ST7789?

Esse display OLED 240x240 é um produto que você encontra na UsinaInfo através desse link. É um display grande, barato e incrível, por ser RGB e permitir coisas como a da imagem de destaque desse artigo.

Onde comprar Raspberry?

Se você ainda procura pela versão do Raspberry Pi 3B+, seus problemas acabaram. Tem à pronta entrega na Saravati, que você pode conferir através desse link.

Se procura pela Raspberry Pi 4 4GB, está com sorte também, porque a MASUGUX tem; mas no momento desse artigo é a última peça.

Onde comprar a câmera do Raspberry?

Para esse artigo, a câmera será fundamental. É uma peça barata e fácil de instalar e configurar. A MASUGUX também tem ela, dê uma conferida.

Como habilitar o SPI no Raspberry?

Esse display ST7789 utiliza o barramento SPI. Outra característica é que ele não tem o pino CS. Antes de entrarmos na parte de pinout e wiring, devemos previamente habilitar o barramento SPI no Raspberry. Podemos fazê-lo diretamente no arquivo /boot/config.txt ou através do programa raspi-config. Vamos pelo mais simples.

sudo su
raspi-config

Vá até o item de menu Interfacing Options e depois SPI. Habilite-o, saia do menu e reinicie o Raspberry:

shutdown -r now

Se preferir fazer diretamente no arquivo /boot/config.txt, bastará descomentar a linha dtparam=spi=on, removendo a cerquilha (ou "trena", ou "sustenido", ou "tralha", ou "jogo da velha", ou "sharp"...). Do mesmo modo, salve, saia e reinicie o Raspberry.

Driver para o ST7789 no Raspberry

Baixe ou clone do meu repositório no github. Preferencialmente, faça-o diretamente no diretório /home/pi para ficar fácil de manipular.

Instalar dependências

Alguns pacotes extras serão necessários para manipulação de imagens e para as matrizes RGB. Faça a instalação previamente e, faltando algo mais, a dependência será reclamada, bastando instalá-la posteriormente.

sudo su
apt-get update
apt-get install python-pip python-numpy python-pil python-setuptools

O pip é um gerenciador de pacotes Python, só o tenha instalado para futuras implementações.

Compilar o driver para o ST7789 no Raspberry

Agora entre no diretório do driver e execute:

python setup.py build
python setup.py install

Agora já dá pra rodar o primeiro test... oh, wait! Ainda tem o mais precioso dos processos; o wiring!

Wiring do display ST7789 no Raspberry

Foi o pior dos pesadelos fazer esse wiring, principalmente porque no driver tem alguns dos pinos, mas outros são difusos. Também não sabia se a referência era ao pino físico ou se era ao GPIO. Além disso, o display que é SPI está com o silk SDA e SCL. Tem um BLK e um DC. Só faltou a Marvel; e tudo sem nenhuma pista de como conectar ao Raspberry.

Bem, o processo foi doloroso, mas eis o resultado para que você não tenha o mesmo problema. Primeiro, coloque o Raspberry apoiado sobre as portas USB. Os pinos de GPIO ficarão à direita da placa:

 

RaspberryST7789
GNDGND
3V3VCC
12 da esquerdaSCL
10 da esquerdaSDA
7 da esquerdaRES
11 da direitaDC
9 da direitaBLK

É horrível uma tabela colorida assim, mas deixei correspondente às cores dos jumpers que utilizei, pra não ter como errar. Agora confirme:

pinout-rpi3_b.webp

Feito o wiring, hora de fazer o teste!

Testando o display ST7789 no Raspberry

Entre no diretório Python_ST7789/examples e execute:

python clock_EN.py

Algumas imagens serão apresentadas no display, finalizando em um relógio. Tendo visto isso, podemos seguir adiante.

Instalar e habilitar a câmera do Raspberry Pi

A câmera do Raspberry Pi é a coisa mais simples de instalar. Entre o HDMI e o conector jack, temos o slot da câmera. Na borda da placa é o conector do display oficial, não confunda. Isso está silkado sobre a placa, caso ainda tenha alguma dúvida.

Levante a trava suavemente pelas bordas. Ela não sai, apenas afrouxa. Encaixe o cabo da câmera com os conectores voltados para a direção do conector HDMI. Mantenha o alinhamento do cabo flat para não ficar inclinado e gerar um curto na hora que ligar o Raspberry. Feito isso, ligue o sistema e vamos mais uma vez utilizar o programa raspi-config,  habilitando-a no mesmo menu em que habilitamos o barramento SPI.

Como remover CTRL-M de arquivos no Linux ( "como remover ^M" ou CRLF)?

Editar o arquivo clock_EN.py será necessário (ou uma cópia dele). Para isso podemos utilizar um editor gráfico (se estiver utilizando sistema com interface gráfica) ou, se estiver utilizando pelo terminal como eu, pode utilizar o vimpiconanomcedit etc.  Se reparar, ao final de cada linha tem um terminador ^M. Esse terminador é o formato do DOS, que lembra o comportamento da máquina de escrever (carriege return, line feed). Para remover isso do arquivo, utilizamos o programa dos2unix. Ele é parte do pacote imagemagick, portanto:

sudo apt-get install imagemagick
dos2unix arquivo_a_converter

Apenas isso.

Exibição contínua da câmera para o display ST7789 no Raspberry

Essa é a prova de conceito. Prova de conceito vale qualquer coisa, ok? Fiz uma mega gambiarra, colocando uma chamada de sistema dentro do programa Python para capturar frames de 1 em 1 segundo usando o programa padrão raspstill.

Edite o arquivo clock_EN.py e na segunda linha faça o import da biblioteca os:

import os

A partir da linha 90, adicione o seguinte conteúdo:

for i in range(100):
    os.system("raspistill -t 1 --width 240 --height 240 -o /dev/shm/teste.jpg")
    image4 = Image.open('/dev/shm/teste.jpg')
    image4.thumbnail((240, 240), Image.ANTIALIAS)
    image4 = expand2square(image4, (0,0,0))
    disp.display(image4)
    sleep(0.1)

Isso fará com que o programa raspstill capture um frame a cada 1 segundo, gravando-o em /dev/shm, que é um sistema de arquivos em memória. Desse modo, não tem I/O no SD e o processo é tão rápido quanto possível. Em seguida, tem uma cópia da rotina de uma das imagens, onde ela é aberta, formatada, recebe antialias para ter uma aparência mais suave, a tela seria complementada com preto para o caso de imagens que não tenham o formato ideal, então ela é exibida no display, seguida por um delay de 100ms.

Vou fazer um artigo mais específico para esse propósito, de forma que fique mais fluido e sem essa gambiarra para testar, só não vou dizer o que é, mas vai ficar bem melhor. Esse artigo foi para mostrar a configuração do display, que é incrível como eu havia citado nesse outro artigo e agora você pode comprovar!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.