dht22.ino

ESP32-C6 · Fichier : dht22.ino · Langage : Arduino · Usage : Lire température et humidité avec un DHT22

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-C6 (RISC-V 160 MHz, Wi-Fi 6 + BLE 5 + 802.15.4) type DevKitC-1, 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 récent), choisissez « ESP32C6 Dev Module » puis Téléverser ; pour Zigbee/Thread utilisez ESP-IDF (idf.py set-target esp32c6).

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);
}

← Retour à la fiche