Lilygo T-Display S3 sous IDE Arduino

0
(0)

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-DisplayLILYGO T-Display S3
MicrocontrôleurESP32 (Tensilica Xtensa LX6)ESP32S3 (Tensilica Xtensa LX7)
Écran135 x 240170 x 320
SRAM448 Ko512 Ko
FLASH4 Mo16 Mo
PSRAM8 Mo
TFT DriverST7789VST7789
TFT Interface SPISPI + 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 :

Plaintext
https://espressif.github.io/arduino-esp32/package_esp32_index.json

Voici 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 :

C++
//#include <User_Setup.h>           // Default setup is root library folder

Et dé-commenter la ligne suivante :

C++
#include <User_Setups/Setup206_LilyGo_T_Display_S3.h>     // For the LilyGo T-Display S3 based ESP32S3 with ST7789 170 x 320 TFT

Afficher 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 :

C++
// 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.

Batterie Li-Ion de 3,7 V connecté au Lilygo T-Display S3 via son connecteur JST PH 2.0

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 :

C++
// 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);
}

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?