2-3.温湿度センサ《Remo》
電気回路と電子工作
今回は温湿度センサを利用して温度と湿度を計測する電子工作を行います。また、シリアル通信を用いてパソコンにセンサ情報を表示します。
利用する温湿度センサは下図のDHT11になります。
DHT11は3.3V〜5.5Vで動作しますのでVDDに3.3Vを接続しGND端子も接続します。また、DATA端子は3.3Vに10KΩ(茶黒橙金)の抵抗を介して接続すると共に、データを入力するGPIO32端子にも接続します。以下に上記回路の配線した図を示します。
【ESP32-DevKitCの入出力端子はこちらを参照下さい】
DHT11用ライブラリのインストール
DHT11センサから出力されたデータはそのままで利用できませんので、Arduino向けに専用ライブラリが用意されています。まずはDHT11を利用するためのライブラリをインストールします。(ライブラリとは新たに追加する特定機能をまとめたソフトウェアとなります。)
(1)ArduinoIDEを起動しメニューの「スケッチ」から「ライブラリをインクルード」、「ライブラリを管理」を選択
(2)ライブラリマネージャの検索窓に「dht」と入力し下図の「DHT sensor library by Adafruit」を見つけてインストールします。インストールが完了すると下図のように「INSTALLED」と表示されライブラリが利用可能となります。
スケッチ(制御ソフトウェア)
DHTライブラリを利用した温湿度センサを利用したスケッチは以下の通りとなります。
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 |
// IoT電子工作キット // 2-3.温湿度センサ #include <DHT.h> // ①ライブラリを読み込み(DHTセンサー) const byte TEMP_SNR = 32; // ②温・湿度センサのピン設定(GPIO32) DHT dht(TEMP_SNR, DHT11); // ③DHTクラスをインスタンス化 // ④起動時、最初に実行される処理 void setup() { Serial.begin(115200); // ⑤シリアルモニタ設定 Serial.println(); // (見やすくするために改行) Serial.println("TempStart"); // ⑥シリアルモニタに開始を表示 dht.begin(); // ⑦DHTセンサ利用開始 } // ⑧setup完了後、電源OFFまで繰り返し処理 void loop() { // ⑨5秒待つ(センサーからデータ取得に時間を要するためWait) delay(5000); // ⑩温湿度センサーのデータ取得 //DHT dht(TEMP_SNR, DHT11); float g_humidity = dht.readHumidity(); float g_temperature = dht.readTemperature(); // ⑪シリアルモニターにデータ表示 Serial.print( String(g_temperature) ); Serial.print( " / " ); Serial.println( String(g_humidity) ); } |
2-2までで既に学習した内容は割愛し今回の新しい内容を中心に説明します。
①はDHTライブラリの読み込み(include)を行い利用できる状態にしています。②は開発ボードで利用する入力端子を設定します。
③は読み込んだDHTライブラリのクラスをインスタンス化して変数dhtに定義しています。詳細に理解するにはオブジェクト指向プログラミングを理解する必要があり本一冊が必要です。
ただ、全て理解しようとせずにこういうように使うと理解して進めてください。電子工作では使い方だけ理解していれば十分な工作が可能です。
そのため簡単に説しますが、クラスと言う設計図のようなものがあり、変数やメソッド(メソッド:関数のような処理で温度を読み込むなどの一連の処理)が記載されています。このクラスを使えるようにすることがインスタンス化といい、具体的には設計図(クラス)の通りに変数dhtを定義しプログラム上で扱えるようにすることです。
(DHTクラスはArduinoスケッチフォルダ内のライブラリフォルダ「libraries」内の「DHT_sensor_library」にある「DHT.h」ファイルに定義されています。ArduinoスケッチフォルダはArduinoIDEの「ファイル」から「環境設定」の「スケッチブックの場所」から確認できます。)
インスタンス化により、dhtは「readTemperature」などの多くの機能(メソッド)を利用することが可能となります。
ここでは変数dhtでいろんな機能が利用できるようになるというように理解して下さい。
⑦で先ほど定義したdhtのbeginによりセンサを利用可能状態にし、⑧のreadTemperatureやreadHumidityで温度と湿度の状態を読み出しfloat型の変数にデータを格納します。⑧でシリアルモニタに出力しますがprint文は文字列型の必要がありますのでfloat型をString()で文字列型に変換を行い表示しています。
正常に処理されるとシリアルモニター上に以下のように表示されます。
【スケッチの検証と書込方法はこちらを参照ください】