Afficher la valeur d’un potentiomètre sur ESP32 TFT LCD 3,5 pouces ST7796U
Description :
Ce projet permet de lire la valeur analogique d’un potentiomètre à l’aide d’un microcontrôleur ESP32 ESP-WROOM-32 et de l’afficher en temps réel sur un écran TFT LCD de 3,5 pouces piloté par le contrôleur ST7796U.
Prérequis :
Version IDE :
- Arduino IDE 2.3.7
Bibliothèque :
- Arduino_GFX_Library.h ( version: 1.4.7 par Moon On Our Nation)
Vidéo de démonstration :
Schéma de câblage :

Code :
#include <Arduino.h>
#include <Arduino_GFX_Library.h>
#include <SPI.h>
// ============================================================================
// CONFIGURATION DE L'ÉCRAN (Broches SPI de la carte)
// ============================================================================
#define TFT_BL 27 // Broche du rétroéclairage (Backlight)
#define TFT_SCLK 14 // Horloge SPI partagée (Clock)
#define TFT_MOSI 13 // Sortie données SPI partagée (Master Out Slave In)
#define TFT_MISO 12 // Entrée données SPI partagée (Master In Slave Out)
#define TFT_CS 15 // Sélection de la puce Écran (Chip Select)
#define TFT_DC 2 // Broche Données/Commandes pour l'écran
#define TFT_RST -1 // Broche de Reset (non connectée sur ce modèle, gérée en interne)
// Configuration du bargraphe
#define BAR_X 40
#define BAR_Y 240
#define BAR_W 400
#define BAR_H 30
// Initialisation du bus de données matériel de l'ESP32 pour l'écran
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, TFT_SCLK, TFT_MOSI, TFT_MISO);
// Initialisation du pilote de l'écran ST7796 (Résolution 480x320)
Arduino_GFX *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
const int potPin = 35;
int oldSensorValue = -1; // Pour garder en mémoire la valeur précédente
void setup() {
// Démarrage de la communication série pour le débogage PC
Serial.begin(115200);
delay(500);
// Configuration et activation immédiate du rétroéclairage de l'écran
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
// Initialisation de la bibliothèque d'affichage Arduino_GFX
if (!gfx->begin()) {
Serial.println("Erreur fatale : Impossible d'initialiser l'ecran !");
while (1); // Blocage de sécurité
}
gfx->setRotation(3); // Passage de l'écran en mode Paysage (horizontal)
Serial.println("Ecran LCD configure.");
// Configuration matérielle des broches pour le bus SPI partagé
SPI.begin(TFT_SCLK, TFT_MISO, TFT_MOSI);
// On efface l'écran complet en le mettant en noir
gfx->fillScreen(BLACK);
// Titre
gfx->setTextColor(WHITE);
gfx->setTextSize(3);
gfx->setCursor(40, 10);
gfx->println("Valeur du potentiometre");
// Dessin du contour fixe du bargraphe
gfx->drawRect(BAR_X, BAR_Y, BAR_W, BAR_H, WHITE);
}
void loop() {
int sensorValue = analogRead(potPin);
// Si la valeur a changé, on met à jour l'affichage et le bargraphe
if (sensorValue != oldSensorValue) {
// 1. Affichage de la valeur numérique
// Effacer l'ancienne valeur en l'écrivant en NOIR
gfx->setTextColor(BLACK);
gfx->setTextSize(5);
gfx->setCursor(175, 100);
gfx->println(oldSensorValue);
// Afficher la nouvelle valeur en BLANC
gfx->setTextColor(WHITE);
gfx->setTextSize(5);
gfx->setCursor(175, 100);
gfx->println(sensorValue);
// 2. Gestion du bargraphe
// Convertit la plage 0-4095 de l'ADC en une largeur de pixels pour le bargraphe
int barWidth = map(sensorValue, 0, 4095, 0, BAR_W - 2);
// Dessine la partie remplie (en vert) à l'intérieur du contour
gfx->fillRect(BAR_X + 1, BAR_Y + 1, barWidth, BAR_H - 2, GREEN);
// Efface le reste de la barre (en noir) si la valeur diminue
gfx->fillRect(BAR_X + 1 + barWidth, BAR_Y + 1, (BAR_W - 2) - barWidth, BAR_H - 2, BLACK);
// 3. Mémoriser la valeur actuelle
oldSensorValue = sensorValue;
}
delay(100);
}
