Trabalhar com o EEZ Studio

Este guia conduz você pelo processo de projetar uma interface de usuário profissional com a ferramenta de design visual EEZ Studio, gerar código LVGL e fazer o deploy em um produto ePaper da Seeed por meio da IDE do Arduino. O fluxo é o mesmo para todas as placas compatíveis — as únicas diferenças são a resolução do display e a constante de configuração do driver, que apresentamos em abas.
Hardware compatível
| reTerminal E1001 / E1002 / E1003 / E1004 | XIAO ePaper Display Board (ESP32-S3) – EE04 |
|---|---|
![]() | ![]() |
| 7,5" mono / 7,3" Spectra 6 / 10,3" mono / 13,3" Spectra 6 | Driver universal — combine com qualquer uma de nossas telas ePaper Seeed de 24 pinos ou 50 pinos |
O que é o EEZ Studio?
EEZ Studio é um ambiente moderno de programação visual e design de UI originalmente criado para instrumentos de teste e medição e dispositivos embarcados. Ele combina design de GUI por arrastar e soltar, scripts e ferramentas de integração de dispositivos, permitindo que desenvolvedores, engenheiros e makers criem rapidamente interfaces profissionais sem começar do zero.
Em resumo, o EEZ Studio atua como uma ponte entre hardware e software, permitindo que você projete, faça protótipos e faça o deploy de experiências de usuário com mais eficiência.
Por que usar o EEZ Studio?
- Design visual de interface — crie UIs complexas com um editor WYSIWYG.
- Prototipagem rápida — teste e valide rapidamente ideias de design.
- Multiplataforma — crie apps que rodam em vários sistemas operacionais e alvos embarcados.
- Integração de hardware — conecte diretamente instrumentos de laboratório, dispositivos IoT e placas personalizadas.
- Código aberto — conjunto de ferramentas orientado pela comunidade com suporte premium opcional.
EEZ Studio vs. SquareLine Studio
Ambos são ferramentas de design de GUI, mas têm públicos-alvo ligeiramente diferentes:
| Aspecto | EEZ Studio | SquareLine Studio |
|---|---|---|
| Finalidade principal | Instrumentos de teste e medição, sistemas embarcados, integração hardware/software | GUIs embarcadas, especialmente com LVGL |
| Usuários-alvo | Engenheiros, desenvolvedores de produto, makers, projetistas de instrumentos de teste/laboratório | Desenvolvedores de UI embarcada, hobbystas, projetistas de produtos IoT |
| Integração de hardware | Integração direta com instrumentos, dispositivos de medição, automação | Focado na geração de UI, com menos integração com dispositivos externos |
| Código aberto | Orientado pela comunidade, transparente, extensível (suporte premium disponível) | Código fechado, produto comercial com licenciamento |
| Fluxo de trabalho | Prototipar, simular e controlar dispositivos reais a partir de um único ambiente | Principalmente gera código de UI para ser compilado em um projeto embarcado |
Etapa 1: Instalar o EEZ Studio
Baixe o EEZ Studio para o seu sistema operacional a partir do site oficial.


Etapa 2: Criar um projeto LVGL
Na parte superior da interface do EEZ Studio, clique em CREATE. Selecione o template LVGL à esquerda:
- Name — dê um nome ao seu projeto (usaremos
EEZ_UIneste artigo). - LVGL Version — escolha
9.xna lista suspensa. - Location — escolha onde salvar os arquivos do projeto.

Configurações do projeto
Clique no ícone ⚙️ na barra de ferramentas para abrir as configurações do projeto.
Em General → Build:
- LVGL include: insira
lvgl.hpara que o código gerado faça referência ao LVGL corretamente durante a compilação.

Em General → Display, defina a resolução para o seu hardware:
- reTerminal E1001 / E1002
- EE04 + 5,83" mono
- Display width: 800
- Display height: 480
(O display de 7,5" mono no E1001 e o de 7,3" Spectra 6 no E1002 compartilham a mesma resolução de 800×480.)
- Display width: 648
- Display height: 480
(Ajuste os valores para corresponder à tela ePaper Seeed que você conectou ao EE04. O exemplo abaixo usa a tela monocromática de 5,83" 648×480.)

Etapa 3: Projetar a UI
O design da UI determina diretamente a experiência do usuário. O EEZ Studio permite montar rapidamente interfaces arrastando e soltando componentes e usando Styles, Fonts, Bitmaps, Themes e Groups para controlar o resultado visual.
Recursos online recomendados:
- Coolors — gerador de paletas de cores
- PeisekA — tabela de cores
- iconfont — biblioteca de ícones
- Google Fonts — fontes gratuitas
A barra lateral direita:

- Styles — atributos visuais para unificar e reutilizar elementos de interface.
- Bitmaps — fundos, ícones, logotipos.
- Fonts — renderização de texto e suporte multilíngue.
- Themes — claro/escuro e outros estilos de alto nível.
- Groups — auxiliares de layout.
Layout de exemplo (Hello World + Panel + Image + Line + Label)
Neste tutorial vamos construir uma página inicial simples a partir de cinco componentes:
- Panel
- Label
- Line
- Checkbox
- Image

Etapa 1. Altere a cor de fundo da tela — selecione a tela, marque Color e escolha um valor hexadecimal.

Etapa 2. Arraste um Panel para a tela, ajuste sua largura/altura e escolha uma cor.

Etapa 3. Adicione bitmaps pela aba Bitmaps à direita, dê nomes a eles e depois arraste o widget Image para a tela e vincule o seu bitmap.



Etapa 4. Adicione uma Line a partir do grupo Visualiser e configure seus Points.

Etapa 5. Adicione uma Label, escolha a cor e depois adicione fontes pela aba Fonts à direita.



Etapa 4: Gerar código
Depois que o design estiver concluído:
- Save — clique no ícone de disquete ao lado de OPEN.
- Preview — clique em Run para iniciar o simulador e pré-visualizar a UI.
- Compile / Build — clique no ícone ✓ para verificar erros e depois na chave inglesa para gerar o código da UI, os dados de imagem e os dados de fonte.

Uma mensagem verde Build successful confirma a geração do código. A saída vai para a pasta src/ui do seu projeto (você pode renomeá-la para src/EEZ_UI se preferir).
Etapa 5: Configurar a IDE Arduino
Para implantar a saída do EEZ Studio no seu dispositivo ePaper da Seeed, configure a IDE Arduino com suporte a ESP32.
Se esta é a sua primeira vez usando Arduino, consulte primeiro Getting Started with Arduino.
-
Instale a IDE Arduino.
-
Adicione o suporte à placa ESP32: em File → Preferences, adicione em Additional Boards Manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json -
Instale o pacote ESP32: Tools → Board → Boards Manager, procure por
esp32e instale o pacote Espressif Systems. -
Selecione a placa para o seu hardware:
- reTerminal E1001 / E1002
- EE04 + 5.83" mono
Tools → Board → ESP32 Arduino → XIAO_ESP32S3
Tools → Board → ESP32 Arduino → XIAO_ESP32S3_PLUS
Também ative OPI PSRAM no menu Tools.

-
Conecte o dispositivo via USB-C e selecione a porta serial correta em Tools → Port.
Etapa 6: Instalar a biblioteca Seeed_GFX
Usamos a biblioteca Seeed_GFX, que fornece suporte abrangente para dispositivos de display da Seeed.
-
Baixe do GitHub:
-
Sketch → Include Library → Add .ZIP Library e selecione o arquivo ZIP baixado.
notaSe você instalou
TFT_eSPIanteriormente, remova-o temporariamente ou renomeie-o na pasta de bibliotecas do Arduino para evitar conflitos —Seeed_GFXé um fork deTFT_eSPIcom recursos adicionais para displays da Seeed. -
Abra o sketch de exemplo correto:
- Para displays coloridos: File → Examples → Seeed_GFX → ePaper → Colorful → HelloWorld
- Para displays monocromáticos: File → Examples → Seeed_GFX → ePaper → Basic → HelloWorld
-
Crie um arquivo
driver.hna mesma pasta do seu sketch (use a seta de nova aba na IDE Arduino). -
Vá para a Seeed GFX Configuration Tool, selecione seu hardware, copie a configuração gerada e cole em
driver.h. O conteúdo exato varia conforme o hardware:
- reTerminal E1001 / E1002
- EE04 + 5.83" mono
Para reTerminal E1001 (7,5" preto e branco, UC8179):
#define BOARD_SCREEN_COMBO 520 // reTerminal E1001 (UC8179)

Para reTerminal E1002 (7,3" totalmente colorido, UC8179C):
#define BOARD_SCREEN_COMBO 521 // reTerminal E1002 (UC8179C)

Para EE04 + 5,83" monocromático (UC8179):
#define BOARD_SCREEN_COMBO 503 // 5.83 inch monochrome ePaper Screen (UC8179)
#define USE_XIAO_EPAPER_DISPLAY_BOARD_EE04


Se você trocar para um tamanho de tela diferente no EE04, gere novamente o driver.h a partir da ferramenta de configuração e mantenha a linha USE_XIAO_EPAPER_DISPLAY_BOARD_EE04.
Se você fizer a escolha errada, a tela não exibirá nada — verifique cuidadosamente a combinação tela + placa controladora.
Etapa 7: Implantar o projeto EEZ Studio no Arduino
Adicione a saída do EEZ Studio e os auxiliares do driver de plataforma à pasta do seu sketch e, em seguida, faça o upload.
Arquivos de driver necessários (todo o hardware)
Baixe estes arquivos auxiliares e coloque-os ao lado do seu .ino:
Para o EE04 você também precisa de lv_conf.h e da biblioteca LVGL — veja a aba EE04 abaixo.

Copiar a saída EEZ_UI
Copie a pasta EEZ_UI gerada (do src/ do seu projeto EEZ Studio) para a pasta de bibliotecas do Arduino (normalmente ~/Documents/Arduino/Libraries).

Sketch e upload
- reTerminal E1001 / E1002
- EE04 + 5.83" mono
Sketch de referência — três botões (KEY0/KEY1/KEY2) alternam entre três páginas: HOME, Workstation, Plant.
Código de referência completo: E1002-EEZStudioCode.zip
#include <TFT_eSPI.h>
#include <lvgl.h>
#include <ui.h>
#include "e1002_display.h"
const int BUTTON_KEY0 = 3;
const int BUTTON_KEY1 = 4;
const int BUTTON_KEY2 = 5;
int32_t page_index;
bool lastKey0State = HIGH;
bool lastKey1State = HIGH;
bool lastKey2State = HIGH;
e1002_driver_t e1002_driver;
void setup()
{
String LVGL_Arduino = "Automotive Dashboard Demo - LVGL ";
LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() +
"." + lv_version_patch();
Serial.begin(115200);
Serial.println(LVGL_Arduino);
Serial.println("Initializing 6-color e-paper display...");
e1002_display_init(&e1002_driver);
pinMode(BUTTON_KEY0, INPUT_PULLUP);
pinMode(BUTTON_KEY1, INPUT_PULLUP);
pinMode(BUTTON_KEY2, INPUT_PULLUP);
lastKey0State = digitalRead(BUTTON_KEY0);
lastKey1State = digitalRead(BUTTON_KEY1);
lastKey2State = digitalRead(BUTTON_KEY2);
ui_init();
page_index = SCREEN_ID_HOME;
loadScreen((ScreensEnum)page_index);
Serial.println("Boot: Main Screen");
}
void loop()
{
lv_timer_handler();
ui_tick();
delay(50);
bool currentKey0State = digitalRead(BUTTON_KEY0);
bool currentKey1State = digitalRead(BUTTON_KEY1);
bool currentKey2State = digitalRead(BUTTON_KEY2);
if (lastKey0State == HIGH && currentKey0State == LOW) {
page_index = SCREEN_ID_HOME;
loadScreen((ScreensEnum)page_index);
Serial.println("Switched to Main Screen");
delay(50);
}
if (lastKey1State == HIGH && currentKey1State == LOW) {
page_index = SCREEN_ID_WORKSTATION;
loadScreen((ScreensEnum)page_index);
Serial.println("Switched to Plant Screen");
delay(50);
}
if (lastKey2State == HIGH && currentKey2State == LOW) {
page_index = SCREEN_ID_PLANT;
loadScreen((ScreensEnum)page_index);
Serial.println("Switched to Setting Screen");
delay(50);
}
lastKey0State = currentKey0State;
lastKey1State = currentKey1State;
lastKey2State = currentKey2State;
if (e1002_display_should_refresh(&e1002_driver))
{
Serial.println("Refreshing e-paper display...");
e1002_display_refresh(&e1002_driver);
Serial.println("Display refresh complete");
}
delay(10);
}
Notas:
e1002_display_init()inicializa o hardware do display e-ink.pinMode(..., INPUT_PULLUP)configura os pinos dos botões com resistores de pull-up internos.ui_init()eloadScreen()inicializam o LVGL e carregam uma tela específica.lv_timer_handler()processa timers e animações do LVGL.- Os blocos
if (lastKeyXState == HIGH && currentKeyXState == LOW)fazem o debounce de uma borda HIGH→LOW e atualizam a página. e1002_display_should_refresh()/e1002_display_refresh()gerenciam a atualização do e-ink sob demanda.
Telas resultantes
| Página inicial | Página da estação de trabalho | Página de fotos |
|---|---|---|
![]() | ![]() | ![]() |
Para o EE04 você também precisa de:
e1002_display.cppe1002_display.hlv_conf.h- A biblioteca LVGL instalada na IDE Arduino

Copie a pasta EEZ_UI gerada para ~/Documents/Arduino/Libraries.

Sketch de referência — três botões integrados (KEY1/KEY2/KEY3 = pinos 2 / 3 / 5) alternam entre três páginas: Smart, Industry, Game.
Código de referência completo: EEZ_UI_EE04.zip
#include <TFT_eSPI.h>
#include <lvgl.h>
#include <ui.h>
#include "e1002_display.h"
const int BUTTON_KEY1 = 2;
const int BUTTON_KEY2 = 3;
const int BUTTON_KEY3 = 5;
int32_t page_index;
bool lastKey0State = HIGH;
bool lastKey1State = HIGH;
bool lastKey2State = HIGH;
unsigned long lastDebounceTime0 = 0;
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
const unsigned long debounceDelay = 120;
e1002_driver_t e1002_driver;
unsigned long lastFullRefreshTime = 0;
const unsigned long fullRefreshCooldown = 1500;
bool buttonPressed(int pin, bool &lastState, unsigned long &lastDebounceTime)
{
bool currentState = digitalRead(pin);
if (lastState == HIGH && currentState == LOW &&
(millis() - lastDebounceTime) > debounceDelay)
{
lastDebounceTime = millis();
lastState = currentState;
return true;
}
lastState = currentState;
return false;
}
void switchPage(ScreensEnum targetScreen, const char *pageName)
{
if (millis() - lastFullRefreshTime < fullRefreshCooldown)
{
Serial.println("[Skip] Refresh cooling down...");
return;
}
Serial.printf("Switching to %s ...\n", pageName);
e1002_driver.epd->fillScreen(TFT_WHITE);
e1002_driver.epd->update();
loadScreen(targetScreen);
e1002_display_refresh(&e1002_driver);
lastFullRefreshTime = millis();
Serial.printf("[OK] %s refreshed.\n", pageName);
}
void setup()
{
Serial.begin(115200);
String LVGL_Arduino = "Smart Home Dashboard - LVGL ";
LVGL_Arduino += String('V') + lv_version_major() + "." +
lv_version_minor() + "." + lv_version_patch();
Serial.println(LVGL_Arduino);
Serial.println("Initializing e-paper display...");
e1002_display_init(&e1002_driver);
pinMode(BUTTON_KEY1, INPUT_PULLUP);
pinMode(BUTTON_KEY2, INPUT_PULLUP);
pinMode(BUTTON_KEY3, INPUT_PULLUP);
ui_init();
page_index = SCREEN_ID_SMART;
loadScreen((ScreensEnum)page_index);
e1002_display_refresh(&e1002_driver);
Serial.println("Boot: Main Screen");
}
void loop()
{
lv_timer_handler();
ui_tick();
if (buttonPressed(BUTTON_KEY1, lastKey0State, lastDebounceTime0))
{
page_index = SCREEN_ID_SMART;
switchPage((ScreensEnum)page_index, "Main Screen");
}
if (buttonPressed(BUTTON_KEY2, lastKey1State, lastDebounceTime1))
{
page_index = SCREEN_ID_INDUSTRY;
switchPage((ScreensEnum)page_index, "Plant Screen");
}
if (buttonPressed(BUTTON_KEY3, lastKey2State, lastDebounceTime2))
{
page_index = SCREEN_ID_GAME;
switchPage((ScreensEnum)page_index, "Workstation Screen");
}
if (e1002_display_should_refresh(&e1002_driver))
{
Serial.println("Refreshing e-paper display...");
e1002_display_refresh(&e1002_driver);
Serial.println("Display refresh complete");
}
delay(10);
}
Telas resultantes
| Smart | Industry | Game |
|---|---|---|
![]() | ![]() | ![]() |
Referências e recursos
- reTerminal E1001 / E1002
- EE04 + 5.83" mono
Suporte técnico e discussão sobre o produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.






