【arduino農業】ビニールハウスの温度をクラウドで管理する
ビニールハウスの温度や湿度、気圧などのデータをパソコンやスマホで管理するまでの手順をセンサーの自作や温度、湿度、日照などを管理するシステムとして仕上げるまでを記録してみようと思います。
arduinoとSDcardを使って温度や湿度、気圧などを記録してそのデータをエクセルに取り込む記事はこちらです.。
今度はそのデータをwifiで飛ばしてパソコンで管理してみようということですが…うまくいくかな?
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でインストーラーを使う場合を例にしています。
次にJUST DOWNLOADをクリックしてファイルをダウンロード、インストールします。
Arduino IDEにESP32のボードを追加する
先ず、arduino IDEを起動します。
次にファイル→環境設定と進みます。
環境設定が開いたところでここをクリックし、arduino-esp32を開きます。
ページの中程にあるInstructions for Boards Managerをクリックします。
ページ下部にあるhttps://dl.espressif.com/dl/package_esp32_index.jsonをコピーします。
(注:2019/07ではページデザインが変更されていましたが内容は同じです。このURLのコピペでもいいっすよ!) (^^;
次に、arduino IDE 環境設定に戻り、先程コピーしたアドレスを追加のボードマネージャのURL欄に貼り付けます。
この場合、コピペでは張り付け出来ない場合にはctrl+Vで貼り付けします。
また、既に追加のボードがあればカンマで区切って貼り付けします。
張り付けしたらOKで環境設定を閉じます。
次に、ツール → ボード:***** → ボードマネージャを開きます。
ボードマネージャが開いたら右のバーを一番下まで下げます。(検索欄にesp32と入力してもいいですよ)
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 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作成とスクリプトはカズのIOTサイト「ラズベリーパン」をご覧ください。
リンク先ではグーグルシート作成と送信されたセンサーデータをグーグルシートに入力するscript、それにスクリプトを使えるようにするための手順を記しています。
実際にビニールハウスのセンサーデータをクラウド(グーグルシート)に保存するには上記の手順に加えてgoogle sheetsに送信するプログラムをarduino IDEでesp32に書き込む必要があります。
arduino IDEスケッチ(プログラム)
ssid のWIFIのアクセスポイント名 を変更します。
password をwifiのパスワードに変更します。
key をgooglescript IDに変更します。
googlescript IDは作成したファイルからツール ⇒ スクリプトエディタと進み、公開 ⇒ ウエブアプリケーションとして導入に進むと、現在のウェブ アプリケーションの URLが表示されています。
https://script.google.com/macros/s/ この部分をコピーします /exec
コピーしたIDを「googlescript IDに変更」という部分に貼り付けます。 const char* key = “AbcdEfgHiJKlmN…" という感じです。
このスケッチをarduino IDEでesp32(esp-wroom-32)に書き込みます。
[wpdm_package id=’3304′]
[php]#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; //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();
}[/php]
サンプルスケッチではセンサーの数値の代わりにB列に100,C列に200,D列に300と10秒毎に書き込みます。
A列には書き込みした日時が入力されます。(グーグルスクリプトで記述)
書き込むセルは"&値_cell(cellは任意)="で指定出来ます。
“&4_youeki_ondo="に続けてセンサーの数値を代入するって感じです。
この場合ではE列に溶液温度が入力されます。
また、実際のセンサー計測値を代入するには、例えば sensor_data1=100の数値を変えてセンサー出力を代入(sensor_data1=suiryou;など)すればOKです。
グーグルクラウドのgoogle sheetsでは自動で保存されますので、信頼性がありますよね。
サンプルスケッチでは3列のデータですが、実際には50でも100でも増やすことが出来ますので(最大256列まで追加可能)ビニールハウスの一号棟A区、B区、2号棟C区などの温度、湿度、炭酸ガス濃度や、栽培溶液温度、作業進捗状況など全てのセンサーの値を保存出来ます。
また、別のgoogle sheetsを作成し、ビニールハウス別に管理するのもいいですね。
グーグル クラウドで管理すれば、海外の旅行先からでもスマホでビニールハウスの状態をチエックできます。
異常値が出たらメールで通知するとか、グーグルスプレッドシートからビニールハウスの散水を命令するとか、調べてみてうまくいったら専業農家さんと共有したいと思います。
ビニールハウスの潅水をスマホで操作する
ここまではgooglesheetsに室温やco2濃度や外気温などセンサーで計測したデータをgoogleのクラウドで保存するということでした。
今度はグーグルシートからビニールハウスに設置している機器を操作することですが、いろいろ調べていて便利なサービスを見つけたので共有したいと思います。
Cayenneのiotプラットフォーム
会社を設立して3年目ながらマイクロソフトやアリババ(アマゾンに匹敵する巨大Eコマース)が戦略的提携をする企業があります。
Cayenne社が独自に開発したiotプラットフォームはビジネス向けの高度なシステムでありながら個人は無料で利用できます。
そのカイエンのプラットフォームを利用して家庭菜園の水やりボタン(スイッチ)を作成したところ、ちょっとハマってしまいましたが意外に簡単に作ることが出来ました。
スマホからwifiを通してインターネットに接続し、ビニールハウスに設置している機器の電源をON-OFF出来ます。
また、温室の温度や外気温など複数地点の温度をリアルタイムでスマホやパソコンで表示出来ます。
海外旅行先からスマホで遠隔水やりをする
農業にiotを導入してスマート農業を始めようとすると導入費用が高額になりますがesp32やarduinoとcayenneの無料プラットフォームを組み合わせれば”おこづかい”で出来ちゃいますね。 (^^;