Raspberry

Display ST7789 no Raspberry

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 128×32, 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 240×240 é 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.

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

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.

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:

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:

 

Raspberry ST7789
GND GND
3V3 VCC
12 da esquerda SCL
10 da esquerda SDA
7 da esquerda RES
11 da direita DC
9 da direita BLK

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

Feito o wiring, hora de fazer o teste!

Testando o display ST7789 no Raspberry

Entre no diretório Python_ST7789/examples e execute:

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:

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:

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

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!