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の方は小数点第一位まで測定可能です。
★目次★
- ②「部品」
- ③「配線図」
- ④「開発環境」
- ⑤「プログラミング」
- ⑤「結果」
電子工作ステーション 600円(送料無料)
・ESP-WROOM-32 38pinモデル電子工作ステーション 1100円(送料無料)(30pinモデル)
秋月電子 1230円+送料(38Pinモデル)
・通信用マイクロUSBケーブルタイプB (家に無ければ)
ESP-WROOM-32とパソコンを繋ぐためのケーブルです。
スマホ用充電専用タイプだと使えないのでご注意ください。
タイプB通信ケーブル ・ジャンパーワイヤー(メス・メス)電子工作ステーション 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);」に変え、ビルド開始‼
一応コード例貼っておいきます⇩
// 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("%")); } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 // 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」は上記の写真のように、文字化けします。
これで部屋の温度と湿度が一目で分かります^^
これを応用すれば更に面白い物が作れますので、是非チャレンジ出てみましょう♪
以上、ご閲覧ありがとうございました‼
カテゴリー:ESP-WROOM32はんだ付け不要センサー電子工作初級