Manual

do

Maker

.

com

Display com touch e SD com Arduino UNO R4 WiFI

Display com touch e SD com Arduino UNO R4 WiFI

Esse display com touch e SD (acompanha caneta) é mais uma das joias da CurtoCircuito (viste uma das melhores lojas de embarcados do Brasil). O que me atrai bastante nesse display é principalmente ele ter 3 dispositivos na mesma placa ( o touch é um dispositivo à parte em qualquer display). Todos eles são SPI, ou seja, esse display é uma excelente oportunidade para experimentar chaveamento de dispositivos SPI!

Pinout

Na parte de trás do display estão bem claros seus identificadores. Os pinos do touch começam com "T", como por exemplo T_CS .A mesma coisa para o SD, com SD_CS. Os pinos do display estão do lado oposto e possuem alguns recursos a mais, como a alimentação do backlight e reset.

Alimentação

O display é 5V e essa alimentação vale para o SD e touch também. O único ponto de atenção é em relação ao backlight, que é 3v3. O Arduino tem ambos os níveis de alimentação (não estou falando nível lógico, que fique claro), e o 3v3 fica no pino exatamente ao lado do 5v.

Wiring

A conexão é simples e direta. Cada placa tem seus pinos de SPI. No caso, estou usando o Arduino UNO R4 WiFi para fazer os tutoriais dessa série.

A única coisa que muda é graças à modinha dos inventores de problemas em trocar MISO e MOSI por CIPO e COPI para agradar tribos. Mudar um padrão que chama um dispositivo eletrônico de MASTER e o outro de SLAVE virou ofensa para alguém.

Agora Master In Slave Out virou Controller In Peripheral Out e vice-versa. Não é o fim do mundo, mas é uma chateação que não precisávamos ter. Já bastava o pino MOSI estar identificado como SDA em algumas placas pra confundir o cidadão. Agora vai levar um tempo pro cérebro pegar no tranco, assimilando que SDA em barramento SPI é o MOSI que passou a ser COPI. Chega de chorar, bora tocar o resto.

Dito que os pinos estão identificados atrás da placa, basta saber a quais GPIO esses pinos devem ser conectados. E agora quebro duas janelas com uma pedrada só.

Biblioteca TFT_eSPI

Essa é uma das melhores bibliotecas para display, em minha opinião. Ela é fácil de configurar, bastando editar o arquivo User_Setup.h e ajustando as definições. Abrindo o arquivo pode ser que dê uma sensação ruim em ver tanta referência, mas está tudo comentado para que simplesmente descomentemos conforme o display a ser usado. Bem, não tudo. Uma definição padrão precisa estar disponível, senão a biblioteca não funcionaria em nenhum display sem uma configuração prévia.

Para facilitar, vou colocar aqui as únicas linhas que precisam estar "habilitadas" no arquivo User_Setup.h (você pode inclusive excluir todo o resto, se for usar a biblioteca apenas para esse projeto ou se estiver usando platformIO no VS Code):

#define USER_SETUP_INFO "User_Setup"
#define ILI9341_DRIVER
#define TFT_WIDTH  128
#define TFT_HEIGHT 160

#define TFT_MISO  -1
#define TFT_MOSI  11
#define TFT_SCLK  13

#define TFT_CS    10
#define TFT_DC    9 
#define TFT_RST   8 

#define LOAD_GLCD 
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8

#define LOAD_GFXFF 
 #define SMOOTH_FONT
 
 #define SPI_FREQUENCY  40000000 //ou 27000000, que é o padrão
 #define SPI_READ_FREQUENCY  20000000
 #define SPI_TOUCH_FREQUENCY  2500000
 

Pronto, esse é o arquivo de configuração completo. Para o display.

Repare nos pinos que as referências da biblioteca usam MISO e MOSI. E como citei, dois problemas resolvidos de uma vez; os nomes dos pinos estão na placa, bastando conectar o respectivo pino ao respectivo GPIO descrito no arquivo de configuração acima. Reforçando: Essa configuração é para o Arduino UNO R4 WiFi. Os pinos SPI mudam conforme a MCU em questão.

Imagem invertida no display

photo_5143463567822007657_y.jpg

Se seu display exibir a imagem invertida, como se estivesse olhando o display pelo espelho, não se preocupe. Apesar de não ser o padrão, acontece com alguns displays. É só comprar um espelho de barbear e deixar junto ao...

...brincadeira!

Se acontecer de o display inverter a imagem, use o método setRotation com algum valor entre 4 e 7, dependendo da rotação desejada. Para ficar como na imagem de destaque desse artigo, utilizei um sketch de exemplo para comprovar o funcionamento do display, já que não havia encontrado nenhuma referência para esse modelo e ainda por cima estou configurando o SPI no Arduino UNO R4 WiFi pela primeira vez. Troquei tft.setRotation(0) para tft.setRotation(5).

Não vou colar o código completo porque esse é um sketch de exemplo padrão ("rainbow" alguma coisa, não lembro o nome). Vou deixar apenas os headers e o setup() aqui para ilustrar:

#include <Arduino.h> //necessário no VS Code com PlatformIO

#include <TFT_eSPI.h> // biblioteca do display
#include <SPI.h>      // biblioteca do barramento SPI
//variáveis e construtores aqui
//...

void setup(void) {
  Serial.begin(9600);
  tft.init();
  tft.setRotation(5);
  tft.fillScreen(TFT_BLACK);
  

  targetTime = millis() + 1000;
}

//...loop() e declarações de funções
//...

Esse procedimento é um padrão que pode ser adotado para qualquer display suportado pela biblioteca TFT_eSPI. No arquivo User_Setup.h você encontrará referências importantes sobre as configurações em diferentes displays e MCUs, vale a leitura. Aqui no blog tem montes de tutoriais com essa biblioteca.

Para criar imagens para displays, sugiro o EasyMaker-IS e, para criar animações, o EasyMaker-AS. Procure por easymaker na caixa de pesquisas.

Tendo configurado o display, podemos seguir para o próximo periférico. Mas isso fica para o próximo artigo, assim isolamos as tarefas e deixamos o artigo mais curto. Por falar em Curto, não esquece de passar na loja da CurtoCircuito e pegar o seu display!

Por fim, viu a caixa de ferramentas na página de entrada? Ela te leva para as ferramentas que estão sendo desenvolvidas para makers. No momento desse artigo, 3 estão entregues. Acompanhe e sugira outras em nossas redes sociais.

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.