ESP32-C3からGoogleスプレッドシートへ湿度データを記録:その3(土壌湿度センサーの設置と測定開始)

経緯

  • 初めて家庭菜園でマルチを張りました。土が直接見えないため乾き具合が分かりにくく、土壌湿度センサーを使って記録する方法を考えています。

  • ESP32-C3からGoogleスプレッドシートへ湿度データを記録:その1」では、湿度センサーの値をGoogleスプレッドシートへ記録する方法を、手動(エディタ実行)で試してみました。yshigu.net

  • 「ESP32-C3からGoogleスプレッドシートへ湿度データを記録:その2」では、使用する湿度センサーとマイコンの選定を行い、マイコンからGoogleスプレッドシートへデータを登録してみました。yshigu.net

  • 今回の「ESP32-C3からGoogleスプレッドシートへ湿度データを記録:その3」では、土壌湿度センサーに防水加工を施し、実際に記録を取り始めました。

工作

  • PIN I/O
    • A0:バッテリー電圧計測用AD変換
    • A1:リザーブ(温度計測用)
    • A2:土壌湿度値
    • D3:土壌センサー電源
    • D4:リザーブ(温度計電源)
  • 回路図と実装

マイコン プログラミング

  • 注記
    • 土壌湿度の暫定値として、MINを315、MAXを2200とし、0~100%に換算しています。
    • 先駆者の記事によると、読み取り値はチップ温度の影響を受けて変動するとのことでした。そのため、現時点では補正を行わず、読み出した値をそのまま記録して様子を見ることにします。
    • バッテリー電圧の測定回路は、「Seeed Wiki」の情報を参考にしました。変更点として、分圧抵抗の値を220kΩから750kΩへ変更しています。
    • 6月4日改修:土壌センサー値習得のForループを4回から3回に変更
/**
気象庁防災情報XMLフォーマット版  for ESP32

ライブラリー 
  ArduinoJson Ver 7.4.2

***/
#include <WiFi.h>
#include <HTTPClient.h>
// ------------WiFi------------------------------------
const char* ssid    = "SS ID";
const char* password  = "PassWD";

//デブロイのURL
const String url = "https://script.google.com/macros/s/A######################################################################################YIjg/exec";

// ------------湿度センサー------------------------------------
float set_sleep_sec = 1 * 60 * 60; //1時間間隔
#define MIN_MIST 315
#define MAX_MIST 2200
#define VOLT_PIN A0      //電圧
#define HUMI_PIN A2      //土壌センサー値
#define HUMI_SW_PIN D3   //土壌センサー スイッチ

void setup() {
  Serial.begin(115200);
  
  pinMode( VOLT_PIN, INPUT);  //電圧
  pinMode( HUMI_PIN, INPUT);
  pinMode( D3, OUTPUT)

  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  if ( WiFi.begin(ssid, password) != WL_DISCONNECTED){
   ESP.restart();
  }
  while( WiFi.status() != WL_CONNECTED){
    delay(1000);
    Serial.print(".");
  }

  Serial.println("Connected to the WiFi network!");
  moist_send();
  
  esp_sleep_enable_timer_wakeup( set_sleep_sec * 1000000LL * 1.006);
  esp_deep_sleep_start();
}

void loop() {
}

void moist_send(){
  //バッテリの電圧
  char voltStr[8];
  uint32_t Vbatt = 0;
  for(int i = 0; i < 4; i++) {
    Vbatt = Vbatt + analogReadMilliVolts(A0); // ADC with correction  
  }
  float Vbattf = 2.0 * Vbatt / 4.0 / 1000.0  ;     // attenuation ratio 1/2, mV --> V

  //土壌センサーの値
  analogSetAttenuation(ADC_11db);
  digitalWrite(HUMI_SW_PIN, HIGH);  //土壌センサーon
  delay(1000);
  int valu = analogRead(HUMI_PIN);
  for ( int lopCun = 0; lopCun < 3 ; lopCun ++ ){
    delay(500);
    valu = valu + analogRead(HUMI_PIN);
  }
  valu = valu / 4;

  int humidity = map( valu, MIN_MIST, MAX_MIST, 0, 100);

  

  digitalWrite(HUMI_SW_PIN, LOW);  //土壌センサーoff

  //WiFi出力
  String urlFinal = url + "?humidity=" + String(humidity)+ "&humi=" + String(valu)+ "&volt=" + String(Vbattf) ;
  HTTPClient http;
  http.begin(urlFinal.c_str());
  http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
  int httpCode = http.GET();

  //デバック用
  Serial.printf( "valu: %d  volt: %s\n", humidity, String(Vbattf) );

  if (httpCode == HTTP_CODE_OK) {
    String body = http.getString();
    Serial.print("HTTP_CODE_OK: ");
    Serial.println(body);
  } else if (httpCode <= 0) {
    Serial.println(http.errorToString(httpCode));
  }

  http.end();
  delay(5000);

}

Googleスプレットシート

  • スクリプト
    • リポバッテリーの電圧を追加しました。
    • 土壌湿度はパーセントと百分の1(センチボルト)に2つを記録します
function doGet(e) {
    const url = "https://docs.google.com/spreadsheets/d/1h2h98NdJ-HfWDlRHsKu6osUmajUAgOoGHKgm8bZempY/edit?gid=0#gid=0";
    const ss = SpreadsheetApp.openByUrl(url);
    const sheet = ss.getSheets()[0];
    const params = {
        "timestamp": new Date(),
        "humidity": e.parameter.humidity,
        "humi": e.parameter.humi,
        "volt": e.parameter.volt
    };
    sheet.appendRow(Object.values(params));
    return ContentService.createTextOutput('sccess');
}

試行途中結果

  • グラフに表示しているのは、土壌湿度センサーの読み取り値(百分の1ボルト:センチボルト)とリポバッテリーの電圧値(ボルト)です。
  • 記録間隔を1時間としているため、水やり直後でも土壌が乾き始めており、100%(2200センチボルト)まで上昇していません。
  • 今後は記録間隔をもう少し短くし、土壌湿度の変化を詳しく観察したいと考えています。
  • あわせてバッテリー電圧の推移も確認し、どの程度の期間連続運用できるかを観察したいと思います。

今後の進めかた

  • しばらくはこの試作機で測定を続け、データを蓄積していきます。
  • 現在困っている「鉢植えキュウリがすぐに萎れる問題」の原因調査のため、温度測定機能の追加も検討しています。

以上。ここまでとなります

プライバシーポリシー |ページトップへ

`