No primeiro post desta série, conhecemos a placa WT32-SC01 Plus e suas principais características. Agora, é hora de colocar a mão na massa e fazer o que mais gostamos: escrever código e ver algo acontecer na tela!
Neste tutorial, vamos configurar o ambiente de desenvolvimento no Arduino IDE e criar nosso primeiro programa: o clássico “Hello World!”. O objetivo aqui é garantir que a comunicação com o display esteja funcionando perfeitamente, sem a complexidade de bibliotecas de interface como a LVGL. Para isso, usaremos a biblioteca LovyanGFX.
Embora existam outras excelentes bibliotecas para controle de displays, como a popular TFT_eSPI
ou a Arduino_GFX
, optamos pela LovyanGFX
neste tutorial por uma razão principal: ela oferece uma solução integrada, controlando tanto o display quanto o toque em uma única biblioteca. Isso simplifica a configuração e o código, como veremos nos próximos posts.
Passo 1: Configurando o Ambiente no Arduino IDE
Antes de escrever qualquer código, precisamos garantir que o Arduino IDE esteja preparado para conversar com a nossa placa e com a biblioteca gráfica.
1.1 Instalar o Pacote de Placas ESP32
A compatibilidade entre as bibliotecas e o “core” do ESP32 é crucial. Versões mais recentes da série 3.x.x apresentaram erros de compilação com a biblioteca LovyanGFX, por isso, como descobrimos em nossos testes, a versão mais estável para este projeto é a 2.0.17.
- No Arduino IDE, vá em Arquivo > Preferências.
- No campo “URLs Adicionais de Gerenciadores de Placas”, adicione a seguinte URL:
[https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json](https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json)
- Vá em Ferramentas > Placa > Gerenciador de Placas….
- Pesquise por
esp32
, selecione “esp32 by Espressif Systems”, escolha a versão 2.0.17 e clique em “Instalar”.
1.2 Instalar a Biblioteca LovyanGFX
Como já mencionado, essa biblioteca será a responsável por controlar o display.
- Vá em Ferramentas > Gerenciar Bibliotecas….
- Pesquise por
LovyanGFX
e instale a versão mais recente.
Passo 2: O Código do “Hello World!”
Com o ambiente pronto, crie um novo sketch no Arduino IDE e cole o código completo abaixo. Este código já contém toda a configuração de hardware necessária para a nossa placa.
/*
* EXEMPLO 1: HELLO WORLD COM LOVYANGFX
* * Este sketch demonstra o uso básico da biblioteca LovyanGFX para
* inicializar a tela da placa WT32-SC01 Plus e escrever um texto.
*/
#define LGFX_USE_V1 // Define que estamos usando a Versão 1 da LovyanGFX
#include <LovyanGFX.hpp>
// ======================================================================================
// === 1. CONFIGURAÇÃO DE HARDWARE (LOVYANGFX) ==========================================
// ======================================================================================
// Esta classe descreve o hardware da tela para a biblioteca LovyanGFX.
class LGFX : public lgfx::LGFX_Device
{
// Instâncias dos drivers para cada componente de hardware da tela
lgfx::Panel_ST7796 _panel_instance;
lgfx::Bus_Parallel8 _bus_instance;
lgfx::Light_PWM _light_instance;
public:
LGFX(void)
{
// --- Configuração do Barramento da Tela (BUS) ---
{
auto cfg = _bus_instance.config();
cfg.port = 0;
cfg.freq_write = 20000000;
cfg.pin_wr = 47;
cfg.pin_rd = -1;
cfg.pin_rs = 0;
cfg.pin_d0 = 9; cfg.pin_d1 = 46; cfg.pin_d2 = 3; cfg.pin_d3 = 8;
cfg.pin_d4 = 18; cfg.pin_d5 = 17; cfg.pin_d6 = 16; cfg.pin_d7 = 15;
_bus_instance.config(cfg);
_panel_instance.setBus(&_bus_instance);
}
// --- Configuração do Painel da Tela (PANEL) ---
{
auto cfg = _panel_instance.config();
cfg.pin_cs = -1;
cfg.pin_rst = 4;
cfg.pin_busy = -1;
cfg.memory_width = 320;
cfg.memory_height = 480;
cfg.panel_width = 320;
cfg.panel_height = 480;
cfg.offset_x = 0;
cfg.offset_y = 0;
// Combinação que corrige as cores para este modelo de tela
cfg.invert = true;
cfg.rgb_order = false;
_panel_instance.config(cfg);
}
// --- Configuração da Luz de Fundo (BACKLIGHT) ---
{
auto cfg = _light_instance.config();
cfg.pin_bl = 45;
cfg.invert = false;
cfg.freq = 44100;
cfg.pwm_channel = 7;
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);
}
setPanel(&_panel_instance);
}
};
// Instância principal do driver LovyanGFX que será usada no código
LGFX gfx;
void setup()
{
Serial.begin(115200);
Serial.println("Iniciando Exemplo 1: Hello World com LovyanGFX");
// --- 1. Inicializa o Hardware ---
gfx.begin();
gfx.setRotation(1); // 1 = Paisagem (cabo USB para a direita)
gfx.setBrightness(255); // Brilho máximo
// --- 2. Desenha na Tela ---
gfx.fillScreen(TFT_BLACK); // Pinta o fundo de preto
gfx.setTextSize(4); // Define o tamanho da fonte (escala 4x)
gfx.setTextColor(TFT_WHITE); // Define a cor do texto como branco
// Centraliza o texto na tela
const char* text = "Hello World!";
int16_t textWidth = gfx.textWidth(text);
int16_t textHeight = gfx.fontHeight();
int16_t cursorX = (gfx.width() - textWidth) / 2;
int16_t cursorY = (gfx.height() - textHeight) / 2;
gfx.setCursor(cursorX, cursorY); // Posiciona o cursor para o texto
gfx.println(text); // Imprime o texto na tela
Serial.println("Texto 'Hello World!' escrito na tela.");
}
void loop()
{
// O loop fica vazio, pois a ação acontece apenas uma vez no setup.
delay(1000);
}
Passo 3: Entendendo o Código
- Classe
LGFX
: Este bloco inicial é a parte mais importante. Ele funciona como um “manual de instruções” para a biblioteca, descrevendo exatamente como o hardware da WT32-SC01 Plus é montado: quais pinos são usados para a comunicação com a tela, qual a resolução, como corrigir as cores, etc. setup()
: Aqui é onde a mágica acontece.gfx.begin()
: Inicializa a tela com as configurações que definimos.gfx.setRotation(1)
: Gira a tela para o modo paisagem.gfx.fillScreen(TFT_BLACK)
: Pinta toda a tela de preto.gfx.setTextSize(4)
egfx.setTextColor(TFT_WHITE)
: Configuram a aparência do nosso texto.- Centralização: O bloco seguinte calcula a posição exata para que o texto “Hello World!” fique perfeitamente centralizado.
gfx.println(text)
: Finalmente, desenha o texto na tela.
loop()
: Como nosso objetivo é apenas escrever o texto uma vez, o loop principal fica vazio.
Conclusão
Parabéns! Se tudo correu bem, você agora tem a frase “Hello World!” brilhando na tela da sua WT32-SC01 Plus. Isso confirma que seu ambiente está configurado corretamente e que a comunicação com o display está 100% funcional.
No próximo post, vamos dar um passo adiante: vamos introduzir a biblioteca LVGL e a ferramenta SquareLine Studio para criar nossa primeira interface gráfica, ainda sem toque, mas já mostrando o poder dessas ferramentas.
Até lá!