Skip to Content

TRMNL Kit fai-da-te 7,5″ con Arduino IDE e TFT_eSPI

TRMNL Kit fai-da-te 7,5″ con Arduino IDE e TFT_eSPI

The Kit fai-da-te TRMNL 7.5″di Seeed Studio è un elegante display e-paper progettato per maker che vogliono costruire il proprio terminale smart personalizzabile. Mentre il firmware ufficiale offre già widget pronti all’uso, puoi anche programmare il TRMNL da solo usando Arduino IDE.

In questa guida ti mostreremo come configurare il kit con la libreria TFT_eSPI e scrivere uno sketch semplice che trasforma il display in un orologio digitale. L’orologio si sincronizzerà automaticamente con un server orario internet (NTP), garantendo un orario preciso senza regolazioni manuali.

Dove acquistare

Kit fai-da-te 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.

Il kit fai-da-te TRMNL 7.5″

Il kit fai-da-te TRMNL 7.5″ (OG) di Seeed Studio è un terminale e-paper open-source progettato per dashboard personali, progetti display IoT e sperimentazioni maker. Combina un display e-ink monocromatico da 7,5 pollici 800×480, una scheda driver XIAO ESP32-S3 PLUS, una batteria ricaricabile da 2000 mAh e un cavo di estensione FPC da 10 cm.

Parts of the TRMNL 7.5" DIY Kit
Componenti del kit fai-da-te TRMNL 7.5″ (source)

Nota che questo kit non include un involucro, ma puoi trovare design per la stampa 3D di un Triangular Enclosure o di un L-shape Enclosure e altri su Printables.

Al centro della scheda driver c’è un modulo microcontrollore ESP32, che offre elaborazione dual-core, Wi-Fi integrato e Bluetooth. L’ESP32 dispone di sufficiente flash e SRAM per supportare sia applicazioni personalizzate che il firmware ufficiale TRMNL.

La scheda controller è progettata per interfacciarsi con il pannello e-paper tramite connessione SPI e può essere programmata via USB-C. Sono presenti un pulsante di reset e uno di boot per il flashing del firmware. Ci sono anche tre pulsanti per funzioni definite dall’utente e un interruttore di alimentazione per la batteria.

Driver board for TRMNL 7.5"
Scheda driver per TRMNL 7.5″ (source)

Il display da 7,5 pollici utilizza la tecnologia e-paper, che consuma energia solo durante l’aggiornamento e mantiene il contenuto senza alimentazione. Questo lo rende ideale per dashboard sempre accese, leggibili anche alla luce diretta del sole.

Programmare il TRMNL 7.5″

Il TRMNL può essere usato o programmato in due modi distinti. Il primo è installare ed eseguire il firmware ufficiale TRMNL, che si integra nell’ecosistema TRMNL. Con questo metodo, il dispositivo può mostrare widget predefiniti come calendario, meteo e orologio digitale.

Tuttavia, questo metodo richiede una BYO (Bring Your Own) license, che dà accesso ai servizi ospitati TRMNL e all’infrastruttura dei widget. Il vantaggio è un’esperienza raffinata e pronta all’uso con integrazione cloud, senza dover scrivere codice.

Il secondo metodo è programmare il TRMNL direttamente con Arduino IDE. In questo caso, il pannello e-paper può essere gestito usando una versione fork della libreria TFT_eSPI, che fornisce funzioni di disegno per display.

Con questo approccio, gli sviluppatori hanno completa libertà di progettare le proprie applicazioni, che siano un orologio digitale, una dashboard dati IoT o visualizzazioni personalizzate. Questo metodo non richiede licenza, ma richiede familiarità con la programmazione Arduino. Pur non avendo l’ecosistema plug-and-play del firmware ufficiale, offre pieno controllo su cosa viene mostrato e come viene usato l’hardware. Ed è questo l’approccio che seguiremo in questo tutorial.

Specifiche tecniche

ComponenteSpecifiche
Tipo di displayE-paper da 7,5 pollici (display a carta elettronica)
Risoluzione800 × 480 pixel
Colori del displayBianco e nero (monocromatico)
Scheda controllerModulo microcontrollore basato su ESP32
MicrocontrolloreXIAO ESP32-S3 Plus
Memoria flash4 MB (varia a seconda del modulo ESP32 usato)
RAM520 KB SRAM (con PSRAM esterna opzionale a seconda della variante della scheda)
ConnettivitàWi-Fi 802.11 b/g/n, Bluetooth 4.2 BLE
Interfaccia verso il displaySPI
Connessione USBUSB-C (per programmazione e alimentazione)
Alimentazione5 V via USB-C o tramite batteria Li-ion da 2000mAh
Caratteristiche aggiuntivePulsante reset, pulsante boot
InvolucroCustodia stampata in 3D progettata per il pannello da 7,5 pollici e la scheda ESP32
Opzioni firmwareFirmware TRMNL con licenza BYO, o firmware Arduino personalizzato con TFT_eSPI
Schema elettricoSchematic of XIAO ePaper Display Dev Board

Nelle sezioni successive imparerai come installare le librerie necessarie e come implementare un orologio digitale che mostra ora e data sul display TRMNL 7.5″.

Installare le librerie

Prima di scrivere codice, dobbiamo installare le librerie richieste. Seeed Studio ha creato un fork (Seeed_GFX Library) della popolare TFT_eSPI Library che supporta il display TRMNL 7.5″. La libreria originale TFT_eSPI Library non funziona con questo display.

Per prima cosa, vai al repository github della Seeed_GFX Library, premi il pulsante verde “<> Code” e scarica la libreria come file ZIP:

Successivamente decomprimi la libreria, che ti darà una cartella chiamata “Seeed_GFX”. Dobbiamo copiare questa cartella nella cartella “libraries” dell’Arduino IDE. Su Windows la cartella “libraries” si trova tipicamente in:

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

Poiché questa cartella contiene già librerie installate, ti consiglio di rinominarla temporaneamente, ad esempio in “_libraries”, e creare una nuova cartella chiamata “libraries”. Così eviti conflitti con le librerie già installate senza perderle. L’immagine sotto mostra come dovrebbe apparire la tua cartella “Arduino”:

Dopodiché copia la cartella “Seeed_GFX” dentro la cartella “libraries”:

e con questo hai completato l’installazione delle librerie richieste.

Codice di test per il kit fai-da-te TRMNL 7.5″

Iniziamo con un semplice codice di test per il display. Crea una nuova cartella progetto “trmnl” con due file: “trmnl.ino” e “driver.h”:

Poi apri “trmnl.ino” con Arduino IDE, clicca sulla scheda del file “driver.h” e copia il seguente codice nel file “driver.h”:

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

Infine, copia il seguente codice nel file “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() {}

Per caricare il codice sul microcontrollore della scheda driver del display seleziona la scheda XIAO_ESP32S3_PLUS come mostrato sotto:

Dopo aver caricato il codice, il display dovrebbe lampeggiare alcune volte e poi mostrare il testo “Makerguides” al centro del display:

Se funziona, congratulazioni : )

Codice orologio digitale per il kit fai-da-te TRMNL 7.5″

Nel prossimo esempio di codice imparerai come usare il kit TRMNL 7.5″ con Arduino IDE per mostrare un orologio digitale che si sincronizza automaticamente con l’ora da internet. Dai prima un’occhiata al codice completo qui sotto, poi ne discuteremo i dettagli:

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

Importazioni

Iniziamo includendo le librerie necessarie: SPI gestisce la comunicazione con il display e-paper, TFT_eSPI fornisce funzioni di disegno, WiFi gestisce la connettività wireless, e esp_sntp sincronizza l’ora con server di rete.

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

Costanti

Poi definiamo alcune costanti. SSID e PWD saranno usati per connettere l’ESP32 alla tua rete Wi-Fi. Devi sostituirli con le credenziali della tua rete.

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 costante TIMEZONE è per Berlino, Germania. Per altre definizioni di fuso orario dai un’occhiata al Posix Timezones Database. Basta copiare e incollare la stringa che trovi lì e modificare la costante TIMEZONE di conseguenza. Il codice dell’orologio prende l’ora corrente da un server internet ed è quindi sempre preciso, ma richiede accesso Wi-Fi.

Infine, impostiamo larghezza e altezza del display, che ci aiuteranno a posizionare il testo correttamente.

Oggetti

Creiamo un oggetto EPaper, che ci permetterà di inizializzare lo schermo, disegnare testo e aggiornare il contenuto.

EPaper epd = EPaper();

Inizializzazione dell’ora

La funzione initTime imposta il fuso orario in modo che quando prendiamo l’ora da internet, venga correttamente adattata alla regione dell’utente. Questo assicura che il dispositivo non mostri solo l’UTC ma l’ora locale.

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

Sincronizzazione dell’ora

La funzione syncTime connette l’ESP32 al Wi-Fi e poi richiede l’ora corrente da un server NTP. La chiamata a configTzTime gestisce sia la sincronizzazione che l’adattamento del fuso orario. Il ciclo interno aspetta che la connessione Wi-Fi sia stabilita prima di procedere.

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

Inizializzazione del display

Prima di poter disegnare qualcosa, dobbiamo preparare il display e-paper. La funzione initDisplay avvia l’hardware, imposta l’orientamento, riempie lo schermo di bianco e definisce il colore e la dimensione del testo di default.

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

Funzione setup

La funzione setup mette tutto insieme. Configura il fuso orario, inizializza il display e poi sincronizza l’orologio con il server NTP. Quando questa funzione termina, il sistema è pronto a mostrare l’ora precisa sincronizzata in rete.

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

Funzione loop

Il loop aggiorna il contenuto del display. Vengono creati un buffer e una struttura tm per contenere i dati temporali formattati. La chiamata a getLocalTime recupera l’ora corrente. Se la chiamata ha successo, l’area del display viene prima pulita riempiendo un rettangolo bianco. Poi vengono disegnate tre informazioni diverse al centro dello schermo: ora e minuti correnti, giorno della settimana e data completa con mese e anno.

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 sotto mostra come appare sul display e-paper reale:

Infine, l’ESP32 entra in deep sleep per 30 secondi. Questo conserva energia, particolarmente utile quando si usa la batteria. Dopo il timer di sleep, il chip si risveglia automaticamente, riesegue il loop e aggiorna l’ora.

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

Riepilogo

Con questo codice, il tuo kit TRMNL 7.5″ diventa un orologio e-paper a basso consumo e sempre preciso. Si connette al Wi-Fi, prende l’ora corrente da un server NTP e la mostra in un layout pulito. Grazie alla modalità deep sleep dell’ESP32 e alle proprietà statiche del display e-paper, consuma poca energia mantenendo le informazioni sempre visibili.

Nota però che il codice esegue un aggiornamento completo del display ogni 30 secondi. Questo significa che il display lampeggia ogni 30 secondi, cosa che può risultare fastidiosa. Purtroppo, la Seeed_GFX Library non offre funzioni per un partial redraw.

Conclusioni

Il TRMNL 7.5″ E-Paper è un display grande e dall’aspetto ottimo. La scheda driver con pulsanti extra, interfaccia di ricarica batteria integrata e la batteria Li-ion da 2000mAh inclusa nel kit rendono facile costruire una dashboard alimentata a batteria.

In questo tutorial hai imparato a costruire un orologio digitale con il TRMNL 7.5″ E-Paper. Per maggiori informazioni dai anche un’occhiata al Getting Started with TRMNL on TRMNL 7.5inch(OG) DIY Kit, dove trovi esempi su come leggere i pulsanti sulla scheda driver e come misurare la carica della batteria.

Una limitazione del display TRMNL è che non è supportato dalla comune GxEPD Library, progettata specificamente per display E-Paper. Il supporto attuale tramite la Seeed_GFX Library – un fork della TFT_eSPI Library – è limitato e non fornisce partial redraws né controllo del refresh del display dopo il risveglio dal deep-sleep.

Se non vuoi essere disturbato dal frequente lampeggio del display, l’uso è limitato a situazioni dove gli aggiornamenti sono poco frequenti, ad esempio almeno ogni 15 minuti o preferibilmente ogni poche ore. Questo rende adatte applicazioni come dashboard meteo o calendari, mentre applicazioni con aggiornamenti più rapidi probabilmente no. Nota che non è una limitazione del display ma del software driver.

Per visualizzare un calendario mensile dai un’occhiata al tutorial Monthly Calendar on E-Paper Display e se vuoi approfondire la sincronizzazione oraria guarda i tutorial How to synchronize ESP32 clock with SNTP server e Automatic Daylight Savings Time Clock.

Un’altra estensione comune per orologi digitali è mostrare anche la temperatura ambiente o dati meteo. Dai un’occhiata al tutorial Weather Station on e-Paper Display per maggiori dettagli.

Infine, se preferisci non implementare nulla da solo ma sfruttare una vasta selezione di dashboard (plugin) già esistenti per il display TRMNL 7.5″, leggi la pagina TRMNL 7.5inch(OG) DIY Kit with TRMNL.

Se hai domande, sentiti libero di lasciarle nella sezione commenti.

Buon tinkering 😉