Skip to Content

Interface écran TFT ST7735 avec ESP32

Interface écran TFT ST7735 avec ESP32

Dans ce tutoriel, vous apprendrez à interfacer un module d’affichage TFT 1,8″ 128×160 avec un driver d’affichage ST7735 avec un ESP32 (WEMOS Lolin32 lite).

Les instructions et le code fonctionneront avec quelques modifications mineures pour d’autres ESP32 et TFT, tant que l’affichage utilise le driver ST7735.

Pièces requises

Vous aurez besoin d’un ESP32 et d’un écran TFT de 1,8 pouces avec une résolution de 128×160 pixels et un circuit driver ST7735. Quelques câbles et une breadboard peuvent également être utiles.

Écran TFT 1,8″ ST7735

ESP32 lite Lolin32

ESP32 lite

USB data cable

Câble USB de données

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Breadboard

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.

Module d’affichage TFT 1,8″ ST7735

Le module d’affichage TFT 1,8″ que nous allons utiliser ici a une résolution de 128×160 pixels avec 65K couleurs RGB. L’image ci-dessous montre le devant et le dos du module d’affichage :

Front and Back of 1.8" TFT ST7735 Display Module
Devant et dos du module d’affichage TFT 1,8″ ST7735 ( source )

Le module utilise le chip driver ST7735S et est contrôlé via une interface SPI 4 fils. La tension de fonctionnement est de 3,3 V et l’écran consomme environ 30 mA au maximum.

Notez qu’il existe de nombreuses versions différentes de ce type d’écran TFT. Certains ont un SD card supplémentaire ou un touch display .

Le plus important, c’est que certains d’entre eux possèdent un convertisseur logic level qui vous permet de connecter le module d’affichage à un Arduino fonctionnant en 5 V. Celui-ci n’en possède pas , ce qui signifie que vous ne pouvez pas le connecter directement à un Arduino ! Nous utilisons donc un ESP32 qui fonctionne avec une logique CMOS 3,3 V.

Si vous souhaitez utiliser un Arduino, vous devez convertir les niveaux logiques. Il existe plusieurs méthodes pour cela (diviseur de tension, optocoupleur, circuit de translation de niveau), mais la plus simple est d’utiliser un level shifting module .

Enfin, il existe des écrans similaires qui utilisent le circuit driver ST7789 au lieu du ST7735S . Le code de ce tutoriel est destiné aux écrans avec le driver ST7735S et ne fonctionnera pas avec d’autres.

Connexion de l’écran TFT 1,8″ ST7735 avec ESP32

Connecter l’écran TFT à un ESP32 est simple, mais le marquage des broches sur l’écran est un peu déroutant. Il affiche des broches SDA et SCL, mais comme il utilise une interface SPI, ce ne sont pas les broches SDA et SCL pour I2C ! En fait, SDA correspond à MOSI et SCL à SCLK pour SPI.

Le schéma de câblage suivant vous montre comment connecter l’écran TFT 1,8″ ST7735 à un WEMOS Lolin32 lite :

Connexion de l’écran TFT ST7735 avec WEMOS Lolin ESP32 lite

Et voici pour votre commodité les connexions requises sous forme de tableau :

Écran ESP32
CS / SS 5
RST 16
DC 17
SDA / MOSI 23
SCL / SCLK 18
BKL/BL 22
GND GND
VCC 3,3 V

Assurez-vous de connecter le VCC de l’écran au 3,3 V ! Vous devriez également utiliser les broches hardware SPI pour MOSI et SCLK. Selon le microcontrôleur, les broches hardware SPI peuvent varier. Vous pouvez les trouver en sélectionnant votre carte dans l’IDE Arduino puis en exécutant le code ci-dessous.

void setup() {
  Serial.begin(115200);
  Serial.print("MOSI: ");
  Serial.println(SDA / MOSI);
  Serial.print("MISO: ");
  Serial.println(MISO);
  Serial.print("SCL / SCLK: ");
  Serial.println(SCK);
  Serial.print("CS / SS: ");
  Serial.println(SS);  
}

void loop() { }

Il affiche les broches nécessaires pour le hardware SPI – spécifiquement MOSI et SCLK. Les autres broches peuvent être choisies librement et MISO n’est pas utilisé.

Code pour écran TFT ST7735 avec la bibliothèque Adafruit_ST7735

Dans cette section, nous allons utiliser la Adafruit-ST7735 Library pour écrire et dessiner sur l’écran TFT 1,8″ ST7735. Pour l’installer, ouvrez simplement le Library Manager, cherchez « Adafruit-ST7735 » et cliquez sur le bouton vert INSTALL :

Adafruit-ST7735 in Library Manager
Adafruit-ST7735 dans le Library Manager

L’installateur vous demandera probablement d’installer les dépendances également. Cliquez sur INSTALL ALL :

Install the dependencies for Adafruit-ST7735 Library
Installer les dépendances pour la bibliothèque Adafruit-ST7735

Une fois la bibliothèque installée, nous pouvons tester l’écran. Compilez et téléversez simplement le code suivant. Il affiche le texte « Makerguides » avec un cadre jaune sur l’écran :

#include <Adafruit_GFX.h>     
#include <Adafruit_ST7735.h>  

#define TFT_CS  5
#define TFT_RST 16
#define TFT_DC  17
// #define TFT_MOSI  23  // SDA // HW MOSI
// #define TFT_SCLK  18  // SCL // HW SCLK
// #define TFT_MISO  19  // not used
#define TFT_BL  22  // LED back-light

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);  // hardware SPI
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

void setup(void) {
  //tft.initB();
  tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
  //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab
  //tft.setSPISpeed(27000000);

  tft.setRotation(1);
  tft.fillScreen(ST77XX_BLACK);

  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(2);
  tft.setCursor(15, 50);
  tft.println("Makerguides");
  tft.drawRect(10, 40, 145, 40, ST77XX_YELLOW);
}

void loop() { }

Si vous utilisez le hardware SPI, vous n’aurez pas besoin des définitions de broches pour TFT_MOSI et TFT_SCLK . Cependant, si vous utilisez le software SPI, vous en aurez besoin et devrez les passer au constructeur alternatif de l’objet tft :

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

Si vous compilez et téléversez le code, vous devriez voir la sortie suivante sur votre écran :

Output on TFT with Adafruit_ST7735 Library
Sortie sur TFT avec la bibliothèque Adafruit_ST7735

Si vous ne voyez rien, ou si les couleurs sont incorrectes, ou si le texte présente des artefacts, essayez l’un des autres initialiseurs pour l’écran TFT dans le code :

  //tft.initB();
  tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
  //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab

L’ onglet noir et l’ onglet vert font référence aux onglets colorés attachés au film de protection de l’écran que ces écrans ont généralement. Par exemple, l’image ci-dessous montre un écran TFT avec un onglet vert :

Écran TFT avec onglet vert ( source )

La couleur de l’onglet est importante car elle indique souvent le type de contrôleur d’affichage utilisé. L’ onglet vert est généralement pour des contrôleurs plus récents ou alternatifs comme ILI9341, ST7735, ou d’autres modèles spécifiques. L’ onglet noir indique un contrôleur plus ancien ou différent, comme ST7735R ou des variantes similaires, qui ont des spécifications légèrement différentes.

Enfin, vous pouvez essayer de réduire la vitesse SPI si le texte sur l’écran semble corrompu :

 tft.setSPISpeed(27000000);

Au fait, si vous voulez allumer ou éteindre le rétroéclairage de l’écran, vous pouvez utiliser le code suivant :

pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, LOW);  

Code pour écran TFT ST7735 avec la bibliothèque TFT_eSPI

Dans cette section, nous allons utiliser la TFT_eSPI library au lieu de la bibliothèque Adafruit_ST7735 pour contrôler l’écran. Pour l’installer, ouvrez le Library Manager, cherchez « TFT_eSPI » et cliquez sur « INSTALL ». Après l’installation, cela devrait ressembler à ceci :

TFT_eSPI library in Library Manager
Bibliothèque TFT_eSPI dans le Library Manager

Ensuite, nous devons créer la structure de dossier correcte pour le projet. Ouvrez votre IDE Arduino et créez un projet  » tft_test  » puis enregistrez-le (Enregistrer sous …). Cela créera un dossier  » tft_test  » contenant le fichier  » tft_test.ino « . Dans ce dossier, créez un autre fichier nommé  » tft_setup.h « . Votre dossier de projet devrait ressembler à ceci

Project Folder Structure
tft_test

Si vous souhaitez en savoir plus sur cette configuration et d’autres options pour configurer un écran TFT avec la bibliothèque TFT_eSPI, consultez le tutoriel How to configure TFT_eSPI Library for TFT display .

Une fois le dossier de projet avec les deux fichiers créé, copiez le code de configuration suivant pour l’écran TFT dans le fichier tft_setup.h :

// tft_setup.h
#define ST7735_DRIVER

//#define ST7735_INITB
//#define ST7735_GREENTAB
//#define ST7735_GREENTAB2
//#define ST7735_GREENTAB3
//#define ST7735_REDTAB
#define ST7735_BLACKTAB
   
#define TFT_WIDTH  128
#define TFT_HEIGHT 160

#define TFT_RGB_ORDER TFT_RGB  

// WEMOLS Lolin32 lite
#define TFT_CS    5   
#define TFT_RST   16  
#define TFT_DC    17   
// #define TFT_MOSI  23  // SDA // HW MOSI
// #define TFT_SCLK  18  // SCL // HW SCLK
// #define TFT_MISO  19  // not used
#define TFT_BL    22   // LED back-light
#define TFT_BACKLIGHT_ON HIGH

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT

#define SPI_FREQUENCY  27000000
#define SPI_READ_FREQUENCY  20000000
#define SPI_TOUCH_FREQUENCY  2500000

et le code du sketch dans le fichier tft_test.ino :

// tft_test.ino
#include "tft_setup.h"
#include"TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();

void setup(void) {  
  tft.init();
  tft.fillScreen(TFT_BLACK);  
  tft.setRotation(1);

  tft.setCursor(15, 50, 1);  
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.println("Makerguides");
  tft.drawRect(10, 40, 145, 40, TFT_YELLOW);  
}

void loop() { }

Si vous compilez et téléversez le code, vous devriez voir la même sortie qu’auparavant :

Output on TFT with TFT_eSPI Library
Sortie sur TFT avec la bibliothèque TFT_eSPI

Comme pour la bibliothèque Adafruit_ST7735, le fichier tft_setup.h pour la bibliothèque TFT_eSPI propose différents initialiseurs selon l’écran TFT spécifique (onglet vert, onglet noir, …) que vous utilisez. Si vous rencontrez des problèmes avec l’écran (couleurs erronées, texte corrompu), essayez-en un de ceux-ci en premier :

//#define ST7735_INITB
//#define ST7735_GREENTAB
//#define ST7735_GREENTAB2
//#define ST7735_GREENTAB3
//#define ST7735_REDTAB
#define ST7735_BLACKTAB

Comme précédemment, la vitesse SPI est un autre paramètre important, qui est aussi spécifié dans le fichier tft_setup.h :

#define SPI_FREQUENCY  27000000

J’ai essayé une fréquence commune plus élevée SPI_FREQUENCY de 40000000 mais le texte a commencé à être corrompu. L’image ci-dessous montre deux captures d’écran de l’écran TFT. La première avec une SPI_FREQUENCY de 27000000 et la seconde avec une fréquence de 40000000.

TFT text output with different SPI frequencies
Sortie texte TFT avec différentes fréquences SPI

On voit clairement que le texte devient corrompu à la fréquence SPI plus élevée. Soyez donc prudent avec les vitesses élevées et réduisez la fréquence SPI si vous commencez à voir du texte déformé.

Enfin, la bibliothèque TFT_eSPI vous permet de mettre le driver et l’écran en mode veille, en plus d’éteindre le rétroéclairage :

pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, LOW);         // Switch off Backlight
tft.writecommand(ST7735_DISPOFF);  // Switch off the display 
tft.writecommand(ST7735_SLPIN);    // Sleep the display driver  

Le tableau suivant montre la consommation électrique de l’écran TFT avec les différents composants allumés ou éteints :

Rétroéclairage Écran Driver Consommation
ALLUMÉ ALLUMÉ ALLUMÉ 15 mA
ÉTEINT ALLUMÉ ALLUMÉ 2 mA
ÉTEINT ÉTEINT ALLUMÉ 1,5 mA
ÉTEINT ÉTEINT ÉTEINT 0,3 mA

Afficher le texte « Makerguides » avec le rétroéclairage et tout le reste allumé consomme 15 mA. Mais si vous éteignez tout (rétroéclairage, écran, driver), la consommation tombe à 0,3 mA ! C’est idéal pour les projets alimentés par batterie.

Conclusions

Dans ce tutoriel, vous avez appris à interfacer un module d’affichage TFT avec un driver ST7735 avec un ESP32. Nous avons utilisé deux bibliothèques différentes, Adafruit_ST7735 et TFT_eSPI, pour dessiner et écrire du texte sur l’écran TFT.

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

Bon bricolage ; )