ESP32 DHT22 Température et humidité (avec écran LCD)
Il s'agit d'un projet permettant de mesurer la température ambiante et le taux d'humidité à l'aide d'un capteur DHT22 et d'afficher ces données en temps réel sur un écran LCD I2C 16x2. Les données du capteur sont lues à l'aide du protocole one-wire grâce à la bibliothèque Adafruit DHT. Ce projet constitue la base des stations météo IoT, de la domotique ou des systèmes de surveillance de l'environnement dans les serres.

Vidéo
Schéma du circuit

Code source
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 DHT22 Température et humidité (avec écran LCD)
4// ─────────────────────────────────────────
5// Lit la température et l'humidité du DHT22 toutes les 2 s et les affiche
6// sur un LCD I2C 16x2. Si une lecture échoue, l'écran affiche un
7// avertissement de câblage et de pull-up.
8//
9// Broches :
10// GPIO 4 -> DATA du DHT22
11// Pull-up de 10k entre DATA et VCC
12// GPIO 21 -> SDA du LCD, GPIO 22 -> SCL du LCD
13// DHT22 VCC -> 3V3, VCC du LCD -> 5V (VIN)
14// Tous les GND en commun
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <DHT.h>
19
20// Définitions des broches
21const int DHT_PIN = 4;
22#define DHT_TYPE DHT22
23
24DHT dht(DHT_PIN, DHT_TYPE);
25
26// Adresse du LCD 0x27 ou 0x3F
27LiquidCrystal_I2C lcd(0x27, 16, 2);
28
29// Le DHT22 a besoin d'au moins 2 s entre deux lectures
30const unsigned long READ_INTERVAL = 2000;
31unsigned long lastRead = 0;
32
33void setup() {
34 // Broches I2C par défaut du DevKit V1
35 Wire.begin(21, 22);
36 lcd.init();
37 lcd.backlight();
38
39 // Écran d'accueil 3 s
40 lcd.setCursor(3, 0);
41 lcd.print("BlueGrays");
42 lcd.setCursor(3, 1);
43 lcd.print("DHT22 v1.0");
44 delay(3000);
45 lcd.clear();
46
47 dht.begin();
48}
49
50void loop() {
51 // Lire toutes les 2 s sans delay()
52 if (millis() - lastRead >= READ_INTERVAL) {
53 lastRead = millis();
54
55 float h = dht.readHumidity();
56 float t = dht.readTemperature();
57
58 lcd.clear();
59
60 // NaN = problème de câblage/pull-up
61 if (isnan(h) || isnan(t)) {
62 lcd.setCursor(0, 0);
63 lcd.print("Sensor okunamadi");
64 lcd.setCursor(0, 1);
65 lcd.print("Kablo+10k pullup");
66 } else {
67 // Température
68 lcd.setCursor(0, 0);
69 lcd.print("Sicaklik:");
70 lcd.print(t, 1);
71 lcd.print("C");
72 // Humidité, le DHT22 donne des décimales
73 lcd.setCursor(0, 1);
74 lcd.print("Nem :");
75 lcd.print(h, 1);
76 lcd.print("%");
77 }
78 }
79}
80FAQ
Quelle est la différence entre le DHT22 et le DHT11 ?▾
Le DHT22 est plus précis (±0,5 °C, ±2 à 5 % d'humidité), mesure sur une plage plus large (de −40 à 80 °C) et offre une résolution de 0,1. Le DHT11 est moins cher, mais il est limité à une précision de ±2 °C et à une résolution en nombres entiers.
Une résistance de pull-up de 10 kΩ est-elle nécessaire ?▾
Le capteur DHT22 nu nécessite une résistance de pull-up de 10 kΩ pour la ligne de données. Sur les modules à 3 broches montés sur carte, cette résistance est généralement déjà présente.
LCD 5 V, ESP32 3,3 V : sont-ils compatibles ?▾
Les modules LCD I2C offrent un affichage plus net à 5 V. Si les résistances de pull-up des lignes SDA/SCL d'un module alimenté en 5 V sont connectées à 5 V, l'utilisation d'un convertisseur de niveau est la solution la plus sûre ; bien que beaucoup de gens procèdent à une connexion directe, cela pousse l'ESP32 à ses limites.
Puis-je envoyer ces données sur Internet ?▾
Oui, grâce au Wi-Fi de l'ESP32, tu peux envoyer les mesures vers ThingSpeak, Blynk ou ton propre serveur, et consulter les graphiques depuis ton téléphone.
