Manual
do
Maker
.
com
O display LCD GC9A01 redondo desperta interesse em qualquer maker, pelo seu charme. Relógio é provavelmente o primeiro projeto que vem à cabeça, mas olha só a imagem de destaque; dá pra fazer esses gauges bonitinhos para fazer balança, medidor de pressão, temperatura e tudo o mais que puder ser exposto em display, modificando apenas "1" sketch.
Vou fazer uma série de tutoriais com esse display usando ESP32. O regulador desse display LCD redondo da CurtoCircuito (link para displays) é um 662K . A Curto tem outro modelo redondo, além de um retangular com borda arredondada. E mais um monte, é um espetáculo a variedade!
Estou alimentando o display em 3v3. O LDO 662K vai até 6.2V, mas confesso que não tenho certeza se esse display pode ser alimentado em 5v. Quando chegarem os outros, eu faço o teste em um e digo o resultado.
O barramento é SPI, não se deixe enganar pela nomenclatura.
Seu tamanho é de 1.28 polegadas, 240x240. Existem diversos tamanhos e esse é o que você encontra na CurtoCircuito.
Considere o pino SDA como DIN, e SCL como CLK. Mais adiante coloco as imagens necessárias.
Na descrição da WaveShare está o óbvio; 65K RGB, que são 65536 cores, também chamado de RGB16 ou RGB565. Fiz uma biblioteca de cores, disponível entre as bibliotecas oficiais do Arduino, chamada "EasyColor". Falo dela em "Conversor de cores". Se tem curiosidade sobre os detalhes de conversão de cores, confira o artigo de como converter RGB888 para RGB565. É coisa pra nerd. A motivação para a criação da biblioteca de cores foi o projeto do Misturador de cores CMYK que fiz já há algum tempo. Seguindo. Se deseja só converter algumas cores sem maior trabalho, vá à Caixa de Ferramentas do blog e divirta-se com o conversor RGB24 para RGB16.
No site da Waveshare tem exemplos de wiring para mbed, Raspberry e Arduino. Vamos de Arduino nesse primeiro artigo, então temos alguns pontos a considerar. Atente-se à tensão de entrada do display. Alguns são 3v3, outros são 5v. Se tiver dúvidas, experimente seu display em 3v3 e veja se funciona. Se a tensão não for suficiente, ele não exibirá nada, então tendo garantido que não é erro no wiring ou no código, passe-o para 5v.
Me desculpem por não colocar uma imagem, mas mesmo pagando, não vi esse display para o Fritzing. Então, nada como uma tabela com relação direta.
Deve servir para qualquer ESP32 que disponha os pinos a seguir. No caso, quando crio o projeto eu escolho ESP32 DEV KIT, que é o WROOM. Vou entrar em detalhes sobre a criação do projeto mais adiante.
DISPLAY GC9A01 | ESP32 DEV KIT |
---|---|
VCC | 3v3 |
GND | GND |
TFT_MOSI (SDA) | 23 |
TFT_SCLK (SCL) | 18 |
TFT_CS (CS) | 22 |
TFT_DC (DC) | 2 |
TFT_RST (RST) | -1 |
No display da Waveshare SDA é DIN e o backlight (que não tem controle nesse) é BL.
Abro um breve parágrafo para discorrer sobre essa diferença significativa. Tente não ser resistente a essa informação:
A IDE do Arduino 2.0 é ruim como a 1.8, mas de uma forma diferente; ela é lenta para abrir, não tem preview dos exemplos nem antes e nem depois de instalar uma biblioteca e algo que considero muito importante: As bibliotecas instaladas não são por sketch, ou seja, uma vez instalada, ela é usada em qualquer projeto. "Mas por que isso é ruim" - você pode questionar. Bem, por uma razão simples, que nesse projeto mesmo já consigo justificar, ao mostrar as vantagens de usar o VS Code.
O PlatformIO é um "plugin" que se instala pela própria interface do VS Code. É um clique, reiniciar e usar. Ao criar um projeto, se a placa não tiver suporte ainda, ela será baixada, sem precisar inserir URL nas preferências, como acontece na IDE do Arduino.
Quando estiver pesquisando por uma biblioteca e tiver várias opções, dá pra olhar nos exemplos o modo que a biblioteca trabalha, então instalar a que for a mais adequada, invés de ficar instalando e testando.
Quando instalamos uma biblioteca, ela é designada ao projeto escolhido. Com isso, qualquer modificação na biblioteca não impactará em outros projetos, já que cada um tem sua cópia. E isso é importante, como no caso da biblioteca utilizada nesse tutorial, a TFT_eSPI. Precisaremos fazer algumas definições dentro do arquivo USer_Setup.h e na IDE do Arduino eu tenho uma configuração específica para display de 8 bits paralelo. Ou seja, para trocar de display, teria que fazer backup do arquivo original, lembrar de voltar quando for rodar novamente o projeto anterior etc.
O VS Code tem auto-completion e referencia muito melhor os métodos e atributos das classes referenciadas no código. Enfim, é minha recomendação para um desenvolvimento produtivo.
Uma das formas de configurar rapidamente o display é utilizar o exemplo da Waveshare. Ele só foi testado com Arduino UNO, mas é o suficiente.
Se decidir experimentar o código da Waveshare, baixe o arquivo zip. Ele contém exemplos para Arduino UNO, Raspberry e STM32. Selecione dentro dos exemplos do Arduino o que for adequado para o display, então copie o diretório escolhido para dentro do diretório do Arduino. Depois da cópia, abra o sketch *.ino. O sketch não compilará de primeira, graças à "genial" ideia de colocarem caracteres em chinês no exemplo e formarem um array gigante. Ao compilar o sketch, serão mostradas as linhas reclamando de um array muito longo. Eu mantive o array, deixando apenas 1 byte em cada letra. Abandonei a biblioteca da Waveshare, mas para outros modelos de Arduino, ainda pode ser interessante, exceto para o Arduino UNO R4.
Eu queria ter utilizado o UNO R4 WiFi para esse artigo, pois já estava na mesa. Acabei optando por um ESP32, também da Curto. Instale a biblioteca TFT_eSPI na IDE do Arduino e faça a configuração conforme descrito a seguir.
.pio > libdeps TFT_eSPI
:Basicamente, comente o que não estiver comentado. O que deve ficar habilitado é isso:
#define USER_SETUP_INFO "User_Setup"
#define GC9A01_DRIVER
#define TFT_HEIGHT 240
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 22
#define TFT_DC 2
#define TFT_RST -1
#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 27000000
#define SPI_READ_FREQUENCY 20000000
Com isso, sua biblioteca TFT_eSPI estará configurada. Por que só TFT_HEIGHT ? - Bem, se precisasse especificar duas dimensões, provavelmente seria um display oval, não redondo.
O sketch que estou rodando na imagem de destaque é o exemplo Animated_dial da própria biblioteca, que é forrada de exemplos. Se for utilizar esse exemplo, instale também a biblioteca TJpg_Decoder.
Se quiser fazer imagens personalizadas, sugiro que use o programa EasyMaker Image Suite, disponível nesse repositório. Se quiser fazer animações, recomendo o EasyMaker Animation Studio, disponível também no github.
Ambos os programas foram apresentados em vídeo em nosso canal DobitAoByte no Youtube. Aproveite para se inscrever!
O vídeo do EasyMaker Animation Studio.
Uma apresentação rápida dos recursos do EasyMaker Animation Studio.
Apresentação do EasyMaker Image Suite.
Ambos são gratuitos e foram criados por mim. Pode pegar sem medo.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.