Skip to Content

Kit DIY TRMNL 7.5″ con Arduino IDE y TFT_eSPI

Kit DIY TRMNL 7.5″ con Arduino IDE y TFT_eSPI

El Kit DIY TRMNL 7.5″ de Seeed Studio es una pantalla de papel electrónico elegante diseñada para makers que quieren construir su propio terminal inteligente personalizable. Aunque el firmware oficial ya ofrece widgets listos para usar, también puedes programar el TRMNL tú mismo usando el Arduino IDE.

En esta guía, te mostraremos cómo configurar el kit con la librería TFT_eSPI y escribir un sketch simple que convierte la pantalla en un reloj digital. El reloj se sincronizará automáticamente con un servidor de tiempo por internet (NTP), asegurando una hora precisa sin ajustes manuales.

Dónde 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.

El Kit DIY TRMNL 7.5″

El Kit DIY TRMNL 7.5″ (OG) de Seeed Studio es un terminal de papel electrónico de código abierto diseñado para paneles personales, proyectos de visualización IoT y experimentación maker. Combina una pantalla de tinta electrónica monocroma de 7.5 pulgadas y resolución 800×480, una placa controladora XIAO ESP32-S3 PLUS, batería recargable de 2000 mAh y un cable de extensión FPC de 10 cm.

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

Ten en cuenta que este kit no incluye una carcasa, pero puedes encontrar diseños para impresión 3D de una Triangular Enclosure o una L-shape Enclosure y otros en Printables.

En el núcleo de la placa controladora hay un módulo microcontrolador ESP32, que ofrece procesamiento de doble núcleo, Wi-Fi integrado y Bluetooth. El ESP32 tiene suficiente memoria flash y SRAM para soportar tanto aplicaciones personalizadas como el firmware oficial del TRMNL.

La placa controladora está diseñada para comunicarse con el panel de papel electrónico mediante conexión SPI y puede programarse vía USB-C. Incluye botones de reset y boot para flashear el firmware. También hay tres botones para funciones definidas por el usuario y un interruptor de encendido para la batería.

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

La pantalla de 7.5 pulgadas usa tecnología de papel electrónico, que consume energía solo al actualizar y mantiene el contenido sin energía. Esto la hace ideal para paneles de información siempre encendidos que permanecen legibles incluso bajo luz solar directa.

Programando el TRMNL 7.5″

El TRMNL puede usarse o programarse de dos maneras distintas. La primera es instalar y ejecutar el firmware oficial del TRMNL, que se integra en el ecosistema TRMNL. Con este método, el dispositivo puede mostrar widgets preconstruidos como calendario, clima y reloj digital.

Sin embargo, este método requiere una BYO (Bring Your Own) license, que da acceso a los servicios alojados y la infraestructura de widgets de TRMNL. La ventaja es que los usuarios obtienen una experiencia pulida y lista para usar con integración en la nube, sin necesidad de programar.

El segundo método es programar el TRMNL directamente con el Arduino IDE. En este caso, el panel de papel electrónico se controla usando una versión bifurcada de la librería TFT_eSPI, que ofrece funciones de dibujo para pantallas.

Con este método, los desarrolladores tienen total libertad para diseñar sus propias aplicaciones, ya sea un reloj digital, un panel de datos IoT o visualizaciones personalizadas. No requiere licencia, pero sí conocimientos de programación Arduino. Aunque carece del ecosistema plug-and-play del firmware oficial, da a los makers control total sobre lo que se muestra y cómo se usa el hardware. Este es el enfoque que seguiremos en este tutorial.

Especificaciones Técnicas

ComponenteEspecificación
Tipo de pantallaPapel electrónico de 7.5 pulgadas
Resolución800 × 480 píxeles
Colores de pantallaBlanco y negro (monocromo)
Placa controladoraMódulo microcontrolador basado en ESP32
MicrocontroladorXIAO ESP32-S3 Plus
Memoria flash4 MB (varía según el módulo ESP32 usado)
RAM520 KB SRAM (con PSRAM externa opcional según variante de placa)
ConectividadWi-Fi 802.11 b/g/n, Bluetooth 4.2 BLE
Interfaz con pantallaSPI
Conexión USBUSB-C (para programación y alimentación)
Fuente de alimentación5 V vía USB-C o batería Li-ion de 2000 mAh
Características adicionalesBotón de reset, botón de boot
CarcasaCarcasa impresa en 3D diseñada para el panel de 7.5 pulgadas y la placa ESP32
Opciones de firmwareFirmware TRMNL con licencia BYO, o firmware Arduino personalizado con TFT_eSPI
EsquemasSchematic of XIAO ePaper Display Dev Board

En las siguientes secciones aprenderás cómo instalar las librerías necesarias y cómo implementar un reloj digital que muestre la hora y fecha en la pantalla TRMNL 7.5″.

Instalar Librerías

Antes de escribir código, necesitamos instalar las librerías requeridas. Seeed Studio ha creado un fork (Seeed_GFX Library) de la popular TFT_eSPI Library que soporta la pantalla TRMNL 7.5″. La TFT_eSPI Library original no funciona con esta pantalla.

Primero, ve al repositorio github de la Seeed_GFX Library, pulsa el botón verde «<> Code» y descarga la librería como archivo ZIP:

Luego descomprime la librería, lo que te dará una carpeta llamada «Seeed_GFX». Debemos copiar esta carpeta dentro de la carpeta «libraries» del Arduino IDE. En Windows, la carpeta «libraries» suele estar en:

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

Como esta carpeta ya contiene librerías instaladas, te recomiendo renombrarla temporalmente, por ejemplo a «_libraries», y crear una nueva carpeta llamada «libraries». Así evitas conflictos con las librerías ya instaladas y no las pierdes. La imagen abajo muestra cómo debería verse tu carpeta «Arduino»:

Después, copia la carpeta «Seeed_GFX» dentro de la carpeta «libraries»:

y con eso concluye la instalación de las librerías necesarias.

Código de Prueba para Kit DIY TRMNL 7.5″

Ahora comencemos con un código de prueba simple para la pantalla. Crea una nueva carpeta de proyecto «trmnl» con dos archivos: «trmnl.ino» y «driver.h»:

Luego abre «trmnl.ino» con tu Arduino IDE, haz clic en la pestaña del archivo «driver.h» y copia el siguiente código en el archivo «driver.h»:

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

Finalmente, copia el siguiente código en el archivo «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 subir el código al microcontrolador de la placa controladora de la pantalla, selecciona la placa XIAO_ESP32S3_PLUS como se muestra a continuación:

Después de subir el código, la pantalla debería parpadear unas cuantas veces y luego mostrar el texto «Makerguides» en el centro de la pantalla:

Si esto funciona, ¡felicidades! : )

Código de Reloj Digital para Kit DIY TRMNL 7.5″

En este siguiente ejemplo de código aprenderás a usar el Kit DIY TRMNL 7.5″ con Arduino IDE para mostrar un reloj digital que sincroniza automáticamente la hora desde internet. Echa un vistazo rápido al código completo abajo primero, luego discutiremos sus detalles:

#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();
}

Importaciones

Comenzamos incluyendo las librerías necesarias: SPI maneja la comunicación con la pantalla de papel electrónico, TFT_eSPI proporciona funciones de dibujo, WiFi gestiona la conectividad inalámbrica, y esp_sntp sincroniza la hora con servidores de red.

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

Constantes

Luego definimos algunas constantes. SSID y PWD se usan para conectar el ESP32 a tu red Wi-Fi. Debes reemplazarlas con las credenciales de tu red.

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;

La constante TIMEZONE es para Berlín, Alemania. Para otras definiciones de zona horaria, consulta el Posix Timezones Database. Solo copia y pega la cadena que encuentres allí y cambia la constante TIMEZONE según corresponda. El código del reloj obtiene la hora actual de un servidor de tiempo por internet y por eso siempre es preciso, pero necesita acceso Wi-Fi.

Finalmente, definimos el ancho y alto de la pantalla, lo que nos ayudará a posicionar el texto correctamente.

Objetos

Luego creamos un objeto EPaper, que nos permitirá inicializar la pantalla, dibujar texto y actualizar su contenido.

EPaper epd = EPaper();

Inicialización de la Hora

La función initTime configura la zona horaria para que al obtener la hora de internet, se ajuste correctamente a la región del usuario. Esto asegura que el dispositivo no muestre solo UTC, sino la hora local.

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

Sincronización de Hora

La función syncTime conecta el ESP32 al Wi-Fi y luego solicita la hora actual a un servidor NTP. La llamada a configTzTime maneja tanto la sincronización como los ajustes de zona horaria. El bucle interno espera hasta que la conexión Wi-Fi esté establecida antes de continuar.

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

Inicialización de la Pantalla

Antes de dibujar, necesitamos preparar la pantalla de papel electrónico. La función initDisplay inicia el hardware, configura su orientación, llena la pantalla con fondo blanco y define el color y tamaño de texto por defecto.

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

Función Setup

La función setup une todo. Configura la zona horaria, inicializa la pantalla y sincroniza el reloj con el servidor NTP. Al terminar esta función, el sistema está listo para mostrar la hora precisa sincronizada en red.

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

Función Loop

El loop es donde se actualiza el contenido de la pantalla. Se crea un buffer y una estructura tm para contener los datos de tiempo formateados. La llamada a getLocalTime obtiene la hora actual. Si tiene éxito, primero se limpia el área de la pantalla llenando un rectángulo blanco. Luego se dibujan tres informaciones diferentes en el centro: la hora y minutos actuales, el día de la semana y la fecha completa con mes y año.

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();
}

La foto abajo muestra cómo se ve esto en la pantalla de papel electrónico real:

Finalmente, el ESP32 entra en modo deep sleep por 30 segundos. Esto ahorra energía, especialmente útil con batería. Al expirar el temporizador, el chip se despierta automáticamente, vuelve a ejecutar el loop y actualiza la hora.

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

Resumen

Con este código, tu Kit DIY TRMNL 7.5″ se convierte en un reloj de papel electrónico de bajo consumo y siempre preciso. Se conecta a Wi-Fi, obtiene la hora actual de un servidor NTP y la muestra con un diseño limpio. Gracias al modo deep sleep del ESP32 y las propiedades estáticas de la pantalla de papel electrónico, usa menos energía manteniendo la información visible en todo momento.

Ten en cuenta, sin embargo, que el código realiza una actualización completa de la pantalla cada 30 segundos. Esto hace que la pantalla parpadee cada 30 segundos, lo cual puede ser algo molesto. Desafortunadamente, la Seeed_GFX Library no ofrece funciones para un partial redraw.

Conclusiones

El TRMNL 7.5″ E-Paper es una pantalla grande y atractiva. La placa controladora con botones extra, interfaz integrada de carga de batería y la batería Li-ion de 2000mAh que incluye el kit facilitan construir un panel alimentado por batería.

En este tutorial aprendiste a construir un reloj digital con el TRMNL 7.5″ E-Paper. Para más información, también consulta el Getting Started with TRMNL on TRMNL 7.5inch(OG) DIY Kit, donde encontrarás ejemplos sobre cómo leer los botones de la placa controladora y cómo medir la carga de la batería.

Una limitación del TRMNL Display es que no es compatible con la común GxEPD Library, diseñada específicamente para pantallas de papel electrónico. El soporte actual vía Seeed_GFX Library – un fork de TFT_eSPI Library – es limitado y no ofrece partial redraws ni control de la actualización de pantalla tras despertar del deep-sleep.

Si no quieres ser molestado por el parpadeo frecuente de la pantalla, esto limita los casos de uso a situaciones donde las actualizaciones son poco frecuentes, por ejemplo, al menos cada 15 minutos o preferiblemente cada pocas horas. Esto hace que paneles meteorológicos o calendarios sean aplicaciones adecuadas, pero aplicaciones con requerimientos de actualización más rápida probablemente no. Nota que esto no es una limitación de la pantalla sino del software controlador.

Para mostrar un calendario mensual, consulta el tutorial Monthly Calendar on E-Paper Display y si quieres aprender más sobre sincronización horaria, mira los tutoriales How to synchronize ESP32 clock with SNTP server y Automatic Daylight Savings Time Clock.

Otra extensión común para relojes digitales es mostrar también la temperatura ambiente o datos meteorológicos. Consulta el tutorial Weather Station on e-Paper Display para más detalles.

Finalmente, si prefieres no implementar nada tú mismo pero aprovechar una gran selección de paneles ya existentes (plugins) para la pantalla TRMNL 7.5″, lee la página TRMNL 7.5inch(OG) DIY Kit with TRMNL.

Si tienes alguna pregunta, no dudes en dejarla en la sección de comentarios.

¡Feliz bricolaje! 😉