Station météo ESP32 — DHT11, LCD1602 et bouton de rétroéclairage

T.Giberné10 juin 2026
ESP32ElectroniqueDevlog

Après mon projet de barrière automatique sur Arduino, j’ai réalisé une petite station météo avec un ESP32.

L’objectif était simple : mesurer la température et l’humidité d’une pièce avec un DHT11, puis afficher les valeurs sur un écran LCD1602. J’ai ensuite fait évoluer le montage en ajoutant un bouton pour contrôler le rétroéclairage.

Composants utilisés

  • ESP32 NodeMCU-32S
  • Capteur DHT11
  • Écran LCD1602 à 16 broches
  • Potentiomètre 10 kΩ pour le contraste
  • Bouton poussoir
  • Transistor NPN 2N2222A
  • Résistances
  • Breadboards et câbles Dupont

Les deux photos montrent le même écran LCD1602. La différence de couleur vient uniquement de l’éclairage, de l’angle de prise de vue et du rendu de la photo.

Première version — DHT11 et écran LCD

La première version mesure :

  • la température ;
  • l’humidité ;

Les données sont actualisées toutes les trois secondes.

L’écran alterne entre deux affichages :

  • température et humidité ;
  • température ressentie et statut FROID, OK ou CHAUD.

Le programme vérifie également que les données reçues sont valides avant de les afficher.

Deuxième version — Ajout du bouton

La deuxième version conserve le même fonctionnement, mais ajoute :

  • un bouton ON/OFF ;
  • le contrôle du rétroéclairage ;
  • des icônes personnalisées pour la température et l’humidité ;
  • un statut d’humidité : DRY, OPTIMAL ou WET.

Le bouton n’éteint pas la station. Il coupe uniquement le rétroéclairage : le capteur et l’ESP32 continuent de fonctionner.

Branchement principal

https://app.cirkitdesigner.com/project/293c2e20-7225-45bd-baa3-7935f3be398c

DHT11

  • VCC → 3,3 V
  • DATA → GPIO 4
  • GND → GND

LCD1602

  • VSS → GND
  • VDD → 5 V
  • V0 → potentiomètre central
  • RS → GPIO 13
  • RW → GND
  • E → GPIO 14
  • D0 → non connecté
  • D1 → non connecté
  • D2 → non connecté
  • D3 → non connecté
  • D4 → GPIO 27
  • D5 → GPIO 26
  • D6 → GPIO 25
  • D7 → GPIO 33
  • A → 5 V via 220 Ω
  • K → collecteur transistor

Les broches D0 à D3 ne sont pas utilisées. Le mode 4 bits économise quatre GPIO sans différence visible pour ce type d’affichage.

Potentiomètre 10 kΩ

  • Patte extérieure → 5 V
  • Patte centrale → V0 LCD
  • Patte extérieure → GND

Le potentiomètre de 10 kΩ règle le contraste de l’écran.

Bouton

  • Patte 1 → GPIO 23
  • Patte opposée → GND

Transistor 2N2222A

  • Base → GPIO 32 via 1 kΩ
  • Collecteur → K LCD
  • Émetteur → GND

Bouton et rétroéclairage

  • bouton entre le GPIO 23 et GND ;
  • GPIO 32 connecté à la base du transistor via une résistance ;
  • transistor utilisé pour commander le rétroéclairage.

Le transistor joue le rôle d’un interrupteur électronique. Le GPIO envoie seulement un signal de commande et ne fournit pas directement le courant du rétroéclairage.

Lecture du capteur

float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
   Serial.println("[DHT11] Erreur de lecture");
   return; 
   }

isnan() signifie is Not a Number. Cette vérification permet d’ignorer une lecture incorrecte plutôt que d’afficher une valeur incohérente.

Gestion du temps avec millis()

if (maintenant - timerLecture >= 3000) {  
   timerLecture = maintenant;  lireCapteurs();}

J’utilise millis() plutôt qu’un delay(3000) dans la boucle principale.

Cela permet à l’ESP32 de continuer à surveiller le bouton pendant qu’il attend la prochaine lecture du DHT11.

Gestion du bouton

Le bouton utilise INPUT_PULLUP, c’est-à-dire la résistance de tirage interne de l’ESP32.

Sa logique est donc inversée :

  • bouton relâché : HIGH ;
  • bouton appuyé : LOW.
if (  etatPrecedent == HIGH &&  etatActuel == LOW &&  maintenant - dernierAppui > 200) {
   backlightOn = !backlightOn;
   }

Le délai de 200 ms sert d’anti-rebond. Un bouton mécanique peut produire plusieurs petits contacts lors d’un seul appui.

Difficultés rencontrées

Écran allumé mais vide

Le problème venait parfois du contraste, et non du code. Il fallait ajuster le potentiomètre.

Bouton détecté plusieurs fois

Sans anti-rebond, un seul appui pouvait allumer puis éteindre immédiatement le rétroéclairage.

Commande du rétroéclairage

Le rétroéclairage consomme plus qu’un simple signal logique. J’ai donc utilisé un transistor au lieu de le commander directement depuis le GPIO.

Ce que j’ai appris

Ce projet m’a permis de pratiquer :

  • la lecture d’un capteur numérique ;
  • la validation des mesures avec isnan() ;
  • le pilotage d’un LCD1602 en mode 4 bits ;
  • la création de caractères personnalisés ;
  • l’anti-rebond logiciel ;
  • l’utilisation d’un transistor comme interrupteur.

Résultat

La station affiche en continu la température et l’humidité d’une pièce.

La première version valide la chaîne complète capteur → traitement → affichage. La seconde ajoute une interaction physique et une meilleure présentation sans modifier le fonctionnement principal.

Les prochaines évolutions prévues sont le remplacement du DHT11 par un DHT22, l’ajout d’un BMP280 et la création d’un dashboard Wi-Fi.