#117中級

ESP32 DHT22温湿度計(LCDディスプレイ付き)

DHT22センサーで周囲の温度と湿度を測定し、16x2 I2C LCDにリアルタイムで表示するプロジェクトです。Adafruit DHTライブラリを使い、1本の信号線を使うプロトコルでセンサーからデータを読み取ります。IoT気象観測装置やスマートホームの自動化、温室の環境監視システムの基礎となります。ESP32のGPIO 4ピンを介してDHT22と通信します。

4.8(38)
55 完了
ESP32 DHT22温湿度計(LCDディスプレイ付き)
部屋の温度や湿度を知りたいときに役立つ、小さな温湿度計です。DHT22センサーで空気の状態を測定し、ESP32が2秒ごとに温度と湿度を小数点以下1桁までLCDに表示します。センサーの値を読み取れない場合もディスプレイで知らせます。植物を育てるスペースの環境管理や、家庭用の気象観測装置などの基礎となるプロジェクトです。

動画

回路図

ESP32 DHT22温湿度計(LCDディスプレイ付き) - Circuit

ソースコード

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 DHT22 Temperature and Humidity (with LCD Display)
4// ─────────────────────────────────────────
5// Reads temperature and humidity from the DHT22 every 2 s and shows them
6// on a 16x2 I2C LCD. If a reading fails, the screen shows a wiring and
7// pull-up warning.
8//
9// Pins:
10//   GPIO 4  -> DHT22 DATA
11//   10k pull-up between DATA and VCC
12//   GPIO 21 -> LCD SDA, GPIO 22 -> LCD SCL
13//   DHT22 VCC -> 3V3, LCD VCC -> 5V (VIN)
14//   All GNDs common
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <DHT.h>
19
20// Pin definitions
21const int DHT_PIN = 4;
22#define DHT_TYPE DHT22
23
24DHT dht(DHT_PIN, DHT_TYPE);
25
26// LCD addr 0x27 or 0x3F
27LiquidCrystal_I2C lcd(0x27, 16, 2);
28
29// DHT22 needs at least 2 s between reads
30const unsigned long READ_INTERVAL = 2000;
31unsigned long lastRead = 0;
32
33void setup() {
34  // DevKit V1 default I2C pins
35  Wire.begin(21, 22);
36  lcd.init();
37  lcd.backlight();
38
39  // Splash screen 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  // Read every 2 s without 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 = wiring/pullup issue
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      // Temperature
68      lcd.setCursor(0, 0);
69      lcd.print("Sicaklik:");
70      lcd.print(t, 1);
71      lcd.print("C");
72      // Humidity, DHT22 gives decimals
73      lcd.setCursor(0, 1);
74      lcd.print("Nem     :");
75      lcd.print(h, 1);
76      lcd.print("%");
77    }
78  }
79}
80

よくある質問

DHT22とDHT11の違いは何ですか?▾

DHT22は精度が高く(温度±0.5 °C、湿度±2~5%)、測定範囲も広く(−40~80 °C)、分解能は0.1です。DHT11は安価ですが、温度精度は±2 °Cで、測定値は整数単位に限られます。

10 kΩのプルアップ抵抗は必要ですか?▾

DHT22センサー単体では、データラインに10 kΩのプルアップ抵抗が必要です。基板に実装された3ピンのモジュールには、通常この抵抗が含まれています。

LCDは5 V、ESP32は3.3 Vですが、一緒に使えますか?▾

I2C LCDモジュールは5 Vで駆動すると、より鮮明に表示できます。5 Vで駆動するモジュールのSDA/SCLラインにあるプルアップ抵抗が5 Vに接続されている場合は、レベル変換器を使うのが最も安全です。直接接続する例も多くありますが、ESP32に無理をさせることになります。

データをインターネット経由で送信できますか?▾

はい。ESP32のWi-Fiを使って測定値をThingSpeakやBlynk、自分のサーバーに送信し、スマートフォンでグラフを確認できます。