Skip to Content

Kit DIY TRMNL 7,5″ avec Arduino IDE et TFT_eSPI

Kit DIY TRMNL 7,5″ avec Arduino IDE et TFT_eSPI

Le Kit DIY TRMNL 7,5″ par Seeed Studio est un écran e-paper élégant conçu pour les makers souhaitant créer leur propre terminal intelligent personnalisable. Bien que le firmware officiel propose déjà des widgets prêts à l’emploi, vous pouvez aussi programmer le TRMNL vous-même avec le Arduino IDE.

Dans ce guide, nous vous montrerons comment configurer le kit avec la bibliothèque TFT_eSPI et écrire un sketch simple qui transforme l’écran en une horloge numérique. L’horloge se synchronisera automatiquement avec un serveur de temps internet (NTP), garantissant une heure précise sans réglages manuels.

Où acheter

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.

Le kit DIY TRMNL 7,5″

Le kit DIY TRMNL 7,5″ (OG) de Seeed Studio est un terminal e-paper open-source conçu pour des tableaux de bord personnels, des projets d’affichage IoT et des expérimentations maker. Il combine un écran e-ink monochrome de 7,5 pouces 800×480, une carte driver XIAO ESP32-S3 PLUS, une batterie rechargeable de 2000 mAh et un câble d’extension FPC de 10 cm.

Parts of the TRMNL 7.5" DIY Kit
Composants du kit DIY TRMNL 7,5″ (source)

Notez que ce kit est livré sans boîtier, mais vous pouvez trouver des designs pour impression 3D d’un Triangular Enclosure ou d’un L-shape Enclosure et d’autres sur Printables.

Au cœur de la carte driver se trouve un module microcontrôleur ESP32, offrant un traitement dual-core, Wi-Fi intégré et Bluetooth. L’ESP32 dispose de suffisamment de mémoire flash et SRAM pour supporter à la fois des applications personnalisées et le firmware officiel TRMNL.

La carte contrôleur est conçue pour interfacer le panneau e-paper via une connexion SPI et peut être programmée via USB-C. Un bouton reset et un bouton boot sont fournis pour le flashage du firmware. Trois boutons pour des fonctions définies par l’utilisateur et un interrupteur d’alimentation pour la batterie sont également présents.

Driver board for TRMNL 7.5"
Carte driver pour TRMNL 7,5″ (source)

L’écran de 7,5 pouces utilise la technologie e-paper, qui ne consomme de l’énergie que lors du rafraîchissement et conserve le contenu sans alimentation. Cela le rend idéal pour des tableaux de bord toujours allumés, lisibles même en plein soleil.

Programmation du TRMNL 7,5″

Le TRMNL peut être utilisé ou programmé de deux manières distinctes. La première consiste à installer et exécuter le firmware officiel TRMNL, qui s’intègre à l’écosystème TRMNL. Avec cette méthode, l’appareil peut afficher des widgets préconçus comme un calendrier, la météo et une horloge numérique.

Cependant, cette méthode nécessite une BYO (Bring Your Own) license, qui donne accès aux services hébergés TRMNL et à l’infrastructure des widgets. L’avantage est une expérience prête à l’emploi, intégrée au cloud, sans besoin d’écrire du code.

La seconde méthode est de programmer directement le TRMNL avec l’Arduino IDE. Dans ce cas, le panneau e-paper peut être piloté via une version forkée de la bibliothèque TFT_eSPI, qui fournit des fonctions de dessin pour les écrans.

Avec cette approche, les développeurs ont une liberté totale pour concevoir leurs propres applications, qu’il s’agisse d’une horloge numérique, d’un tableau de bord IoT ou d’une visualisation personnalisée. Cette méthode ne nécessite pas de licence, mais demande une certaine maîtrise de la programmation Arduino. Bien qu’elle ne bénéficie pas de l’écosystème plug-and-play du firmware officiel, elle offre aux makers un contrôle complet sur l’affichage et l’utilisation du matériel. C’est cette méthode que nous utiliserons dans ce tutoriel.

Spécifications techniques

ComposantSpécification
Type d’écranE-paper 7,5 pouces (affichage papier électronique)
Résolution800 × 480 pixels
Couleurs d’affichageNoir et blanc (monochrome)
Carte contrôleurModule microcontrôleur basé sur ESP32
MicrocontrôleurXIAO ESP32-S3 Plus
Mémoire flash4 Mo (varie selon le module ESP32 utilisé)
RAM520 Ko SRAM (avec PSRAM externe optionnelle selon variante de carte)
ConnectivitéWi-Fi 802.11 b/g/n, Bluetooth 4.2 BLE
Interface vers l’écranSPI
Connexion USBUSB-C (pour programmation et alimentation)
Alimentation5 V via USB-C ou batterie Li-ion 2000 mAh
Fonctionnalités supplémentairesBouton reset, bouton boot
BoîtierBoîtier imprimé en 3D conçu pour le panneau 7,5 pouces et la carte ESP32
Options de firmwareFirmware TRMNL avec licence BYO, ou firmware Arduino personnalisé avec TFT_eSPI
SchémasSchematic of XIAO ePaper Display Dev Board

Dans les sections suivantes, vous apprendrez comment installer les bibliothèques nécessaires et comment implémenter une horloge numérique affichant l’heure et la date sur l’écran TRMNL 7,5″.

Installer les bibliothèques

Avant d’écrire du code, il faut installer les bibliothèques requises. Seeed Studio a créé un fork (Seeed_GFX Library) de la populaire TFT_eSPI Library qui supporte l’écran TRMNL 7,5″. La TFT_eSPI Library originale ne fonctionne pas avec cet écran.

Commencez par aller sur le dépôt GitHub de la Seeed_GFX Library, cliquez sur le bouton vert « <> Code » et téléchargez la bibliothèque au format ZIP :

Ensuite, décompressez la bibliothèque, ce qui vous donnera un dossier nommé « Seeed_GFX ». Nous devons copier ce dossier dans le dossier « libraries » de l’Arduino IDE. Sous Windows, le dossier « libraries » se trouve généralement ici :

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

Comme ce dossier contient déjà des bibliothèques installées, je vous recommande de le renommer temporairement, par exemple en « _libraries », puis de créer un nouveau dossier nommé « libraries ». Cela évite les conflits avec vos bibliothèques existantes tout en les conservant. L’image ci-dessous montre à quoi devrait ressembler votre dossier « Arduino » :

Après cela, copiez le dossier « Seeed_GFX » dans le dossier « libraries » :

Cela conclut l’installation des bibliothèques requises.

Code de test pour le kit DIY TRMNL 7,5″

Passons maintenant à un code de test simple pour l’écran. Créez un nouveau dossier de projet « trmnl » avec deux fichiers : « trmnl.ino » et « driver.h » :

Puis ouvrez « trmnl.ino » avec votre Arduino IDE, cliquez sur l’onglet du fichier « driver.h » et copiez le code suivant dans ce fichier :

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

Enfin, copiez le code suivant dans le fichier « 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() {}

Pour téléverser le code sur le microcontrôleur de la carte driver, sélectionnez la carte XIAO_ESP32S3_PLUS comme montré ci-dessous :

Après le téléversement, l’écran devrait scintiller quelques fois puis afficher le texte « Makerguides » au centre de l’écran :

Si cela fonctionne, félicitations 🙂

Code de l’horloge numérique pour le kit DIY TRMNL 7,5″

Dans cet exemple de code, vous apprendrez à utiliser le kit DIY TRMNL 7,5″ avec l’Arduino IDE pour afficher une horloge numérique qui synchronise automatiquement l’heure depuis internet. Jetez d’abord un œil au code complet ci-dessous, puis nous en discuterons en détail :

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

Importations

Nous commençons par inclure les bibliothèques nécessaires : SPI gère la communication avec l’écran e-paper, TFT_eSPI fournit les fonctions de dessin, WiFi gère la connectivité sans fil, et esp_sntp synchronise l’heure avec les serveurs réseau.

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

Constantes

Ensuite, nous définissons quelques constantes. Le SSID et le PWD seront utilisés pour connecter l’ESP32 à votre réseau Wi-Fi. Vous devez les remplacer par les identifiants de votre réseau.

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 correspond à Berlin en Allemagne. Pour d’autres définitions de fuseaux horaires, consultez le Posix Timezones Database. Il suffit de copier-coller la chaîne trouvée et de modifier la constante TIMEZONE en conséquence. Le code de l’horloge récupère l’heure actuelle depuis un serveur internet, garantissant ainsi une précision constante, mais nécessite un accès Wi-Fi.

Enfin, nous définissons la largeur et la hauteur de l’écran, ce qui nous aidera à positionner le texte correctement.

Objets

Nous créons ensuite un objet EPaper, qui nous permettra d’initialiser l’écran, dessiner du texte et mettre à jour son contenu.

EPaper epd = EPaper();

Initialisation de l’heure

La fonction initTime configure le fuseau horaire afin que lorsque nous récupérons l’heure depuis internet, elle soit correctement ajustée pour la région de l’utilisateur. Cela garantit que l’appareil n’affiche pas simplement l’heure UTC, mais l’heure locale.

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

Synchronisation de l’heure

La fonction syncTime connecte l’ESP32 au Wi-Fi puis demande l’heure actuelle à un serveur NTP. L’appel à configTzTime gère à la fois la synchronisation de l’heure et les ajustements de fuseau horaire. La boucle interne attend que la connexion Wi-Fi soit établie avant de continuer.

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

Initialisation de l’affichage

Avant de pouvoir dessiner quoi que ce soit, il faut préparer l’écran e-paper. La fonction initDisplay démarre le matériel, définit son orientation, remplit l’écran d’un fond blanc et définit la couleur et la taille de texte par défaut.

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

Fonction setup

La fonction setup rassemble tout cela. Elle configure le fuseau horaire, initialise l’écran, puis synchronise l’horloge avec le serveur NTP. À la fin de cette fonction, le système est prêt à afficher une heure précise synchronisée réseau.

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

Fonction loop

La boucle met à jour le contenu de l’écran. Un buffer et une structure tm sont créés pour contenir les données temporelles formatées. L’appel à getLocalTime récupère l’heure actuelle. Si l’appel réussit, la zone d’affichage est d’abord effacée en remplissant un rectangle blanc. Ensuite, trois informations différentes sont affichées au centre de l’écran : l’heure et les minutes, le jour de la semaine, et la date complète avec mois et année.

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 photo ci-dessous montre à quoi cela ressemble sur l’écran e-paper réel :

Enfin, l’ESP32 est mis en deep sleep pendant 30 secondes. Cela économise de l’énergie, particulièrement utile en fonctionnement sur batterie. À l’expiration du timer, la puce se réveille automatiquement, relance la boucle et rafraîchit l’heure.

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

Résumé

Avec ce code, votre kit DIY TRMNL 7,5″ devient une horloge e-paper basse consommation, toujours précise. Il se connecte au Wi-Fi, récupère l’heure actuelle depuis un serveur NTP et l’affiche dans une mise en page claire. Grâce au mode deep sleep de l’ESP32 et aux propriétés statiques de l’écran e-paper, il consomme peu tout en gardant l’information visible en permanence.

Notez cependant que le code effectue un rafraîchissement complet de l’écran toutes les 30 secondes. Cela provoque un scintillement toutes les 30 secondes, ce qui peut être assez gênant. Malheureusement, la Seeed_GFX Library ne propose pas de fonctions pour un partial redraw.

Conclusions

Le TRMNL 7,5″ E-Paper est un grand écran au design soigné. La carte driver avec boutons supplémentaires, interface de charge de batterie intégrée et la batterie Li-ion 2000mAh fournie facilitent la création d’un tableau de bord alimenté par batterie.

Dans ce tutoriel, vous avez appris à construire une horloge numérique avec le TRMNL 7,5″ E-Paper. Pour plus d’informations, consultez aussi le Getting Started with TRMNL on TRMNL 7.5inch(OG) DIY Kit, où vous trouverez des exemples pour lire les boutons de la carte driver et mesurer la charge de la batterie.

Une limitation de l’écran TRMNL est qu’il n’est pas supporté par la GxEPD Library courante, spécialement conçue pour les écrans e-paper. Le support actuel via la Seeed_GFX Library – un fork de la TFT_eSPI Library – est limité et ne fournit pas de partial redraws ni de contrôle du rafraîchissement de l’écran après réveil du deep-sleep.

Si vous ne souhaitez pas être dérangé par le scintillement fréquent de l’écran, cela limite les cas d’usage aux situations où les mises à jour sont peu fréquentes, par exemple au moins toutes les 15 minutes ou idéalement toutes les quelques heures. Cela rend les tableaux météo ou calendriers adaptés, mais les applications nécessitant des mises à jour rapides sont probablement inadaptées. Notez que ce n’est pas une limitation de l’écran mais du logiciel driver.

Pour afficher un calendrier mensuel, consultez le tutoriel Monthly Calendar on E-Paper Display et si vous souhaitez en savoir plus sur la synchronisation horaire, voyez les tutoriels How to synchronize ESP32 clock with SNTP server et Automatic Daylight Savings Time Clock.

Une extension courante pour les horloges numériques est d’afficher aussi la température ambiante ou les données météo. Consultez le tutoriel Weather Station on e-Paper Display pour plus de détails.

Enfin, si vous préférez ne rien implémenter vous-même mais profiter d’un large choix de tableaux de bord (plugins) déjà existants pour l’écran TRMNL 7,5″, lisez la page TRMNL 7.5inch(OG) DIY Kit with TRMNL.

Si vous avez des questions, n’hésitez pas à les poser dans la section commentaires.

Bon bricolage 😉