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」は上記の写真のように、文字化けします。
これで部屋の温度と湿度が一目で分かります^^
これを応用すれば更に面白い物が作れますので、是非チャレンジ出てみましょう♪
以上、ご閲覧ありがとうございました‼