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