前回は赤外線リモコンでLEDの明るさを制御してみました。
湿度計は、私たちの生活の中で温度と湿度を測定する重要なツールです。このプロジェクトでは、ESP32-S3を使用してDHT11モジュールの温度と湿度データを読み取ります。
湿度計DHT11について
温度湿度センサーDHT11は、温度と湿度を同時に測定できる複合センサーモジュールです。このモジュールは、出荷時にメーカーで校正されており、デジタル信号で校正済みの温度と湿度データを出力します。
DHT11 は、中国のAosong Electronics社が製造・販売している温度湿度センサーモジュールです。
校正済み とは、センサーの誤差を補正するために、あらかじめ調整されていることを意味します。
DHT11は独自形式のシングルライン通信プロトコルを採用しているため、専用のライブラリを利用するとより簡単にデータを読み取ることができます。DHT11は電源投入後、1秒以内に初期化を行います。動作電圧は3.3V〜5.5Vの範囲です。SDAピンはデータ通信用のピンで、他のデバイスとデータのやり取りを行います。NCピン (Not Connected Pin) は、様々なICパッケージに見られるもので、外部回路に対しては機能せず、製造時やテスト時の用途に用いられる可能性があります。このピンは回路の他の部分に接続しないでください。
回路図
接続図
ライブラリのインストール
使用ライブラリ:DHT sensor library for ESPx
コード
/**********************************************************************
Filename : Temperature and Humidity Sensor
Description : Use DHT11 to measure temperature and humidity.Print the result to the serial port.
Auther : www.freenove.com
Modification: 2022/10/26
**********************************************************************/
#include "DHTesp.h"
DHTesp dht; //Define the DHT object
int dhtPin = 21;//Define the dht pin
void setup() {
dht.setup(dhtPin, DHTesp::DHT11);//Initialize the dht pin and dht object
Serial.begin(115200); //Set the baud rate as 115200
}
void loop() {
flag:TempAndHumidity newValues = dht.getTempAndHumidity();//Get the Temperature and humidity
if (dht.getStatus() != 0) {//Judge if the correct value is read
goto flag; //If there is an error, go back to the flag and re-read the data
}
Serial.println(" Temperature:" + String(newValues.temperature) +
" Humidity:" + String(newValues.humidity));
delay(2000);
}
今回のコードで特筆すべきは『goto』ですね。読んで時のごとく、指定したラベルの位置に移動します。
昔々、BASICなどでは割りと多用されてきた書き方ですが、C言語においては美しくないとされています。
では、whileを使って書き換えたらどうなるでしょうか?
正解は・・・
TempAndHumidity newValues = dht.getTempAndHumidity();//Get the Temperature and humidity
while(dht.getStatus() != 0) {//Judge if the correct value is read
newValues = dht.getTempAndHumidity();//Get the Temperature and humidity
}
どちらが美しいかと言われると、ちょっと悩んでしまいますね・・・。
コードの書き方は唯一の正解というものはありません。色々と試してみてください!
次回は取得した温度と湿度をLCDディスプレイに表示してみましょう!
コメント