Skip to Content

Interface écran TFT ST7789 avec ESP32

Interface écran TFT ST7789 avec ESP32

Dans ce tutoriel, vous apprendrez comment interfacer un module d’affichage TFT 1,3″ 240×240 avec un driver d’affichage ST7789 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 ST7789.

Pièces requises

Vous aurez besoin d’un ESP32 et d’un écran TFT 1,3 pouces avec une résolution de 240×240 pixels et un circuit driver ST7789. Quelques câbles et une breadboard peuvent aussi être utiles.

Écran TFT 1,3″ ST7789

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,3″ ST7789

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

Front and Back of 1.3" TFT ST7789  Display Module
Devant et dos du module d’affichage TFT 1,3″ ST7789 (source
)

Le module utilise le ST7789 driver et est contrôlé via une interface SPI 4 fils. La tension de fonctionnement est de 3,3V et l’écran consomme environ 30mA au maximum. Notez qu’il existe de nombreuses versions différentes de ce type d’écran TFT.

Certains modules d’affichage TFT ont un logic level convertisseur qui permet de connecter le module à un Arduino UNO fonctionnant en 5V. 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,3V.

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 ST7735S au lieu du ST7789. La configuration de ce tutoriel est pour les écrans avec le driver ST7789 et ne fonctionnera pas avec d’autres.

Connexion d’un écran TFT 1,8″ ST7735 avec ESP32

Connecter l’écran TFT à l’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, ces broches devraient être étiquetées MOSI et SCLK.

Le schéma de câblage suivant montre comment connecter le module d’affichage TFT 1,3″ ST7789 à un WEMOS Lolin32 lite :

Connecting TFT ST7789 Display with WEMOS Lolin ESP32 lite
Connexion de l’écran TFT ST7789 avec WEMOS Lolin ESP32 lite

Voici également les connexions requises sous forme de tableau. Notez que ce module d’affichage n’a pas de sélection de puce (CS) et donc aucune broche n’est nécessaire pour cela.

AffichageESP32
RST16
DC17
SDA / MOSI23
SCL / SCLK18
BKL/BL22
GNDGND
VCC3,3V

Assurez-vous de connecter le VCC de l’écran au 3,3V ! Vous devriez aussi 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 TFT_eSPI

Dans cette section, je vous montre comment utiliser la TFT_eSPI library pour contrôler l’écran. Pour installer cette bibliothèque, 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 How to configure TFT_eSPI Library for TFT display tutoriel.

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 :

// 1.3" TFT Display (GMT130 V.10), 
// no CS pin
// 240x240, ST7789
// tft_setup.h
#define ST7789_DRIVER

#define TFT_WIDTH  240
#define TFT_HEIGHT 240

#define TFT_RGB_ORDER TFT_BGR

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


#define LOAD_GLCD   
#define LOAD_FONT2  
#define LOAD_FONT4  
#define LOAD_FONT6  
#define LOAD_FONT7  
#define LOAD_FONT8  
#define LOAD_GFXFF
#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();

const int cw = tft.width()/2;
const int ch = tft.height()/2;
const int s = min(cw/4,ch/4);

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

  tft.setTextFont(1);
  tft.setTextSize(2);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextDatum(CC_DATUM);
  tft.drawString("Makerguides", ch, cw+s);

  tft.fillCircle(ch, cw/2+s/2, s/2, TFT_RED);
  tft.fillRect(1.5*ch-s, cw/2, s, s, TFT_GREEN);
  tft.fillTriangle(ch/2, cw/2, ch/2+s, cw/2, ch/2, cw/2+s, TFT_BLUE);
}

void loop() { }

Notez que tft_setup.h est inclus en haut du programme. Le code lui-même est facile à comprendre. Nous créons un objet TFT_eSPI et des constantes pour le centre (cw, ch) ainsi que la taille s des objets à dessiner.

Dans la fonction setup, nous initialisons l’écran TFT, remplissons l’écran en noir et le mettons en mode portrait.

Ensuite, nous définissons la police, sa taille, sa couleur et son alignement, puis écrivons le texte « Makerguides » à l’écran. Dans les trois lignes suivantes, nous dessinons le cercle rouge, le carré vert et le triangle bleu. Le rendu sur votre écran TFT devrait ressembler à ceci :

Sortie du code test sur TFT

Sinon, il y a un problème avec les réglages dans tft_test.ino ou avec le câblage de l’écran TFT. Consultez le How to configure TFT_eSPI Library for TFT display tutoriel pour voir quelles autres options sont disponibles et ce que vous pouvez essayer pour résoudre le problème.

Conclusions

Dans ce tutoriel, vous avez appris comment interfacer un module d’affichage TFT avec un driver ST7789 avec un ESP32.

J’ai utilisé la TFT_eSPI Library pour contrôler l’écran. J’ai aussi essayé la Adafruit-ST7735 Library mais je n’ai pas réussi à la faire fonctionner. D’autres ont rencontré le même problème et ont réussi avec la ST7789_AVR library à la place. Cependant, la ST7789_AVR library ne fonctionne qu’avec des cartes AVR mais pas avec un ESP32, par exemple.

Si vous avez des difficultés avec la bibliothèque TFT_eSPI, notre How to configure TFT_eSPI Library for TFT display pourrait vous aider.

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

Bon bricolage ; )