EspressifのESP32-DevKitC-32Dを使って温湿度と不快指数を図ってみた


ESP32-DevKitC-32Dとは

Espressif社の開発ボード
ESP-WROOM-32Dを搭載
詳細はこちらに掲載

Espressif社

社名:Espressif Systems Pte. Ltd
本社:中国 上海市

ESP-WROOM-32D

Wi-Fi通信およびBluetooth通信に必要な機能を搭載
マイコンとしても利用可能

開発環境

Arduino IDE v1.8.15 (ESP-IDFも利用可能だそう)
macOS Big Sur v11.4

触ってみた

まず、何やるかを決める

ちょうど、OSOYOOのセンサーが手元にあったので、その中から温湿度センサーDHT11を選択。家で使っている温湿度計をの整合性を確かめれば、ある程度の精度評価はできるだろう。

回路図が必要なんだね

ESP32-DevKitC-32Dの回路図は下記にあった

DHT11はすでに基盤に組み込まれていた。端子はGND、DATA、VCCの3つ。これをESP32-DevKitC-32Dに接続した。

DHT11 ESP32-DevKitC-32D
GND GND
DATA IO4(実際の表記は4)
VCC 3V3

まずはサンプルプログラムを書き込んでみた

次に、ESP32-DevKitC-32Dの動作を確かめるためのプログラムを実行する。

1つ目

まずは、サンプルプログラムの検証をArduino IDEで実施した。

シリアルモニタでカウントアップするサンプルプログラム
int counter = 0;  // counterという名前の変数を用意して、0をセットする

void setup() {
  // 起動後、この中の内容が上から順に1回実行される
  Serial.begin(115200);             // シリアル通信の準備をする
  while (!Serial);                  // 準備が終わるのを待つ
  Serial.println("プログラム開始");    // シリアル通信でメッセージをPCに送信

  // 最後まで実行された後はloop関数に移行する
}

void loop() {
  // setup関数が終了すると、この中の内容が上から順に何度も実行されつづける

  Serial.print("カウンターの値 ");     // シリアル通信でメッセージをPCに送信
  Serial.println(counter);         // シリアル通信でカウンターの値をPCに送信
  counter = counter + 1;           // カウンターの値を1増やす
  delay(1000);                     // 1000ミリ秒(1秒)待機

  // 最後まで実行された後はloop関数の先頭に戻る
}

参照したのは下記:

上ではコアライブラリなるものを追加したが、今度は普通のライブラリとしてDHT.hを追加した。

2つ目

1つ目のサンプルプログラムをESP-WROOM-32Dに転送して、実行する方法を参照した。

温度・湿度センサー(DHT11)を使ってみる

温度と湿度を図るサンプルプログラム
//温湿度センサモジュールを使って温度、湿度を測定するスケッチ
#include "DHT.h" //ライブラリインクルード

#define DHT_Pin 4 //DHT11のDATAピンを定義
#define DHT_Type DHT11 //センサの型番定義 DHT11,DHT22など

DHT dht(DHT_Pin, DHT_Type); //センサ初期化

/* 計測値設定 */
float humidity = 0.0f; //湿度
float tempC = 0.0f; //摂氏温度
float tempF = 0.0f; //華氏温度
float discomfortIndex = 0.0f; //不快指数
bool isFahrenheit = true; //華氏読み出し引数にtrueを設定

void setup() {
Serial.begin(115200); //シリアル通信のデータ転送レートを115200bpsで指定。bpsはビット/秒。
Serial.println("DHT11 Lesson11"); //画面に表示
dht.begin(); //温湿度センサー開始
}

void loop() {
delay(2000); //2秒待つ データの読み出し周期1秒以上必要。

humidity = dht.readHumidity(); //湿度の読み出し
tempC = dht.readTemperature(); //温度の読み出し 摂氏
tempF = dht.readTemperature( isFahrenheit ); //温度の読み出し 華氏

/* 読み取れたかどうかのチェック */
if (isnan(humidity) || isnan(tempC) || isnan(tempF)) {
Serial.println("Read failure!");
return;
}

/* おまけ 不快指数計算 */
discomfortIndex = 0.81f * tempC + 0.01f * humidity * (0.99f * tempC - 14.3f) + 46.3f;

/* 以下読み取り値の表示 */
Serial.print("湿度: ");
Serial.print(humidity);
Serial.print("[%]");
Serial.print(" ");
Serial.print("温度: "); 
Serial.print(tempC);
Serial.print("[℃]");
//Serial.print("華氏: "); 
//Serial.print(tempF);
//Serial.println("[F]");
Serial.print(" ");
Serial.print("不快指数: "); 
Serial.println(discomfortIndex);
}

上記コードは下記を参照した。

ボードへの書き込みをしていると、「arduino fail to connect to esp32 ...」のエラーが出た。解決策は今の所、下記の方法を参照した。本質的な解消法ではなさそう。

ということで、数値を取り、計算することができたぞ。

計測値

今、快適なんだが、不快指数が高いのが気になる。
詳細な分析は後ほど。