土壌湿度センサを使って、植物のまわりの土の湿度を測ってみよう。
土壌湿度センサは、DFRobot から販売されている Analog Capacitive Soil Moisture Sensor SEN0193 のジェネリック版を使用しています。
また、Blynkをつかって遠隔からもスマホで土壌の湿度を

ESP32の右側に見えるのがDiyStudio 土壌湿度センサです。
土壌の水分量を容量(キャパシタンス)を用いて間接的に測定します。センサーの2つの電極間の媒体(土壌)の誘電率が変化することで、キャパシタンスの変化をとらえます。水分は高い誘電率を持つため、水分量が多いとキャパシタンスが増大します。キャパシタンスの変化を電圧信号に変換することで計測します。今回用いたセンサでは、乾燥状態(室内)では、2650,水に浸すと1050の値が計測できました。ESP32では、3.3Vを4096分割表示されるので、室内では、2.1V、水に浸すと0.85Vが発生していることになります。

//This c++ code is generated by PictoBlox
//Gloabl Variables are declared here
float humidity;
float percentage;
void setup() {
//put your setup code here, to run once:
pinMode(36, INPUT);
}
void loop() {
//put your main code here, to run repeatedly:
humidity = analogRead(36);
percentage = (100 - (((humidity - 1050) / 1600) * 100));
delay(0.5 * 1000);
}
Blynkをつかって、水分状態をスマホで確認する
下左写真は、スマホでの確認状況。現在の湿り気は、70%の状態にあることがわかる。

#define BLYNK_TEMPLATE_ID "Blynkから取得する"
#define BLYNK_TEMPLATE_NAME "Blynkから取得する"
#define BLYNK_AUTH_TOKEN "Blynkから取得する" // 認証トークン(Blynk Web Consoleから取得)
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// WiFi接続情報
char ssid[] = "C40FA61150C5-2G";
char pass[] = "mr6x6senygdykp";
// センサーのアナログピン
#define WATER_SENSOR_PIN 36 // ESP32のA0/GPIO36
BlynkTimer timer;
// センサー値を取得してBlynkに送信
void sendSensorValue() {
int sensorValue = analogRead(WATER_SENSOR_PIN); // アナログ値を読み取る
Serial.println(sensorValue);
//空気中にセンサを置いた時の値(1050程度)と、水に浸した時の値(2660)を基準として、0から100の値を設定
float percentage =100.0-((sensorValue-1050.0) / 1600.0) * 100.0; // 値をパーセンテージに変換
Serial.println(percentage);
Blynk.virtualWrite(V0, percentage); // 仮想ピンV0に値を送信
}
void setup() {
// シリアルモニタを初期化
Serial.begin(115200);
// Blynk接続を開始
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// センサー値を定期的に送信するタイマーを設定
timer.setInterval(1000L, sendSensorValue); // 1秒ごとに実行
}
void loop() {
Blynk.run(); // Blynkの実行
timer.run(); // タイマーの実行
}