Peti-dev
API & Hardware Dev Notes
記事一覧に戻る
電子工作

ESP32 と DHT22 で温湿度を取得してシリアル出力する

ESP32-WROOM-32 と温湿度センサー DHT22 を接続し、Arduino IDE 2.x 環境で正確な温湿度データを取得する配線とスケッチ。

ESP32DHT22ArduinoIoTセンサー
動作検証・実行環境
ボードESP32-WROOM-32D
センサーDHT22 (AM2302)
開発環境Arduino IDE 2.3.2
ESP32 Arduino Corev3.0.4
ライブラリDHT sensor library by Adafruit v1.4.6

概要・目的

温湿度センサー DHT22 (AM2302) を ESP32 に接続し、2秒間隔で温度(℃)と湿度(%)を読み取ってシリアルモニタに出力します。

DHT11 より高精度(温度分解能0.1℃、湿度分解能0.1%)で、測定範囲も広いのが特徴です。

配線図 / ピンアサイン

DHT22 ピン 接続先 (ESP32) 備考
1 (VCC) 3.3V (または 5V) 3.3V駆動で動作可能
2 (DATA) GPIO 4 10kΩ抵抗で3.3Vにプルアップ
3 (NC) 未接続 なし
4 (GND) GND -

※ センサーモジュール基板タイプ(基板上に抵抗実装済み)の場合はプルアップ抵抗の追加は不要です。

実装コード (Arduino / C++)

#include "DHT.h"

#define DHTPIN 4     // DHT22のDATAピンを接続したGPIO
#define DHTTYPE DHT22   // DHT 22 (AM2302)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  Serial.println(F("DHT22 Sensor Test Starting..."));
  dht.begin();
}

void loop() {
  // 読み取り間隔(DHT22は最小2秒必要)
  delay(2000);

  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // 読み取り失敗チェック
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print(F("Humidity: "));
  Serial.print(humidity, 1);
  Serial.print(F("%  Temperature: "));
  Serial.print(temperature, 1);
  Serial.println(F("°C"));
}

実行結果

DHT22 Sensor Test Starting...
Humidity: 54.2%  Temperature: 25.4°C
Humidity: 54.1%  Temperature: 25.4°C
Humidity: 53.9%  Temperature: 25.5°C

ハマりどころ・注意点

  1. 読み出し間隔の制約
    • DHT22 はデータ更新に約2秒かかるため、loop() 内で 2000ms 未満の間隔で readTemperature() を呼ぶと前回と同じ値が返るか、nan になります。
  2. ESP32 Core 3.x 系の互換性
    • Adafruit DHT ライブラリが古いバージョン(1.4.3以下など)の場合、ESP32 Core v3.0+ でコンパイルエラーになることがあります。必ず v1.4.6 以降に更新してください。