【iotで水やり】カイエンIOTとスマホでスマート農業?
スマート農業が注目をされていますが問題点の一つに導入費用があります。そこで某企業も使う高度なプラットフォームを無料で使わせていただくことにします。
iotプラットフォーム
マイクロソフトやアリババ(巨大Eコマース)も戦略的パートナーシップを結ぶ設立3年目の会社があります。
カイエンと言えばポルシェ・カイエンを思い浮かべる方も多いと思いますがこちらはiot(Internet of Things)のカイエン社です。
Cayenneは、独自のIoTセットアップを簡単に構築できるIoTプラットフォームの1つです。これは、ドラッグアンドドロップIoTプロジェクトビルダーであり、開発者がプログラミングの知識がなくても、インターネット上で接続デバイスをすばやく作成してホストできるようにします。
産業や健康管理、食品サービスなどビジネスで使われるカイエン社のプラットフォームを個人では無料で利用することが出来ます。
そこで、このプラットフォームを利用して旅行先からスマホで菜園の水やりが出来るようにしようと思います。
また、温度センサーデータをスマホでチエック出来るようにもしてみようと思います。
プラットフォームから指示する。
データーをプラットフォームに送信する。
これをインターネットを通して行うことでスマート農業にも使えますね。
ここではwifiを備え技適(電波を出してもいいよ!というお墨付き)取得済みのesp32を使ってプラットフォームへのアクセスとスマホから水やりの指示を出すところまで構築してみようと思います。
カイエンでesp32を認識させる
esp32はarduinoの開発環境,arduinoIDEを使います。
arduinoIDEのインストールやesp32を使えるようにするにはこちらにまとめました。
カイエンでesp32を使うにはツール→ライブラリを管理と進み検索欄にcayenneと入力してファイルをインストールするか、zipファイルをダウンロードしてarduinoIDEを開きスケッチ→ライブラリをインクルード→zip形式のライブラリをインストールと進みダウンロードしたzipファイルを選択してインストールします。
zip形式のファイルはここからダウンロード出来ます。
カイエンのアカウントを作成する
arduinoIDEでカイエンを使うツールをインストールしたらカイエンのアカウントを作成します。
カイエンは高機能で商用利用向けでありながら個人では無料で利用出来ます。
カイエンのサインアップはこちらです。
画面下にスクロールして、氏名、メールアドレス、パスワードを入力し、同意するにチエックを入れアカウントを作成します。
カイエン ダッシュボード
アカウントを作成しダッシュボードにログインするとラズパイやarduinoなどのデバイスを選択する画面になります。
ArduinoまたはRaspberry Piを使用する場合は、スクリーンショットに示すものと同じ画像を選択します。
ここではesp32を利用するので「Bring Your Own Thing」を選択します。
Bring Your own thingをクリックすると、MQTTユーザー名やパスワードが表示されます。
この識別コードはプログラム(スケッチ)を作成する場合に必要になります。
デバイス名には判りやすい名前を付けます。
カズはesp32としました。
arduinoIDEでプログラム
ここまでの作業でカイエン ダッシュボードに自分のデバイス、ここではesp32でアクセスする準備が出来ました。
次に、esp32でwifiを使ってカイエンダッシュボードにアクセスするコードを記述します。
MQTTのユーザ名やパスワードなどはデバイス名(カズの場合にはesp32)を選択(画面左)して画面右の歯車→configureからいつでも確認出来ます。
[php]
#include <CayenneMQTTESP32.h>
#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial;
char ssid[] = "wifiアクセスポイント名";
char password[]="アクセスポイント パスワード";
char username[] = "カイエンダッシュボードから取得";
char mqtt_password[] = "カイエンダッシュボードから取得";
char cliend_id[] = "カイエンダッシュボードから取得";
void setup() {
Serial.begin(115200);
Cayenne.begin(username, mqtt_password, cliend_id, ssid, password);
}
void loop() {
Cayenne.loop();
}
[/php]
このコードをesp32に書き込みます。
conecting……______ ……… という状態が続いたらesp32に書き込みが出来ない状態ですのでブートモードで書き込みをします。
conectingの状態でブートスイッチ(タクトスイッチ)を押し続ければ書き込みモードになり書き込みが始まります。この時リセットスイッチを押すとキャンセルされ失敗となります。
書き込み出来たらカイエンのダッシュボードに変化がありましたでしょうか?
ブートモードスイッチの左がリセットスイッチですので押してみて何か少しでも変化があれば成功です。
offline表示になっていても大丈夫です。(^^;
水やりのスイッチを作成する
早速、スマホからesp32に指示を出すスイッチを作成します。
PC画面左のAdd newをクリックします。
Device/Widgetを選択
Custom Widgetsを選択します。
Button(ボタン)を選択。
Data → Digital Artuatorを選択
Unit → Digital (0/1)を選択
Cannel → 1 (半角入力)
Choose Icon → Boltを選択
入力が終わったら Add Widgetをクリックしてウイジェットを作成します。
プラットフォームには一覧に水やりが、そして水やりボタンが作成されました。
注:Nameには判りやすいように日本語の全角で入力しましたが全角でも差し支えないのか今のところ不明です。全角入力でも使えていますけど…(^^;
Name以外は全て半角で入力します。
CAYENNE_IN
次はesp32でプラットフォームの水やりボタンの指示を受けるコードを先程アップロードしたコードに追加します。
CAYENNE_INはプラットフォームからの指示を受けるカイエンの関数です。
先に作成した水やりボタンの番号(Cannel)を1にしたのでチャンネル1の指示を受けるコードの記述は
と記述します。
チャンネル1の指示をesp32に書き込むにはarduinoIDEの記述方法のDigital Writeで書き込みます。
これがarduinoIDEの書き込み関数ですね。
ここでHIGHかLOWかはカイエンからの指示ですので
このように記述します。
esp32のピンは2番を使うことにします。
pinMode(2, OUTPUT); //リレーに接続
水やりのスケッチ
水やりのスケッチです。ここではシリアルモニタで確認するため余分なコードを記述しています。このコードをesp32に書き込みます。
[php]
#include <CayenneMQTTESP32.h>
#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial;
char ssid[] = "wifiアクセスポイント名";
char password[]="アクセスポイント パスワード";
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 ); //プルアップ
}
void loop() {
Cayenne.loop();
}
CAYENNE_IN(1){
digitalWrite(2, getValue.asInt());
if(digitalRead(2)==HIGH){
Serial.println("HIGH");
}else{
Serial.println("LOW");
}
}
[/php]
書き込みが終わってカイエンのプラットフォームを見てみます。
offline表示が消えています。Esp32とカイエンがオンライン状態になっています。
作成した水やりボタンをクリックすると…
プラットフォームのボタンが”通電”表示に変わり,esp32シリアルモニタでは”HIGH"と記述されました。
もう一度ボタンをクリックすると通電表示が消え、シリアルモニタでは”LOW"の表示が出ていますね?
何度でも”ON""OFF"出来ますが、数秒 間隔を空けるといいですね。
実際の配線はピン2番(GPIO 2)にリレーを接続してモーターやポンプ、照明などに電力を供給します。
esp32は小型で動作電圧は3.3Vですが、例えばこのリレーは入力 3~32V 出力 交流250V25Aまで扱うことが出来ます。
これならesp32で100V 2000Wぐらいの機器を余裕で動かせますね。
温度グラフを作成する
スマホから水やりの”指示”を出すことが出来ました。また、水やり停止の”指示”も出来ました。
次は温度のデータをカイエンプラットフォームに送信してスマホからチエック出来るようにしたいと思います。
Add new
Add new 新規作成 → Device/Widget → CustomWidget → Line Chartと進みます。
Data → Temperature
Unit → Celsius
Cannel → 2
このように入力してAdd Widgetをクリック、温度グラフを作成します。
CAYENNE_OUT_DEFAULT
カイエンプラットフォームに温度グラフを追加しました。
次に温度データを送信するスケッチを作成します。
データの送信にはCAYENNE_OUT_DEFAULT関数を使います。
これは一定時間ごとにカイエンに送信する関数です。10秒程で送信しているようです。
データ送信のスケッチ
カイエン側への温度データ書き込みには Cayenne.virtualWrite(cannel, data, TYPE_TEMPERATURE, UNIT_CELSIUS) 関数を使います。CELSIUSは摂氏表示です。
[php]
CAYENNE_OUT_DEFAULT(){
float temp;
temp=25.5; //とりあえず (^^;
Cayenne.virtualWrite(2, temp, TYPE_TEMPERATURE, UNIT_CELSIUS); //摂氏
}
[/php]
このスケッチを先に書き込んだスケッチの最後に追加して再度esp32に書き込みます。
温度のデータを2~3度変更しています。
これに合わせてグラフも変化します。
実際にはtempの値は温度センサーの値を入力することでリアルタイムで表示されるようになります。
温度センサーを実装する
温度センサーにNTCサーミスタを使ってesp32に実装したのですが…ノイズと非直線性のためesp32にはNTCサーミスタは向かないことが判りました。
そこでデジタル 温度センサー DS18B20で温度計測します。
実際動作させて言えることはブレが少ないですね。
ds18b20 温度センサーをesp32に実装する方法はこちらにまとめてみました。
iot スマホでスマート農業 まとめ
スマホでスマート農業と言ってもそれってパソコンじゃん!とツッコミされそうですね。
スマホで表示させるにはアプリをインストールします。
アプリのインストール方法はこちらです。
esp32はwifiを備えているのでesp32からカイエンにアクセスする手順をまとめてみました。
カズとしてはarduino megaもいいかな?と思うのでwifiシールドを購入して今度はarduino mega でプログラムを組んでみようと思います。
スマート農業を導入したいけど投資は押さえたい…そのような方の参考になればいいですね。