【arduino農業】ビニールハウスの温度をクラウドで管理する

スポンサーリンク
スポンサーリンク

ビニールハウスの温度や湿度、気圧などのデータをパソコンやスマホで管理するまでの手順をセンサーの自作や温度、湿度、日照などを管理するシステムとして仕上げるまでを記録してみようと思います。

arduinoとSDcardを使って温度や湿度、気圧などを記録してそのデータをエクセルに取り込む過去記事はこちらです。

今度はそのデータをwifiで飛ばしてパソコンで管理してみようということですが…うまくいくかな?

スポンサーリンク

ESP32

今度のシステムのコアとなるのがESP-WROOM-32です。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..ESP32今度のシステムのコアとなるのがESP-WROOM-32です。..

この製品は、Espressif Systems社のESP32というチップを搭載したWi-Fi通信やBluetooth(BLE)通信が可能なWi-Fiモジュールで、小さいサイズながらもArduinoのプログラムを書き込める(Arduinoとしても利用出来る)、Wi-Fi通信が可能、そして安価というメリットを持っています。

カズはarduinoを利用して、ミニ ハウス菜園の管理をしていますが、ESP-WROOM-32の開発版が出たので,このチップをarduinoとして使いながら、wifiで飛ばしパソコンやスマホで管理してみたいと思います。

ESP32を搭載したボードはいろいろあるようですが、2019年の最新バージョンV4を搭載したESP32 DevKitC V4 ESP-WROOM-32 を使いました。

この製品は、waves社が提供しているもので、日本国内の技適を取得していますので電波法に抵触することもなく安心して使えます。

また、この製品はデユアルコアを搭載しています。デユアルコアは2つの(デュアル)コアを持ち、それぞれのコアで同じ計算を行い、計算結果が同じならば実行される優れもので、安全性が要求される車の自動運転技術で用いられる核とされています。

スポンサーリンク

arduino IDEでESP-32を動かすには

esp32に書き込んだりプログラム(スケッチ)するにはarduinoIDE(Integrated Development Environment:統合開発環境)というソフトを使いますが、このままでは動作させることが出来ません。

arduinoIDEでesp32(ESP-WROOM-32)を動作させるにはArduino IDEにESP32のボードを追加する必要があります。

ボードの追加にはZIPファイルをダウンロードして追加する方法もありますが、比較的簡単で確実なarduinoIDEを使って追加してみました。

arduino IDEをインストールする

パソコンにarduino IDEをインストールしていなければarduino.ccからダウンロードします。

Windowsでインストーラーを使う場合を例にしています。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..arduino.ccからダウンロードします。Windowsでインストーラーを使う場合を例にしています。..

次にJUST DOWNLOADをクリックしてファイルをダウンロード、インストールします。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..次にJUST DOWNLOADをクリックしてファイルをダウンロード、インストールします。..

Arduino IDEにESP32のボードを追加する

先ず、arduino IDEを起動します。

次にファイル→環境設定と進みます。

環境設定が開いたところでここをクリックし、arduino-esp32を開きます。

ページの中程にあるInstructions for Boards Managerをクリックします。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..ここをクリックし、arduino-esp32を開きます。ページの中程にあるInstructions for Boards Managerをクリックします。..

ページ下部にあるhttps://dl.espressif.com/dl/package_esp32_index.jsonをコピーします。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..ページ下部にあるhttps://dl.espressif.com/dl/package_esp32_index.jsonをコピーします。..

次に、arduino IDE 環境設定に戻り、先程コピーしたアドレスを追加のボードマネージャのURL欄に貼り付けます。

この場合、コピペでは張り付け出来ない場合にはctrl+Vで貼り付けします。

また、既に追加のボードがあればカンマで区切って貼り付けします。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..また、既に追加のボードがあればカンマで区切って貼り付けします。..

張り付けしたらOKで環境設定を閉じます。

次に、ツール  →  ボード:***** → ボードマネージャを開きます。

ボードマネージャが開いたら右のバーを一番下まで下げます。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..ボードマネージャが開いたら右のバーを一番下まで下げます。..

esp32 by espressif Systems を選択し、インストールします。

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..esp32 by espressif Systems を選択し、インストールします。..

インストールが終わったら、もう一度ツール → ボードに進み、今度はボード一覧の中からESP32 Dev Moduleを選択します。

これで、arduinoIDEからesp32デバイスへの書き込みが出来るようになりました。

スポンサーリンク

① SDカード データロガー

早速esp32からSDcardにarduino IDEで書き込みをしてみることにします。

SDカードに書き込む内容はビニールハウスの温度、湿度、水耕栽培の養液温度、気圧、日照など栽培管理の基礎データです。

カズのビニールハウスは家庭菜園ですから小さいのですが、専業農家さんも計測地点を増やすことでそのまま利用できると思います;

esp32はarduinoと同じように使えるということですが、少し違うところもありましたので、こちらにそれをまとめてみました。

① esp32でSDカードに書き込む

スポンサーリンク

② SDカード 書き込みと読み込み

① esp32でSDカードに書き込む実験はうまくいきました。そこで、次に、SDカードのdata1.txtに書き込んだ内容を読み込んで同じSDカードのdata2.txtに読み込んだ内容を書き込んでみることにします。

確実に読み込んで確実に書き込みしたことを確かめるために、data1.txtには通し番号と”test kakikomi ok !”と1秒おきに書き込みします。

1 : test kakikomi ok !

このような感じです。

これを読み込んでdata2.txtに同じ内容を書き込みます。

書き込みが終わったらdata1.txtを削除して新たに作成されたdata1.txtファイルに、今度は

2 :test kakikomi ok !

と書き込みます。

これを読み込んでdata2.txtに同じ内容を書き込みます。

これを繰り返してみました。

② esp32 SDカード 書き込みと読み込み

スポンサーリンク

③ esp32でRTCを使う

SDcardへの書き込みと読み込みが出来るようになったのでRTC(リアルタイムクロック)をesp32で動かしてみます。

RTCモジュールはこれを使いました。

DS3231のチップを使っている商品ならカズのサンプルスケッチが動くと思います。

年間誤差1分ということですが、1年程使った感じでもその程度です。

何か支障があればNTPサーバー NTP(Network Time Protocol)を使って時刻自動補正ってことも出来るようですが、気にする程の誤差ではありませんね。

また、充電式リチウムイオン電池をセットしておけば本体の電源を切っても時計機能は稼動を続けます。

リチウムイオン電池はLIR2032を使っています。

何でも、充電せずにRTCモジュールを動かしても20年持つらしい…です。

確かに腕時計用の小さいリチウムイオン電池でも3年程は持つので容量からすればそのような計算になるのでしょうね。

直径は10円玉ぐらいありますから….

RTCのプログラム(arduino IDE)

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..RTCのプログラム(arduino IDE)..

スケッチはライブラリをインクルードしてサンプルスケッチをarduino IDEで書き込むだけですのでとても簡単ですよ。

esp32(esp-wroom-32)でRTCを使ってみた…….こちらの記事です。

スポンサーリンク

④ クラウドで温度など計測データを管理する

SDカードに温度や日照、気圧などを記録することができました。

そのようなビニールハウスの環境、栽培データをいつでも、外出中でも、海外旅行中でも見られるようにクラウドに保存してみたいと思います。

無料で利用できるクラウドサービスとしてグーグルドライブ。マイクロソフトのonedrive、それにアマゾンのAWSがあります。

どれも素晴らしいサービスですが、カズはグーグルを選択しました。

グーグルドライブにはエクセルと同等かエクセルを超える機能があるグーグルスプレッドシートが用意されています。

また、このデータを簡単にエクセルにも取り込むことができます。

ですから、今までエクセルで分析してきた方も今までの方法を変えずに済みます。

ということで、arduinoIDEでesp32にプログラムを書き込み、ビニールハウスの温度や、湿度、炭酸ガス濃度などをグーグルスプレッドシートに記録するための動作テストをしてみました。

IFTTT

esp32とgoolesheetをつなぐ橋渡し役として、IFTTTサービスを利用しました。

IFTTTは難しいスクリプトなど使わなくても簡単に利用することが出来ます。

google スクリプトを使う

IFTTTは外部のサービスですが、直接esp32からgoogle sheetsに書き込む方法はないものか調べたところ、ありました。

arduinoに追加されたライブラリ、WiFiClientSecure.hは、GoogleへのHTTPS SSL接続が出来るということですので、Google Appsスクリプトを介して、google sheetsに書き込んでみたいと思います。

手順

  •   googlesheetを作成する。
  •   送られたデータをgoogle sheetsに書き込むスクリプト記述。
  •   esp32でデータをgoogle sheetsに送信するプログラム。

google sheets作成とスクリプト記述はこちらです。

リンク先ではグーグルシート作成と送信されたセンサーデータをグーグルシートに入力するscript、それにスクリプトを使えるようにするための手順を記しています。

実際にビニールハウスのセンサーデータをクラウド(グーグルシート)に保存するには上記の手順に加えて下記の送信プログラムをarduinoIDEでesp32に書き込む必要があります。

arduinoIDEスケッチ

ssid のWIFIのアクセスポイント名 を変更します。

password をwifiのパスワードに変更します。

key をgooglescript IDに変更します。

googlescript IDは作成したファイルからツール ⇒ スクリプトエディタと進み、公開 ⇒ ウエブアプリケーションとして導入に進むと、現在のウェブ アプリケーションの URLが表示されています。

https://script.google.com/macros/s/ この部分をコピーします /exec

コピーしたIDを「googlescript IDに変更」という部分に貼り付けます。 const char* key = “AbcdE….”; という感じです。

このスケッチをarduinoIDEでesp32に書き込みます。

#include <WiFiClientSecure.h> 
WiFiClientSecure client;
float sensor_data1;
float sensor_data2;
float sensor_data3;
const char* ssid     = "WIFIアクセスポイント名に変更";    
const char* password = "パスワード 変更";  
const char* server = "script.google.com"; 
  // google script key
const char* key = "googlescript IDに変更";   
void setup() {
  Serial.begin(115200); 
}
void wifi_conect(){
  
WiFiServer server(80);
  // Wi-Fiに接続
  Serial.print("Attempting to connect to SSID: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    // 接続するまで待機する
    delay(1000);
  }
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
    server.begin();
  }
  
  void g_acsess(){
    
  sensor_data1=100;
  sensor_data2=200;
  sensor_data3=300;
  String URL="https://script.google.com/macros/s/";
  URL += key;
  URL += "/exec?";
  URL += "&1_cell="; 
  URL += sensor_data1 ;
  URL += "&2_cell="; 
  URL += sensor_data2 ;
  URL += "&3_cell="; 
  URL += sensor_data3 ;
  
  Serial.println(URL);
  // サイトにアクセス
  Serial.println("\nStarting connection to server...");
  if (!client.connect(server, 443))
    Serial.println("Connection failed!");
  else {
    Serial.println("Connected to server!\n");
    client.println("GET " + URL);
     client.stop();
     Serial.println("finish.");
  } 
}
 
void loop() {
  
  delay(10000); //10秒毎に書き込みする
  wifi_conect();
  g_acsess();   
  WiFi.disconnect();   
}

サンプルスケッチではセンサーの数値の代わりにB列に100,C列に200,D列に300と10秒毎に書き込みます。

A列には書き込みした日時が入力されます。(グーグルスクリプトで記述)

『 【arduino農業】ビニールハウスの温度をクラウドで管理する 』 ..10秒毎に書き込みます。A列には書き込みした日時が入力されます。(グーグルスクリプトで記述)..

書き込むセルは”&値_cell(cellは任意)=”で指定出来ます。

“&4_youeki_ondo=”に続けてセンサーの数値を代入するって感じです。

この場合ではE列に溶液温度が入力されます。

グーグルクラウドのgoogle sheetsでは自動で保存されますので、信頼性がありますよね。

サンプルスケッチでは3列のデータですが、実際には50でも100でも増やすことが出来ますので(最大256列まで追加可能)ビニールハウスの一号棟A区、B区、2号棟C区などの温度、湿度、炭酸ガス濃度や、栽培溶液温度、作業進捗状況など全てのセンサーの値を保存出来ます。

また、別のgoogle sheetsを作成し、ビニールハウス別に管理するのもいいですね。

グーグル クラウドで管理すれば、海外の旅行先からでもスマホでビニールハウスの状態をチエックできます。

異常値が出たらメールで通知するとか、グーグルスプレッドシートからビニールハウスの散水を命令するとか、調べてみてうまくいったら専業農家さんと共有したいと思います。

クラウド農業…? 南の島から自分のビニールハウスを管理するって夢があっていいですよね。

カズはバリ島のガマバライさんをちょっと応援しています。その理由は….?