【農業 iot】スマホで遠隔水やり&複数・温度センサー
cayenne社の高度なiotプラットフォームを利用してスマホで遠隔水やりと温度管理できるようにしてみました。
arduinoやesp32で簡単にスマホでiot スマート農業 環境を自分で作ることが出来るので共有したいと思います。
スマート農業 とは?
スマート農業(Smart agriculture)で調べると殆ど日本からの発信であることが判ります。
ジェトロ(日本貿易振興機構)は英文でスマート農業を紹介しているようです。
ですからスマート農業とはいわばキャッチコピーと言えるものでiot(モノとインターネット)と ict(情報とインターネット)を農業に応用し、作業の効率化と農業の高収益化を図ろうということですが、導入費用が…ですよね。
でも、無料で利用できるサービスも世界にはあります。
フランス・カイエン社の高度なiotプラットフォームもその一つです。
そこでカズは裏庭のビニールハウスの水やりや温度管理をスマホでやろうということで作ってみました。
スマホで水やり
カイエン社のプラットフォームを使ってスマホで遠隔水やりをするまでの手順はこちらです。
esp32をarduino IDEで認識、使えるようにする。
esp32とカイエン社のプラットフォームをwifiで繋ぐ。
水やりボタン(スイッチ)を作成する。
スマホで使えるようにする。
このようなことを書いています。 (^^;
温度センサーを使えるようにする
ライブラリをarduino IDEにインストールして温度センサーをesp32で使えるようにするまではこちらです。
ds18b20 温度センサーにはシリアル番号が付けられていてそれぞれ違うID(番号)になっています。
ですからds18b20 温度センサーは複数の温度センサーを同じ入力ピンで使うことが出来ます。
これなら土壌温度やビニールハウスの温度、外気温などをそれぞれ計測出来て、どのセンサーで計測したかが判るようになりますね。
そこでds18b20 温度センサーのスケッチを変更して複数の温度センサーの測定値を読み取れるようにしてみたいと思います。
複数 温度センサーの配線
複数のds18b20温度センサーの配線図です。
温度センサーの手持ちが3個なので..3個使った配線です。 (^^;
同じように増やせると思いますが最大接続数は…不明です。 (^^; (今のところ)入力するピンを増やせばもっと温度センサーを増やせますね。
複数 温度センサーのスケッチ
温度センサーのスケッチです。arduino IDEでesp32に書き込みます。
[wpdm_package id=’3291′]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # include <OneWire.h> # include <DallasTemperature.h> OneWire GPIOPIN(32); // pin DallasTemperature sensors(&GPIOPIN); byte i; byte addr[8]; int cnt=0; void setup() { Serial.begin(115200); sensors.begin(); } void loop() { if ( !GPIOPIN.search(addr)) { Serial.println( "" ); Serial. print ( "== END of address ==" ); GPIOPIN.reset_search(); cnt=0; return ; } Serial.println( "" ); cnt++; for ( i = 0; i < 8; i++) { Serial. print (addr[i], HEX); } sensors.requestTemperatures(); float temperatureC = sensors.getTempCByIndex(cnt-1); Serial. print ( "温度" ); Serial. print (temperatureC); Serial. print ( "ºC" ); Serial. print ( "º温度センサー番号 ; " ); Serial. print (cnt); delay(1000); } |
このスケッチをesp32に書き込みます。
最初の英数字がシリアル番号で、温度とナンバーを振っています。
入力ピンはGPIO 32を使っています。
温度センサーの特定
3個の温度センサーを同じ入力ピンで温度を測れてシリアル番号で固体を識別できるようになりましたが…..
でも、これじゃどのシリアル番号がどの温度センサーのものか判りませんね。
そこで、温度センサーのシリアル番号を特定するために1個だけ使ってみます。
これで温度センサーのシリアル番号を特定出来ました。
このように特定出来ればこれは土壌温度、これは外気温というように判りやすくなりますね。
Cayenneにアップロードする
カイエン・サーバーにアップロードするために少しスケッチ(プログラム)を変更しました。
遠隔水やりのチャンネルは1を、温度センサーのチャンネルは2,3,4にしています。
遠隔水やりと3個の温度センサーのスケッチです。
[wpdm_package id=’3292′]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # include <CayenneMQTTESP32.h> #define CAYENNE_DEBUG #define CAYENNE_PRINT Serial; //=========================== # include <OneWire.h> # include <DallasTemperature.h> OneWire GPIOPIN(32); // pin DallasTemperature sensors(&GPIOPIN); byte i; byte addr[10]; int cnt=0; int cnt2=0; float temp[11]; //WIFI情報 char ssid[] = "wifi の名前" ; char password[]= "WiFi パスワード" ; //カイエン ユーザネーム,MQTTパスワード,ID char username[] = " カイエンのダッシュボードから取得する " ; char mqtt_password[] = " カイエンのダッシュボードから取得する " ; char cliend_id[] = " カイエンのダッシュボードから取得する " ; void setup() { Serial.begin(115200); Cayenne.begin(username, mqtt_password, cliend_id, ssid, password); pinMode(2, OUTPUT); digitalWrite(2, HIGH); sensors.begin(); } void loop() { Cayenne.loop(); } CAYENNE_IN(1){ digitalWrite(2, getValue.asInt()); if (digitalRead(2)==HIGH){ Serial.println( "HIGH" ); } else { Serial.println( "LOW" ); } } CAYENNE_OUT_DEFAULT(){ for ( cnt2 = 0; cnt2 < 10; cnt2++) { if ( !GPIOPIN.search(addr)) { Serial.println( "== END of address ==" ); GPIOPIN.reset_search(); cnt=0; return ; } Serial. print ( "シリアルNo: " ); for ( i = 0; i < 8; i++) { Serial. print (addr[i], HEX); } cnt++; sensors.requestTemperatures(); temp[cnt]= sensors.getTempCByIndex(cnt-1); Serial. print ( " 温度" ); Serial. print (temp[cnt]); Serial. print ( "ºC " ); Serial. print ( "温度センサー番号 : " ); Serial.println(cnt); Cayenne.virtualWrite(cnt+1, temp[cnt], TYPE_TEMPERATURE, UNIT_CELSIUS); //摂氏 delay(30); //30ミリ秒の送信間隔 } } |
このスケッチの例ではカイエン・チャンネルの2,3,4に書き込みます。
また、このスケッチ例では温度センサーを10個まで増やせます。カイエンで設定したチャンネル以上送信すると自動でチャンネルが増えて温度表示されますので登録してわかりやすい名前に変更します。
このプログラムでは温度センサー 計測値を表示するチャンネルは連続させる必要があります。使用するチャンネル数は温度センサーの数です。
cntは1から始まりますのでチャンネル5から書き込む場合には Cayenne.virtualWrite(cnt+4, temp[cnt], ……に変更してください。
indexは0から始まりますのでtemp[1]に格納される温度はTempCByIndex(0)が格納されます。(3個の温度センサーの場合、indexは0,1,2となります)
temp[cnt]= sensors.getTempCByIndex(cnt-1);
このスケッチをesp32に書き込んで計測してみました。
カイエンダッシュボード(パソコン)です。
スマホでは…
【農業 iot】スマホで遠隔水やり&温度センサー まとめ
スケッチをarduino IDEでダウンロード出来るようにしましたのでそのまま使えます。 (^^;ファイルはOKクリックでフォルダを作成します。
これでいろいろな場所の温度管理が出来ますね。
チャンネルと温度でトリガーを設定すれば更に色々出来そうです。