Manual
do
Maker
.
com
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!
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.
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.
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ó.
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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.