DHT22で温湿度を取得してみる‼(ESP32編)
こんにちは‼
今回はDHT22という、温湿度を簡単に取得できる定番センサーをご紹介したいと思います。
このDHTはシリーズは、主に2種類あり、DHT11とDHT22があります。
それぞれの性能を比較してみましょう‼
| 項目 | DHT11 | DHT22 | 
| 温度測定範囲 | -20~+60℃ | -40.0~+80.0℃ | 
| 温度精度 | ±2℃ | ±0.5℃ | 
| 湿度測定範囲 | 5~95% | 0~99% | 
| 湿度精度 | ±5% | ±2% | 
| 電源供給 | 0.5~2.5mA | 1~1.5mA | 
| サンプリング期間 | 1秒 | 2秒 | 
| 価格 | 約300円 | 約700円 | 
※価格は大よその相場です。購入する場所や、購入量によって結構変わってきますので、参考程に。
DHT11よりも22の方が高性能ですが、その分値段も上がりますので、用途によって使い分けると良いですね♪
ちなみにDHT22の方は小数点第一位まで測定可能です。
②「部品」
・DHT22
電子工作ステーション 600円(送料無料)
・ESP-WROOM-32

電子工作ステーション 1100円(送料無料)(30pinモデル)
秋月電子 1230円+送料(38Pinモデル)
・通信用マイクロUSBケーブルタイプB (家に無ければ)
ESP-WROOM-32とパソコンを繋ぐためのケーブルです。
スマホ用充電専用タイプだと使えないのでご注意ください。

・ジャンパーワイヤー(メス・メス)
電子工作ステーション 1セット(10本)100円+送料(500円以上で無料)
秋月電子 10本330円+送料
③「配線図」
| DHT22 | ESP-WROOM-32 | 
| DAT | 2 | 
| VCC | VIN | 
| GND | GNT | 
センサーのDATpinと、ESP32のデジタルピン2番を繋ぎ、VCCとVINを繋ぎ、GNDを繋いで完了‼
プルアップ抵抗は、モジュールに付いているかと思うので、必要ないかと思います。
※プルアップ抵抗とは ➡ 参考
※DHT11も同じ回路、ほぼ同じプログラムで動きます。
④「開発環境」
まず、Arduino IDEにESP-WROOM-32を使えるようにしましょう‼
やり方はこちら⇩(既に使えるようにしている方は不要です)
Arduino IDEでESP-WROOM-02(ESP8266)とESP-WROOM-32を使えるようにする!(Windows10)
次に、DHTセンサーのライブラリーを入れます‼
Arduino IDEを開き、ツール⇒ライブラリー管理を選択、
「DHT sensor library」を検索しインストールします。
これで準備完了‼
後はプログラミング‼
⑤「プログラミング」
Arduino IDEを開き、ファイル➡スケッチ例➡「DHT sensor library」➡「DHT_Unified_Sensor」をクリックします‼
そうするとコード例が出てくるので、「 Serial.begin(9000);」を 「Serial.begin(115200);」に変え、ビルド開始‼
一応コード例貼っておいきます⇩
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85  | 
						// DHT Temperature & Humidity Sensor // Unified Sensor Library Example // Written by Tony DiCola for Adafruit Industries // Released under an MIT license. // REQUIRES the following Arduino libraries: // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library // - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #define DHTPIN 2     // Digital pin connected to the DHT sensor  // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- // Pin 15 can work but DHT must be disconnected during program upload. // Uncomment the type of sensor in use: //#define DHTTYPE    DHT11     // DHT 11 #define DHTTYPE    DHT22     // DHT 22 (AM2302) //#define DHTTYPE    DHT21     // DHT 21 (AM2301) // See guide for details on sensor wiring and usage: //   https://learn.adafruit.com/dht/overview DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t delayMS; void setup() {   Serial.begin(115200);   // Initialize device.   dht.begin();   Serial.println(F("DHTxx Unified Sensor Example"));   // Print temperature sensor details.   sensor_t sensor;   dht.temperature().getSensor(&sensor);   Serial.println(F("------------------------------------"));   Serial.println(F("Temperature Sensor"));   Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);   Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);   Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);   Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("°C"));   Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("°C"));   Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("°C"));   Serial.println(F("------------------------------------"));   // Print humidity sensor details.   dht.humidity().getSensor(&sensor);   Serial.println(F("Humidity Sensor"));   Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);   Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);   Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);   Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("%"));   Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("%"));   Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("%"));   Serial.println(F("------------------------------------"));   // Set delay between sensor readings based on sensor details.   delayMS = sensor.min_delay / 1000; } void loop() {   // Delay between measurements.   delay(delayMS);   // Get temperature event and print its value.   sensors_event_t event;   dht.temperature().getEvent(&event);   if (isnan(event.temperature)) {     Serial.println(F("Error reading temperature!"));   }   else {     Serial.print(F("Temperature: "));     Serial.print(event.temperature);     Serial.println(F("°C"));   }   // Get humidity event and print its value.   dht.humidity().getEvent(&event);   if (isnan(event.relative_humidity)) {     Serial.println(F("Error reading humidity!"));   }   else {     Serial.print(F("Humidity: "));     Serial.print(event.relative_humidity);     Serial.println(F("%"));   } }  | 
					
エラーが出なければ完了です‼
※エラーが出た場合
1.「…DHT_sensor_library\DHT_U.h:36:29: fatal error: Adafruit_Sensor.h: No such file or directory」
というエラーで、ビルドに失敗した場合。
「Unified」というライブラリーを入れることで改善できます。
2.「Connecting……._____….._____…..____スケッチの書き込み中にエラーが発生しました」
というエラーで、ビルドに失敗した場合。
ESP-WROOM-32に繋いでいるDATpinを外した状態でビルドをしてみてください。
(ビルドが終わってから繋ぎます)
⑤「結果」
ビルドに成功するとシリアルモニターに、こんな感じで表示されます‼
errorが出たら配線は間違っている可能性が高いので、再度確認しましょう‼
※「°C」は上記の写真のように、文字化けします。
これで部屋の温度と湿度が一目で分かります^^
これを応用すれば更に面白い物が作れますので、是非チャレンジ出てみましょう♪
以上、ご閲覧ありがとうございました‼




