DHT11温湿度センサー:Arduino・ESP32・Picoで使うガイド
DHT11温湿度センサーとは何か、どう動くのか。Arduinoへの配線、DHTライブラリ、サンプルコード、DHT11とDHT22の違い、ESP32とPicoでの使い方、よくある失敗を解説します。
DHT11は、1本のデータ線で温度と相対湿度の両方を読み取れる、青いプラスチックケースの安価なデジタルセンサーです。Arduinoで作る気象ステーション、温室や植物のモニター、子ども部屋の温度計、湿度が上がるとファンを回すスマートホームのプロジェクトなど、ほぼすべてで使われています。アナログセンサーとは違い、電圧を測って計算式をいじる必要はありません。センサーが測定値をそのまま数値で送ってくれます。

DHT11とは?どこで使われる?
このセンサーが測る湿度は相対湿度です。その温度で空気が含める水蒸気の最大量に対して、何パーセント含んでいるかを表します。40〜60%が快適とされ、70%を超えると湿気やカビ、30%を下回ると乾燥した空気を意味します。DHT11はこの値と周囲の温度を約1秒に1回測ります。
- 家庭用の気象ステーション:温度と湿度をLCDやOLEDのディスプレイに表示します。
- 温室や植物のモニター:湿度が下がったら知らせ、土壌水分センサーと組み合わせて水やりをします。
- 湿気やカビの警告:浴室、地下室、クローゼットの湿度が70%を超えたらアラームを鳴らします。
- 自動ファンや除湿機:湿度のしきい値を超えたら、リレーで機器をオンにします。
- データロガー:測定値をSDカードに書き込み、1日のグラフを作ります。
- リモート監視:ESP32を使って、スマートフォンで開けるWebページに値を表示します。
DHT11はどう動く?
ケースの中には2つの測定素子があります。湿度素子は2つの電極の間に湿気を吸う材料をはさんだもので、空気中の湿度が上がると抵抗値が下がります。温度はNTCサーミスタで測ります。温度が上がると抵抗値が下がる小さな抵抗です。センサーの中の小さなマイコンが2つの抵抗値を測り、工場で記録された校正値で補正して、結果をデジタルで送ります。
通信は1本の線で行います。Arduinoがデータ線を少なくとも18ミリ秒LOWにしてセンサーを起こすと、センサーは40ビットのパケットで応答します。内訳は湿度16ビット、温度16ビット、読み取りエラーを見つけるための8ビットのチェックサムです。このタイミングを自分で書く必要はありません。このあとインストールするライブラリがすべて処理してくれます。
仕様:DHT11とDHT22の違い
| 項目 | DHT11 | DHT22 (AM2302) |
|---|---|---|
| 電源電圧 | 3〜5.5 V | 3.3〜6 V |
| 測定中の電流 | 0.5〜2.5 mA | 1〜1.5 mA |
| 温度範囲 | 0〜50 °C | −40〜80 °C |
| 温度の精度 | ±2 °C | ±0.5 °C |
| 湿度範囲 | 20〜90% | 0〜100% |
| 湿度の精度 | ±5% | ±2%(最大±5%) |
| 分解能 | 1 °C / 1% | 0.1 °C / 0.1% |
| 測定頻度 | 1秒に1回 | 2秒に1回 |
| ケースの色 | 青 | 白 |

まとめると、室内の温度と湿度をおおまかに知りたいなら、DHT11で十分で、価格も安いです。屋外、氷点下、または0.5度の差が重要な用途ではDHT22を選んでください。どちらも配線とコードは同じで、コードのセンサーの種類を変えるだけです。
DHT11のピン配置と配線
DHT11には2つの形態があります。基板に抵抗とLEDが付いた3ピンのモジュールと、4本足のセンサー単体です。センサー単体の場合は、格子のある面を手前に向けて、左から右へ足を数えます。
| 信号 | 3ピンモジュール | 4本足センサー | つなぎ先 |
|---|---|---|---|
| 電源 | VCC (+) | 1番の足 | 5V(ESP32とPicoでは3V3) |
| データ | DATA / OUT / S | 2番の足 | デジタルピン(UnoではD2) |
| 未使用 | — | 3番の足 | 接続しない |
| グラウンド | GND (−) | 4番の足 | GND |
DHTライブラリをインストールする
- Arduino IDEでライブラリマネージャを開きます(Arduino IDE 2では左サイドバーの本のアイコン)。
- 検索欄にDHT sensor libraryと入力し、Adafruit製のライブラリをインストールします。
- 依存関係について聞かれたら全てをインストールを選び、Adafruit Unified Sensorも一緒にインストールします。
- 必要なら、「ファイル」>「スケッチ例」> DHT sensor library > DHTtesterにある既製のサンプルを試してみてください。
Arduinoのサンプルコード:温度、湿度、暑さ指数
下のコードは2秒ごとに測定し、読み取りに失敗したときはそれを知らせ、温度と湿度を組み合わせて暑さ指数(体感温度)を計算します。結果を見るには、シリアルモニタを9600 baudで開いてください。
1#include <DHT.h>
2
3#define DHT_PIN 2 // veri pini / data pin
4#define DHT_TYPE DHT11 // DHT22 kullanıyorsan DHT22 yaz / write DHT22 for a DHT22
5
6DHT dht(DHT_PIN, DHT_TYPE);
7
8void setup() {
9 Serial.begin(9600);
10 dht.begin();
11}
12
13void loop() {
14 delay(2000); // ölçümler arası bekleme / wait between readings
15
16 float humidity = dht.readHumidity(); // % bağıl nem / % relative humidity
17 float temperature = dht.readTemperature(); // °C
18
19 if (isnan(humidity) || isnan(temperature)) {
20 Serial.println("Okuma hatası / read error");
21 return;
22 }
23
24 // hissedilen sıcaklık / heat index (°C)
25 float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
26
27 Serial.print("Sicaklik / Temp: ");
28 Serial.print(temperature);
29 Serial.print(" C Nem / Humidity: %");
30 Serial.print(humidity);
31 Serial.print(" Hissedilen / Feels like: ");
32 Serial.print(heatIndex);
33 Serial.println(" C");
34}ESP32でDHT11を使う
ESP32でも同じコードが動きます。DHT_PINをたとえば4に変えるだけです。データ線も3.3 Vのままになるように、センサーはESP32の3V3ピンから給電してください。DHT11はこの電圧で問題なく動作します。データ線は双方向なので、入力専用のGPIO 34〜39はDHTには向いていません。ピンを選ぶときは、ピン配置ツールでESP32のどのピンが安全かを確認してください。Wi-Fi経由で測定値をWebページに表示し、スマートフォンから確認することもできます。
Raspberry Pi PicoでDHT11を使う(MicroPython)
MicroPythonにはDHTセンサー用のdhtモジュールが組み込まれているので、ライブラリをインストールする必要はありません。センサーをPicoの3V3ピン、GND、GP15ピンにつなぎます。
1import dht
2from machine import Pin
3import time
4
5sensor = dht.DHT11(Pin(15)) # GP15 veri pini / data pin (DHT22 için dht.DHT22)
6
7while True:
8 try:
9 sensor.measure()
10 t = sensor.temperature() # °C
11 h = sensor.humidity() # %
12 print("Sicaklik:", t, "C Nem: %", h)
13 except OSError:
14 print("Okuma hatası / read error")
15 time.sleep(2)DHT11を使ったプロジェクトのアイデア
- LCD付きデジタル温度計:値を16x2のディスプレイに表示します。方法はI2C LCDディスプレイの使い方で紹介しています。
- 湿度で制御するファン:湿度が65%を超えたらリレーでファンを回します。配線はリレーモジュールとは?を参照してください。
- 湿気アラーム:しきい値を超えたらブザーを鳴らします。音による通知はブザーとは?で解説しています。
- 温度ロガー:時計モジュールとSDカードで、10分ごとに測定値を保存します。
- Wi-Fi気象ステーション:ESP32で、家のネットワーク上のどの機器からでも開けるページに測定値を公開します。
よくある失敗と直し方
- ずっとNaNや「Failed to read」が出る:データ線がコードとは別のピンにつながっている、プルアップ抵抗がない、コードのセンサーの種類が間違っている(DHT11ではなくDHT22)といった可能性があります。
- 頻繁に読みすぎる:2秒より短い間隔で読むと、センサーは前回の値かエラーを返します。
- 温度が実際より高い:センサーがArduinoの電圧レギュレーターに近すぎるか、日なたにある可能性があります。ボードから数センチメートル離して置いてください。
- 長いケーブルで読み取りが途切れる:数メートルを超えると信号が弱くなります。プルアップを4.7 kΩに下げ、センサーを5 Vで給電し、品質のよいケーブルを使ってください。
- ESP32で不安定になる:センサーを5 Vで給電すると、データ線が5 Vにプルアップされます。3V3から給電し、入力と出力の両方に使えるGPIO(たとえば4)を使ってください。
- すぐに反応すると思ってしまう:湿度の変化を検出するには数秒かかります。DHT11は速い測定用ではなく、室内の監視用に作られています。
ほかにどんなセンサーが使えるか知りたいならArduinoセンサーガイドを、距離を測るならHC-SR04距離センサーを読んでみてください。BlueGraysアプリでは、DHT11とDHT22を使ったステップごとのプロジェクトを、回路図とコード付きで見られます。
よくある質問
DHT11とDHT22、どちらを買うべきですか?
室内の温度と湿度をおおまかに知るなら、DHT11で十分で、価格も安いです。屋外での使用、氷点下の温度、±0.5 °Cの精度が必要ならDHT22を選んでください。コードで変えるのは、センサーの種類をDHT22にすることだけです。
DHT11がNaNや「Failed to read from DHT sensor」を返すのはなぜですか?
よくある原因は、データピンの間違い、プルアップ抵抗の不足、コードのセンサーの種類の間違い、読み取りの頻度が高すぎることです。配線を確認し、センサー単体なら10 kΩの抵抗を入れ、測定の間に2秒待ってください。
DHT11の温度が正しくありません。どうやって校正しますか?
DHT11では±2 °Cの誤差は正常です。信頼できる温度計の横にセンサーを置いて差を記録し、コードで読み取り値にその一定の差を足すか引いてください。センサーが熱くなる部品から離れていることも確認しましょう。
DHT11は3.3 Vで動きますか?
はい、DHT11は3〜5.5 Vで動作します。ESP32やRaspberry Pi Picoのような3.3 Vのボードでは、3V3ピンから給電するのがいちばんです。そうすればデータ線に5 Vがかかることはありません。
DHT11は屋外や水の近くで使えますか?
DHT11は防水ではありません。雨、結露、直射日光はセンサーを傷めたり、誤った値の原因になったりします。屋外では日陰にある通気性のよい箱に入れて使ってください。水温を測るなら、防水のDS18B20のほうが適しています。
1台のArduinoに複数のDHT11をつなげますか?
はい。ただし、センサーごとに別のデータピンが必要で、データ線を共有することはできません。コードではそれぞれに別のDHTオブジェクトを定義します。たとえばDHT dht1(2, DHT11)とDHT dht2(3, DHT11)のようにします。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
DHT11で温度と湿度を測定
部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

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

ESP32温度データロガー(DHT22 + DS1307 RTC + microSD + OLED)
ESP32で日時付きの温度・湿度記録システムを作ります!DHT22で1分ごとに温度と湿度を読み取り、DS1307 RTCから取得した日時とともにmicroSDカードへCSV形式で記録します。OLEDには最新の温度を大きな文字で表示し、湿度のパーセント値、日時、総記録数も表示します。SDカードの/temp_log.csvファイルはExcel、Google Sheets、Pythonのpandasで開いて分析できます。温室の監視、家や部屋の温度管理、実験室のデータ収集、食品の保管環境や養蜂箱の監視に適しています。

ドットマトリクス時計・カレンダー・気象ステーション(MAX7219、DS1307)
机や壁に置いて、時刻、日付、室内の温湿度を順番に表示する、文字がスクロールする表示板です。8x32のLEDディスプレイには、まず摂氏と華氏の温度、次に湿度、そして2つの点が1秒ごとに点滅する時計が表示されます。分が変わると、曜日と日付がスクロール表示されます。時計モジュールが時刻を保持し、DHT22センサーが温度と湿度を測定します。

NTCと2x16 LCDディスプレイで温度を測定
小さなビーズのようなセンサーで周囲の温度を測ります。NTCというこの部品は、温まるほど電気が流れやすくなります。Arduinoがその変化を読み取り、数式で摂氏温度に変換して、2行のLCDディスプレイに0.5秒ごとに表示します。手のひらでセンサーを温めて、数値が上がる様子を見るのも楽しみの1つです。

ESP32 HTTPClient+天気API(LCD付き)
このプロジェクトでは、ESP32でHTTPClient.hを使い、インターネット経由で天気API(wttr.in)をREST APIとして呼び出します。返されたJSONレスポンスをArduinoJson v7で解析し、都市名、気温、湿度、天気、風の情報をI2C LCDディスプレイにトルコ語と英語で表示します。wttr.inは無料で、APIキーも不要です。都市名を入力するだけで、その都市の現在の天気を取得できます。30分ごとに自動更新し、表示画面ごとに異なるLEDの光り方で状態を知らせます。

スマート水やりステーション
旅行中も植物が枯れないよう、自動で水やりをするシステムです。土壌水分センサーで土の湿り具合を測定し、乾燥するとArduinoが給水ポンプを数秒間動かして、青いライトを点灯させます。水分が適切なときは緑のライトが点灯します。土がひどく乾燥すると、赤いライトが点滅し、ブザーが鳴って知らせます。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

