Skip to Content

Kit DIY TRMNL 7,5″ com Arduino IDE e TFT_eSPI

Kit DIY TRMNL 7,5″ com Arduino IDE e TFT_eSPI

O Kit DIY TRMNL 7.5″ da Seeed Studio é um ecrã e-paper elegante, concebido para makers que querem construir o seu próprio terminal inteligente personalizável. Embora o firmware oficial já ofereça widgets prontos a usar, também pode programar o TRMNL você mesmo usando o Arduino IDE.

Neste guia, vamos mostrar-lhe como configurar o kit com a biblioteca TFT_eSPI e escrever um sketch simples que transforma o ecrã num relógio digital. O relógio irá automaticamente sincronizar com um servidor de tempo na internet (NTP), garantindo a hora correta sem ajustes manuais.

Onde Comprar

Kit DIY TRMNL 7.5″ (OG)

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

O Kit DIY TRMNL 7.5″

O Kit DIY TRMNL 7.5″ (OG) da Seeed Studio é um terminal e-paper open-source, concebido para dashboards pessoais, projetos de display IoT e experimentação maker. Combina um ecrã e-ink monocromático de 7,5 polegadas com resolução 800×480, placa driver XIAO ESP32-S3 PLUS, bateria recarregável de 2000 mAh e cabo de extensão FPC de 10 cm.

Parts of the TRMNL 7.5" DIY Kit
Partes do Kit DIY TRMNL 7.5″ (source)

Note que este kit não inclui uma caixa, mas pode encontrar designs para impressão 3D de uma Triangular Enclosure ou uma L-shape Enclosure e outros em Printables.

No núcleo da placa driver está um módulo microcontrolador ESP32, que oferece processamento dual-core, Wi-Fi integrado e Bluetooth. O ESP32 tem flash e SRAM suficientes para suportar tanto aplicações personalizadas como o firmware oficial do TRMNL.

A placa controladora foi desenhada para interligar com o painel e-paper via ligação SPI e pode ser programada por USB-C. Inclui botões de reset e boot para flash do firmware, três botões para funções definidas pelo utilizador e um interruptor de energia para a bateria.

Driver board for TRMNL 7.5"
Placa driver para TRMNL 7.5″ (source)

O ecrã de 7,5 polegadas usa tecnologia e-paper, que consome energia apenas durante a atualização e mantém o conteúdo sem energia. Isto torna-o ideal para dashboards sempre ligados, legíveis mesmo à luz solar direta.

Programar o TRMNL 7.5″

O TRMNL pode ser usado ou programado de duas formas distintas. A primeira é instalar e executar o firmware oficial do TRMNL, que se integra no ecossistema TRMNL. Com esta abordagem, o dispositivo pode mostrar widgets pré-construídos como calendário, meteorologia e relógio digital.

No entanto, este método requer uma BYO (Bring Your Own) license, que dá acesso aos serviços hospedados do TRMNL e à infraestrutura de widgets. A vantagem é que os utilizadores têm uma experiência polida e pronta a usar com integração na cloud, sem necessidade de programar.

A segunda forma é programar o TRMNL diretamente com o Arduino IDE. Neste caso, o painel e-paper pode ser controlado usando uma versão fork da biblioteca TFT_eSPI, que oferece funções de desenho para displays.

Com esta abordagem, os desenvolvedores têm total liberdade para criar as suas próprias aplicações, seja um relógio digital, dashboard de dados IoT ou visualização personalizada. Este método não requer licença, mas exige familiaridade com programação Arduino. Embora não tenha o ecossistema plug-and-play do firmware oficial, dá aos makers controlo total sobre o que é mostrado e como o hardware é usado. E é esta a abordagem que seguiremos neste tutorial.

Especificações Técnicas

ComponenteEspecificação
Tipo de ecrãE-paper de 7,5 polegadas (display de papel eletrónico)
Resolução800 × 480 pixels
Cores do ecrãPreto e branco (monocromático)
Placa controladoraMódulo microcontrolador baseado em ESP32
MicrocontroladorXIAO ESP32-S3 Plus
Memória flash4 MB (varia conforme o módulo ESP32 usado)
RAM520 KB SRAM (com PSRAM externo opcional dependendo da variante da placa)
ConectividadeWi-Fi 802.11 b/g/n, Bluetooth 4.2 BLE
Interface para o ecrãSPI
Ligação USBUSB-C (para programação e alimentação)
Fonte de alimentação5 V via USB-C ou via bateria Li-ion de 2000mAh
Funcionalidades adicionaisBotão de reset, botão de boot
CaixaCaixa impressa em 3D, desenhada para o painel de 7,5 polegadas e placa ESP32
Opções de firmwareFirmware TRMNL com licença BYO, ou firmware Arduino personalizado com TFT_eSPI
EsquemasSchematic of XIAO ePaper Display Dev Board

Nas próximas secções vai aprender como instalar as bibliotecas necessárias e como implementar um relógio digital que mostra a hora e data no ecrã TRMNL 7.5″.

Instalar Bibliotecas

Antes de escrever código, precisamos instalar as bibliotecas necessárias. A Seeed Studio criou um fork (Seeed_GFX Library) da popular TFT_eSPI Library que suporta o ecrã TRMNL 7.5″. A TFT_eSPI Library original não funciona com este ecrã.

Primeiro, vá ao repositório github da Seeed_GFX Library, clique no botão verde “<> Code” e descarregue a biblioteca em formato ZIP:

De seguida, descompacte a biblioteca, que deverá criar uma pasta chamada “Seeed_GFX”. Precisamos copiar esta pasta para a pasta “libraries” do Arduino IDE. No Windows, a pasta “libraries” normalmente está em:

C:\Users\<username>\OneDrive\Documents\Arduino\libraries

Como esta pasta já contém bibliotecas instaladas, recomendo que a renomeie temporariamente, por exemplo para “_libraries”, e crie uma nova pasta chamada “libraries”. Assim evita conflitos com as bibliotecas já instaladas e não as perde. A imagem abaixo mostra como deve ficar a sua pasta “Arduino”:

Depois copie a pasta “Seeed_GFX” para a pasta “libraries”:

E assim termina a instalação das bibliotecas necessárias.

Código de Teste para o Kit DIY TRMNL 7.5″

Vamos começar com um código simples de teste para o ecrã. Crie uma nova pasta de projeto “trmnl” com dois ficheiros: “trmnl.ino” e “driver.h”:

Depois abra “trmnl.ino” no Arduino IDE, clique na aba do ficheiro “driver.h” e copie o seguinte código para o ficheiro “driver.h”:

// driver.h
#define BOARD_SCREEN_COMBO 502 // 7.5 inch monochrome ePaper Screen (UC8179)
#define USE_XIAO_EPAPER_DISPLAY_BOARD_EE04

Finalmente, copie o seguinte código para o ficheiro “trmnl.ino”:

#include <SPI.h>
#include <TFT_eSPI.h>

EPaper epd = EPaper();

void setup() {
  epd.begin();
  epd.setRotation(0);
  epd.setTextColor(TFT_BLACK);   
  epd.setTextSize(3);
  epd.fillScreen(TFT_WHITE);     
  epd.drawCentreString("Makerguides", 400, 220, 4);
  epd.update();
}

void loop() {}

Para carregar o código no microcontrolador da placa driver do ecrã, selecione a placa XIAO_ESP32S3_PLUS conforme mostrado abaixo:

Após carregar o código, o ecrã deve piscar algumas vezes e depois mostrar o texto “Makerguides” no centro do ecrã:

Se isto funcionar, parabéns : )

Código do Relógio Digital para o Kit DIY TRMNL 7.5″

Neste próximo exemplo de código vai aprender a usar o Kit DIY TRMNL 7.5″ com o Arduino IDE para mostrar um relógio digital que sincroniza automaticamente a hora pela internet. Veja primeiro o código completo abaixo e depois discutiremos os detalhes:

#include <SPI.h>
#include <TFT_eSPI.h>
#include <WiFi.h>
#include <esp_sntp.h>

const char* SSID     = "SSID";
const char* PWD      = "PWD";
const char* TIMEZONE = "CET-1CEST,M3.5.0/2,M10.5.0/3";
const int W = 800;
const int H = 480;

EPaper epd = EPaper();

void initTime() {
  setenv("TZ", TIMEZONE, 1);
  tzset();
}

void syncTime() {
  WiFi.begin(SSID, PWD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
  }
  configTzTime(TIMEZONE, "pool.ntp.org");
}

void initDisplay() {
  epd.begin();
  epd.setRotation(0);
  epd.fillScreen(TFT_WHITE);
  epd.setTextColor(TFT_BLACK);
  epd.setTextSize(2);
}

void setup() {
  initTime();
  initDisplay();
  syncTime();
}

void loop() {
  static char buff[64];
  static struct tm t;

  if (getLocalTime(&t)) {
    epd.fillRect(200, 100, 400, 300, TFT_WHITE);

    strftime(buff, sizeof(buff), "%H:%M", &t);
    epd.drawCentreString(buff, W / 2, 140, 7);

    strftime(buff, sizeof(buff), "%A", &t);
    epd.drawCentreString(buff, W / 2, 250, 4);

    strftime(buff, sizeof(buff), "%B %d/%m/%Y", &t);
    epd.drawCentreString(buff, W / 2, 320, 2);

    epd.update();
  }

  esp_sleep_enable_timer_wakeup(30 * 1000 * 1000ULL);  // 30 sec
  esp_deep_sleep_start();
}

Importações

Começamos por incluir as bibliotecas necessárias: SPI gere a comunicação com o ecrã e-paper, TFT_eSPI fornece funções de desenho, WiFi gere a conectividade sem fios, e esp_sntp sincroniza a hora com servidores de rede.

#include <SPI.h>
#include <TFT_eSPI.h>
#include <WiFi.h>
#include <esp_sntp.h>

Constantes

De seguida definimos algumas constantes. O SSID e PWD serão usados para ligar o ESP32 à sua rede Wi-Fi. Deve substituir pelos dados da sua rede Wi-Fi.

const char* SSID     = "SSID";
const char* PWD      = "PWD";
const char* TIMEZONE = "CET-1CEST,M3.5.0/2,M10.5.0/3";
const int W = 800;
const int H = 480;

A constante TIMEZONE é para Berlim, Alemanha. Para outras definições de fuso horário consulte a Posix Timezones Database. Basta copiar e colar a string que encontrar lá e alterar a constante TIMEZONE conforme necessário. O código do relógio obtém a hora atual de um servidor de tempo na internet, por isso está sempre correto, mas precisa de acesso Wi-Fi.

Por fim, definimos a largura e altura do ecrã, o que nos ajuda a posicionar o texto nos locais certos.

Objetos

De seguida criamos um objeto EPaper, que nos permite inicializar o ecrã, desenhar texto e atualizar o seu conteúdo.

EPaper epd = EPaper();

Inicialização do Tempo

A função initTime define o fuso horário para que, ao obtermos a hora da internet, esta seja ajustada corretamente para a região do utilizador. Isto garante que o dispositivo não mostra apenas UTC, mas sim a hora local.

void initTime() {
  setenv("TZ", TIMEZONE, 1);
  tzset();
}

Sincronização do Tempo

A função syncTime liga o ESP32 ao Wi-Fi e depois pede a hora atual a um servidor NTP. A chamada a configTzTime trata tanto da sincronização do tempo como dos ajustes do fuso horário. O ciclo interno espera até a ligação Wi-Fi estar estabelecida antes de continuar.

void syncTime() {
  WiFi.begin(SSID, PWD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
  }
  configTzTime(TIMEZONE, "pool.ntp.org");
}

Inicialização do Ecrã

Antes de desenhar qualquer coisa, precisamos preparar o ecrã e-paper. A função initDisplay inicia o hardware, define a orientação, preenche o ecrã com fundo branco e define a cor e tamanho de texto padrão.

void initDisplay() {
  epd.begin();
  epd.setRotation(0);
  epd.fillScreen(TFT_WHITE);
  epd.setTextColor(TFT_BLACK);
  epd.setTextSize(2);
}

Função Setup

A função setup junta tudo. Configura o fuso horário, inicializa o ecrã e depois sincroniza o relógio com o servidor NTP. Quando esta função termina, o sistema está pronto para mostrar a hora correta sincronizada pela rede.

void setup() {
  initTime();
  initDisplay();
  syncTime();
}

Função Loop

O loop é onde o conteúdo do ecrã é atualizado. É criado um buffer e uma estrutura tm para guardar os dados de tempo formatados. A chamada a getLocalTime obtém a hora atual. Se a chamada for bem-sucedida, a área do ecrã é primeiro limpa preenchendo um retângulo branco. Depois, três informações diferentes são desenhadas no centro do ecrã: a hora e minuto atuais, o dia da semana e a data completa com mês e ano.

if (getLocalTime(&t)) {
  epd.fillRect(200, 100, 400, 300, TFT_WHITE);

  strftime(buff, sizeof(buff), "%H:%M", &t);
  epd.drawCentreString(buff, W / 2, 140, 7);

  strftime(buff, sizeof(buff), "%A", &t);
  epd.drawCentreString(buff, W / 2, 250, 4);

  strftime(buff, sizeof(buff), "%B %d/%m/%Y", &t);
  epd.drawCentreString(buff, W / 2, 320, 2);

  epd.update();
}

A foto abaixo mostra como isto fica no ecrã e-paper real:

Finalmente, o ESP32 é colocado em deep sleep por 30 segundos. Isto poupa energia, especialmente útil quando funciona a bateria. Após o tempo de sono, o chip acorda automaticamente, executa o loop novamente e atualiza a hora.

esp_sleep_enable_timer_wakeup(30 * 1000 * 1000ULL);  // 30 sec
esp_deep_sleep_start();

Resumo

Com este código, o seu Kit DIY TRMNL 7.5″ torna-se num relógio e-paper de baixo consumo e sempre preciso. Liga-se ao Wi-Fi, obtém a hora atual de um servidor NTP e mostra-a num layout limpo. Graças ao modo deep sleep do ESP32 e às propriedades estáticas do ecrã e-paper, usa menos energia mantendo a informação visível em permanência.

Note, no entanto, que o código faz uma atualização completa do ecrã a cada 30 segundos. Isto significa que o ecrã pisca a cada 30 segundos, o que pode ser bastante incómodo. Infelizmente, a Seeed_GFX Library não oferece funções para um partial redraw.

Conclusões

O ecrã E-Paper TRMNL 7.5″ é um display grande e visualmente apelativo. A placa driver com botões extra, interface de carregamento de bateria integrada e a bateria Li-ion de 2000mAh incluída no kit facilitam a construção de um dashboard alimentado a bateria.

Neste tutorial aprendeu a construir um relógio digital com o ecrã TRMNL 7.5″. Para mais informações veja também o Getting Started with TRMNL on TRMNL 7.5inch(OG) DIY Kit, onde encontra exemplos de como ler os botões na placa driver e como medir a carga da bateria.

Uma limitação do ecrã TRMNL é que não é suportado pela comum GxEPD Library, que é especificamente desenhada para displays E-Paper. O suporte atual via Seeed_GFX Library – um fork da TFT_eSPI Library – é limitado e não oferece partial redraws nem controlo da atualização do ecrã após acordar do deep-sleep.

Se não quiser ser incomodado pelo piscar frequente do ecrã, que limita os casos de uso a situações onde as atualizações do conteúdo são pouco frequentes, por exemplo, pelo menos a cada 15 minutos ou preferencialmente a cada poucas horas. Isto significa que dashboards meteorológicos ou calendários são aplicações adequadas, mas aplicações com necessidades de atualização mais rápidas provavelmente não. Note que isto não é uma limitação do ecrã, mas do software driver.

Para mostrar um calendário mensal veja o tutorial Monthly Calendar on E-Paper Display e se quiser aprender mais sobre sincronização de tempo veja os tutoriais How to synchronize ESP32 clock with SNTP server e Automatic Daylight Savings Time Clock.

Outra extensão comum para relógios digitais é mostrar também a temperatura ambiente ou dados meteorológicos. Veja o tutorial Weather Station on e-Paper Display para mais detalhes.

Finalmente, se preferir não implementar nada você mesmo mas aproveitar uma grande seleção de dashboards (plugins) já existentes para o ecrã TRMNL 7.5″, leia a página TRMNL 7.5inch(OG) DIY Kit with TRMNL.

Se tiver alguma dúvida, sinta-se à vontade para deixar nos comentários.

Boas criações 😉