今回も前回に引続きESP32に挑戦していきます。
今回はスタートブックの3章からです。
書籍に記載あった温度センサは我が家の在庫に無かったので
家にあった似たような温度センサMCP9701を使います。
前回のLED同様にESP32の25Pinに温度センサの出力を接続します。
本来はノイズ対策にコンデンサ0.1μFを挟むべきとのことですが今回は無しです。
作成したコードは以下の通りですが、
スタートブックは温度のみを出力する仕様でしたが、
私はセンサ出力値(AD変換後生値)、センサ電圧値(計算値)、温度(計算値)を出力します。
//ESP32とMCP9701(温度センサ)で温度測定
#define sensor 25 //"sensor"を25に固定
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); //シリアル通信の初期設定
while(!Serial); //シリアル通信が可能になるまで繰り返す
pinMode(sensor,INPUT); //sensor(25)を入力モードに切替える
}
void loop() {
// put your main code here, to run repeatedly:
int e = analogRead(sensor); //センサからのアナログ値を読取り
float Vout = 3.3 / 4095 * e + 0.1132; //補正式から電圧を補正:分解能の読取り最大値 ÷ ESP32の分解能 × センサ入力値 + ESP32の補正値
float temp = (Vout - 0.5) / 0.01; //電圧から温度に変換:
Serial.print("V =");
Serial.println(e); //補正前の電圧を出力
Serial.print("Volt =");
Serial.println(Vout); //補正後の電圧を出力
Serial.print("tenmp =");
Serial.println(temp); //温度を出力
delay(1000);
}
コードは以上です。
出力を温度以外にもしたのは、何故か温度が正しく出力させなかったのです。
(-30℃くらい出力されました。。。)
原因はセンサ値から電圧+補正の計算を書籍通り
float Vout = e / 4095 * 3.3 + 0.1132;で実施したところ
何故か計算を実施しなかった点です。
そのため計算式を下記のようのに書換えました。
float Vout = 3.3 / 4095 * e + 0.1132;
順番を変えただけですが、上手くいきました。
なぜでしょうね?
まぁ、動いたからヨシッ!
次回はついにネットワークへの接続に挑戦です。