Dans mon article précédent, je vous présentai la carte LILYGO T-Display. Je vous présente ici sa grande sœur, la LILYGO T-Display S3. Cette carte de développement basée sur un microcontrôleur ESP32-S3 est équipée d’un écran LCD de 1.9″ offrant une résolution de 170 x 320 pixels.
Voici un rapide comparatif entre ces deux cartes :
| LILYGO T-Display | LILYGO T-Display S3 | |
|---|---|---|
| Microcontrôleur | ESP32 (Tensilica Xtensa LX6) | ESP32S3 (Tensilica Xtensa LX7) |
| Écran | 135 x 240 | 170 x 320 |
| SRAM | 448 Ko | 512 Ko |
| FLASH | 4 Mo | 16 Mo |
| PSRAM | – | 8 Mo |
| TFT Driver | ST7789V | ST7789 |
| TFT Interface | SPI | SPI + Parallèle (8 bits) |
Schéma des broches
Voici la schéma des broches de la carte, qui met en évidence les broches utilisées la communication parallèle avec l’écran ST7789 (LCD_D0 à LCD_D7, LCD_WR et LCD_RD). La commande du rétroéclairage est contrôlée via la broche LCD_BL (GPIO38) et l’allumage de l’écran est contrôlé par la broche LCD_Power_On (GPIO15).

Installation du gestionnaire de cartes ESP32
La carte étant basé sur le microcontrôleur ESP32 il faut installer le support des cartes Espressif ESP32 dans l’IDE Arduino.
Dans le menu préférences de l’IDE Arduino, ajoutez l’URL suivante dans le gestionnaire de carte :
https://espressif.github.io/arduino-esp32/package_esp32_index.jsonVoici une capture d’écran des étapes à suivre :



Installez le paquet de gestion de cartes esp32 de Espressif Systems.


Une fois le gestionnaire de cartes installé, sélectionnez la carte ESP32S3 Dev Module dans la liste des cartes esp32 disponibles, et appliquer cette configuration :

Note : avec la configuration Lilygo T-Display S3, la PSRAM ne semble pas correctement configurée.
Installation des librairies pour l’écran LCD
Installer la librairie TFT_eSPI by Bodmer.


Éditer le fichier User_Setup_Select.h qui se trouve dans le sous-répertoire Librairies du répertoire Arduino, et appliquer les modifications suivantes :
Commenter la ligne suivante :
//#include <User_Setup.h> // Default setup is root library folderEt dé-commenter la ligne suivante :
#include <User_Setups/Setup206_LilyGo_T_Display_S3.h> // For the LilyGo T-Display S3 based ESP32S3 with ST7789 170 x 320 TFTAfficher un texte sur l’écran du LilyGo T-Display
Pour vérifier que les bibliothèques et la configuration de la carte sont correctement installées, nous allons afficher sur l’écran la taille des mémoires Flash et PSRAM détectées :
// LilyGo T-Display S3
// Site : https://tutoduino.fr/
// Licence : Copyleft 2025
// Inclusion de la bibliothèque TFT_eSPI pour gérer l'affichage TFT
// Cette bibliothèque permet de contrôler les écrans TFT compatibles avec les contrôleurs comme le ST7789V
#include <TFT_eSPI.h>
// Création d'un objet TFT_eSPI nommé "tft" pour interagir avec l'écran
// Cet objet encapsule toutes les fonctions nécessaires pour dessiner sur l'écran
TFT_eSPI tft = TFT_eSPI();
// -----------------------------------------------------------------------------
// Mise en veille profonde de l'ESP32 et de l'ecran LCD
// -----------------------------------------------------------------------------
void enterDeepSleep() {
// Configure la sortie de veille par appui sur le bouton
esp_sleep_enable_ext0_wakeup((gpio_num_t)14, LOW);
// Éteindre écran et désactiver son alimentation
digitalWrite(38, LOW);
digitalWrite(15, LOW);
// Activer la veille profonde du microcontrolleur
esp_deep_sleep_start();
}
void setup() {
// Configuration de la broche 38 (rétroéclairage) en sortie
pinMode(38, OUTPUT);
// Allumer le rétroéclairage (HIGH = allumé)
digitalWrite(38, HIGH);
// Configuration de la broche 15 (activation de l'écran) en sortie
pinMode(15, OUTPUT);
// Activer l'écran (HIGH = activé)
digitalWrite(15, HIGH);
// Initialisation de l'écran TFT
tft.init();
// Rotation de l'écran (horizontal connecteur usb à gauche)
tft.setRotation(3);
// Effacer l'écran en le remplissant de noir
tft.fillScreen(TFT_BLACK);
// Affichage des différents messages sur l'écran
tft.setTextColor(TFT_GREEN);
tft.setTextSize(2);
tft.setCursor(10, 20);
tft.println("https://tutoduino.fr");
tft.setTextColor(TFT_MAGENTA);
tft.setCursor(10, 50);
tft.println("Lilygo T-Display S3");
// Lire et afficher la taille de la mémoire Flash
uint32_t flashSize = ESP.getFlashChipSize();
tft.setTextColor(TFT_ORANGE);
tft.setCursor(10, 80);
tft.print("Flash: ");
tft.print(flashSize / (1024 * 1024)); // Conversion en Mo (1 Mo = 1024 Ko = 1024 * 1024 octets)
tft.println(" Mo");
// Vérifier si la PSRAM est présente
if (psramFound()) {
// Lire la taille de la PSRAM et l'afficher sur l'écran
uint32_t psramSize = ESP.getPsramSize();
tft.setCursor(10, 110);
tft.setTextColor(TFT_CYAN);
tft.print("PSRAM: ");
tft.print(psramSize / (1024 * 1024)); // Conversion en Mo
tft.println(" Mo");
} else {
// Si la PSRAM n'est pas détectée, afficher un message
tft.setCursor(10, 110);
tft.setTextColor(TFT_CYAN);
tft.println("No PSRAM detected");
}
}
void loop() {
// Attendre 1 minute et entrer en veille profonde
delay(60000);
enterDeepSleep();
}Si tout se déroule normalement, votre Lilygo T-Display S3 devrait afficher les messages suivants :

Mesure de la tension de la batterie
Le Lilygo T-Display S3 peut être alimenté par une batterie Lithium-Ion de 3,7 V par son connecteur JST PH 2.0 (JST 2 broches avec un pas de 2 mm). Une batterie de 800 mAh peut être positionnée à l’intérieur du boîtier.

Il est possible de mesurer la tension de la batterie via la broche LCD_BAT_VOLT (GPIO4), ce qui permet d’estimer son niveau de charge (4,2 V =100% et 3,0 V = 0%).
La tension fournie par la batterie dépasse la plage de mesure admissible d’une entrée analogique de l’ESP32. Afin de permettre sa mesure, un pont diviseur de tension est intégré au circuit, ce qui abaisse la tension à un niveau compatible avec l’entrée ADC utilisée (GPIO4 dans ce cas).
Le schéma électrique de la carte indique que ce pont diviseur présente un rapport de division de 2. Toutefois, en raison des tolérances des composants et des imprécisions propres à la référence ADC de l’ESP32, un ajustement empirique a été nécessaire. Un coefficient correctif ADC_CORR de 1,051 a ainsi été appliqué afin d’obtenir une correspondance fidèle entre la tension réelle mesurée au multimètre et la valeur calculée par l’ESP32 sur le module LilyGO T-Display S3.
Voici le code qui permet d’afficher la tension de la batterie sur l’écran :
// LilyGo T-Display S3
// Site : https://tutoduino.fr/
// Licence : Copyleft 2025
// Inclusion de la bibliothèque pour gérer l'écran TFT
#include <TFT_eSPI.h>
// Création de l'objet pour contrôler l'écran TFT
TFT_eSPI tft = TFT_eSPI();
// Définition des broches utilisées
#define LCD_BAT_VOLT 4 // Broche de mesure de la tension batterie
#define PIN_BUTTON 14 // Broche du bouton
#define TFT_ON 15 // Broche d'activation de l'écran
#define TFT_BL 38 // Broche du rétroéclairage
#define ADC_REF 3.30
#define ADC_CORR 1.051 // calibration terrain
#define ADC_MAX 4095.0
#define DIVIDER 2.0
// Configuration de la mesure de tension
void initVoltageMeasurement() {
// Résolution 12 bits et atténuation 11 dB (mesure jusqu'à 2600 mV)
// Il s'agit des valeurs par défaut, objectif uniquement pédagogique
analogSetPinAttenuation(LCD_BAT_VOLT, ADC_11db);
analogReadResolution(12);
}
// Lecture de la tension batterie
float readBatteryVoltage() {
int adcValue = analogRead(LCD_BAT_VOLT);
return (adcValue / ADC_MAX) * ADC_REF * DIVIDER * ADC_CORR;
}
void setup() {
// Configurer rétroéclairage et écran en sortie
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH); // Allumer rétroéclairage
pinMode(TFT_ON, OUTPUT);
digitalWrite(TFT_ON, HIGH); // Activer écran
// Initialiser la mesure de tension
initVoltageMeasurement();
// Initialiser l'écran TFT
tft.init();
// Rotation de l'écran (connecteur USB à gauche)
tft.setRotation(3);
}
void loop() {
// Mesurer et afficher la tension batterie toutes les 10 secondes
tft.fillScreen(TFT_BLACK);
tft.setCursor(10, 50);
tft.setTextColor(TFT_CYAN);
tft.printf("VBAT = %.2f V", readBatteryVoltage());
delay(10000);
}