dht22.ino
Le DHT22 fournit température et humidité sur un seul fil : la bibliothèque Adafruit décode les trames 40 bits, et le script ajoute le point de rosée. La cadence est volontairement de 2 s, maximum du capteur.
Matériel requis
Une carte ESP32-S3 (double cœur Xtensa avec instructions vectorielles, Wi-Fi + BLE 5, USB natif) type DevKitC-1, XIAO ou T-Display-S3, alimentée par USB. 1 DHT22 (module 3 broches avec résistance de pull-up intégrée) ou DHT22 nu + 10 kΩ.
Branchement
VDD 3,3 V, DATA sur GPIO4 avec pull-up 10 kΩ vers 3,3 V, GND. Le DHT11 fonctionne aussi (changer DHTTYPE).
Fonctionnement
readTemperature/readHumidity déclenchent une acquisition complète (start bit + 40 bits timedés). Le capteur étant lent, on saute les tours de loop jusqu'à 2 s ; les NaN signalent une trame perdue. Dans l'Arduino IDE (paquet esp32), choisissez « ESP32S3 Dev Module », activez « USB CDC On Boot », puis Téléverser. Beaucoup de cartes placent un WS2812 sur GPIO48.
Pour aller plus loin
Afficher sur l'OLED du sketch suivant, ou publier les valeurs en BLE/Wi-Fi vers un tableau de bord.
dht22.ino
// DHT22 sur GPIO4 — bibliothèque « DHT sensor library » (Adafruit).
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned long precedent = 0;
void setup() {
Serial.begin(115200);
dht.begin();
Serial.println("DHT22 pret (2 s entre mesures)");
}
void loop() {
if (millis() - precedent < 2000) return; // le DHT22 parle au mieux à 0,5 Hz
precedent = millis();
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("Echec de lecture : cabling/alimentation ?");
return;
}
float dew = 243.04 * (17.625 * t / (t + 243.04) + log(h / 100.0))
/ (17.625 - (17.625 * t / (t + 243.04) + log(h / 100.0)));
Serial.printf("T=%.1f C HR=%.1f %% point de rosee=%.1f C\n", t, h, dew);
}