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

![IMG_2898_heic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21771/711fb292-3a09-e848-4f65-bfc2d966a052.png)

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

http://www.microtechnica-shop.jp/shopdetail/000000000119/

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


https://www.espressif.com/

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

## 開発環境
Arduino IDE v1.8.15　（ESP-IDFも利用可能だそう）
macOS Big Sur v11.4


# 触ってみた

## まず、何やるかを決める

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

https://www.amazon.co.jp/gp/product/B00YR0COXA/ref=as_li_tf_tl?camp=247&creative=1211&creativeASIN=B00YR0COXA&ie=UTF8&language=ja_JP&linkCode=as2&tag=osoyoo0a-22

## 回路図が必要なんだね

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

https://dl.espressif.com/dl/schematics/esp32_devkitc_v4-sch.pdf

![esp32_devkitc_v4-sch_pdf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21771/88411b48-a1da-159d-6546-cd8a91015e42.png)

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で実施した。

```C++:シリアルモニタでカウントアップするサンプルプログラム
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関数の先頭に戻る
}
```

参照したのは下記：

https://www.indoorcorgielec.com/resources/arduinoide%E8%A8%AD%E5%AE%9A/arduino-ide%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%A8%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC/


https://www.indoorcorgielec.com/resources/arduinoide%e8%a8%ad%e5%ae%9a/esp-wroom-32%e6%90%ad%e8%bc%89%e8%a3%bd%e5%93%81/

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

https://miraiworks.org/?p=3845



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

## 温度・湿度センサー（DHT11）を使ってみる

```C++:温度と湿度を図るサンプルプログラム
//温湿度センサモジュールを使って温度、湿度を測定するスケッチ
#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);
}
```
上記コードは下記を参照した。

https://www.takeshi-1222.com/entry/ESP32-DHT-11

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

https://www.opensourcetech.tokyo/entry/20200112/1578828570

ということで、数値を取り、計算することができたぞ。
![001_test___Arduino_1_8_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21771/a37d312e-991a-9056-7f48-d86e1bcd7d5e.png)

計測値
![_dev_cu_usbserial-14140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21771/8fd4f861-c982-81e2-d270-e4b7ca8625b8.png)

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