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

ソースコード
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、自分のサーバーに送信し、スマートフォンでグラフを確認できます。
