Skip to Content

Interface de l’écran GMT020-02 avec ESP32

Interface de l’écran GMT020-02 avec ESP32

Dans ce tutoriel, vous apprendrez à interfacer et contrôler l’écran TFT GMT020-02 avec un ESP32. L’écran GMT020-02 utilise le circuit intégré pilote ST7789, ce qui rend ce tutoriel utile également pour d’autres écrans TFT utilisant le même pilote.

Le GMT020-02 est un petit écran TFT 2,0″ avec une résolution de 240×320 pixels et 262K couleurs, que vous pouvez trouver à bas prix sur AliExpress. Cependant, la documentation est limitée et parfois même trompeuse, ce qui complique inutilement l’utilisation de l’écran. J’espère que ce petit tutoriel vous sera utile.

Caractéristiques de l’écran GMT020-02

Le GMT020-02 version 1.1 est un module d’affichage avec une interface SPI intégrée. L’image ci-dessous montre le devant et le dos du module.

Front and Back of GMT020-02 Vers 1.1 Display
Face avant et arrière de l’écran GMT020-02 version 1.1

Vous pouvez le trouver sur AliExpress, où il est indiqué qu’il utilise un circuit intégré pilote ST7735 et qu’il est compatible Arduino.

GMT020-02 sur AliExpress

Circuit intégré pilote pour l’écran GMT020-02

Ceci est trompeur car la fiche technique indique que le circuit intégré pilote est un ST7789 et que le module fonctionne en 3,3 V. Selon le schéma, il n’y a pas de convertisseur de niveau sur le module, ce qui rend risqué de le connecter à un Arduino UNO avec une logique 5 V. Les fiches techniques du module GMT020-02 et du ST7789 sont liées ci-dessous.

Rétroéclairage de l’écran GMT020-02

Un mot aussi sur le rétroéclairage. Le module GMT020-02 possède un rétroéclairage mais il semble câblé en dur (voir LED+ et LED- dans le schéma ci-dessous) et ne peut donc pas être contrôlé par logiciel. Vous remarquerez qu’il n’y a pas non plus de broche BLK ou LED, qui permettrait de contrôler le rétroéclairage de manière externe.

Schematics for Backlight LED
Schéma du rétroéclairage LED (source)

La seule solution serait de couper complètement l’alimentation du module. Mais comme la LED du rétroéclairage consomme déjà 60 mA, vous ne pouvez pas fournir le VCC directement depuis une sortie GPIO ! Vous devrez utiliser un transistor/MOSFET pour commuter l’alimentation (VCC) !

Interface de communication de l’écran GMT020-02

Au fait, les broches IM0, IM1 et IM2 dans le schéma ci-dessus servent à sélectionner l’interface de communication (SPI ou parallèle 8 bits). D’après le tableau ci-dessous et le schéma, on voit que le module est câblé en dur pour utiliser le SPI :

Interface table for GMT020-02
Tableau des interfaces pour GMT020-02 (source)

Connexion de l’écran GMT020-02 avec ESP32

Connecter le GMT020-02 à un ESP32 est simple, mais le marquage des broches sur le GMT020-02 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 !

Le schéma de câblage suivant vous montre comment connecter le GMT020-02 à un WEMOS Lolin32 lite :

Connexion du GMT020-02 avec WEMOS Lolin ESP32 lite

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

ÉcranESP32
CS / SS5
RST17
DC16
SDA / MOSI23
SCL / SCLK18
GNDGND
VCC3.3V

Selon l’ESP32 et la carte de développement que vous utilisez, ces broches peuvent varier. Vous devez utiliser les broches pour le SPI matériel. 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 / SCK: ");
  Serial.println(SCK);
  Serial.print("CS / SS: ");
  Serial.println(SS);  
}

void loop() { }

Il affiche les broches nécessaires pour le SPI matériel. Les autres broches peuvent être choisies librement.

Code de test pour l’écran GMT020-02

Nous allons utiliser la Adafruit-ST7735 Library pour écrire et dessiner sur l’écran GMT020-02. 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 proposera 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 » sur l’écran :

#include <Adafruit_GFX.h>      
#include <Adafruit_ST7789.h>   

// WEMOS LOLIN32 lite
#define TFT_CS    5 
#define TFT_RST   17
#define TFT_DC    16
#define TFT_MOSI  23   // SDA, HW MOSI
#define TFT_SCLK  18   // SCL, HW SCLK
// #define TFT_MISO 19  // not used

//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); // Hardware SPI

void setup() {
  tft.init(240, 320);
  tft.setRotation(1);          
  tft.fillScreen(ST77XX_BLACK);

  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(3);
  tft.setCursor(50, 100);
  tft.println("Makerguides");
}

void loop() {
}

Si vous avez connecté l’écran aux broches SPI matériel correctes de votre ESP32, vous n’avez en fait pas besoin de définir TFT_MOSI et TFT_SCLK et pouvez utiliser le constructeur suivant (comme dans le code ci-dessus) :

Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

Le SPI matériel est plus rapide, mais si vous rencontrez des problèmes, vous pouvez essayer le SPI logiciel en définissant vos broches TFT_MOSI et TFT_SCLK et en les utilisant dans le constructeur.

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

Dans tous les cas, l’affichage devrait ressembler à ceci :

Output on GMT020-02 display
Affichage sur l’écran GMT020-02

Si cela fonctionne, vous pouvez ensuite exécuter le code graphicstest_st7789 fourni avec la Adafruit-ST7735 Library. Assurez-vous simplement de sélectionner le bon écran dans le code et d’adapter les broches à votre câblage :

// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable. 

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

// OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
// tradeoff being that performance is not as fast as hardware SPI above.

//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
void setup(void) {
  Serial.begin(9600);
  Serial.print(F("Hello! ST77xx TFT Test"));

  // Use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
  // tft.init(240, 240);           // Init ST7789 240x240

  // OR use this initializer (uncomment) if using a 1.69" 280x240 TFT:
  //tft.init(240, 280);           // Init ST7789 280x240

  // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
  tft.init(240, 320);           // Init ST7789 320x240

  // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
  //tft.init(135, 240);           // Init ST7789 240x135
  
  // OR use this initializer (uncomment) if using a 1.47" 172x320 TFT:
  //tft.init(172, 320);           // Init ST7789 172x320

  // OR use this initializer (uncomment) if using a 1.9" 170x320 TFT:
  //tft.init(170, 320);           // Init ST7789 170x320

Écran GMT020-02 avec la bibliothèque TFT_eSPI

Si vous souhaitez utiliser la TFT_eSPI library au lieu de la Adafruit-ST7735 Library, c’est aussi possible. Voici le fichier tft_setup.h avec la configuration requise (encore une fois pour un WEMOS Lolin32 lite) :

#define ST7789_DRIVER
   
#define TFT_WIDTH  240
#define TFT_HEIGHT 320
#define TFT_RGB_ORDER TFT_BGR

// WEMOS Lolin32 lite
#define TFT_CS    5   
#define TFT_RST   17  
#define TFT_DC    16  
#define TFT_MOSI  23  // SDA // HW MOSI
#define TFT_SCLK  18  // SCL // HW SCLK
// #define TFT_MISO 19  // not used

#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  40000000
#define SPI_READ_FREQUENCY  20000000

et voici un exemple de code qui, comme précédemment, affiche le texte « Makerguides » sur l’écran :

#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(100, 100, 2);  
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.println("Makerguides");
}

void loop() { }

N’oubliez pas que le fichier tft_setup.h doit faire partie du dossier du projet. Pour plus de détails, consultez le tutoriel How to configure TFT_eSPI Library for TFT display.

Conclusion

Dans ce tutoriel, vous avez appris à interfacer et contrôler l’écran TFT GMT020-02 avec un ESP32.

Pour d’autres écrans TFT, consultez les tutoriels Interface TFT ILI9341 Touch Display with ESP32,
Interface TFT ST7735 Display with ESP32, Digital Clock on CrowPanel 1.28″ Round Display et CrowPanel 2.8″ ESP32 Display : Easy Setup Guide.

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

Bon bricolage ; )