ESP-WROOM-02で土壌センサーを使って自動潅水装置。IFTTTで作業完了をLINEに通知する。

ESP=WROOM-02を使って初めて作ったのは、温度センサーの値をスマホで表示するというものでした。

それから何か発展したものを何かと考えてました。

折角なら自分の仕事(農業)に活かせるものと、今回のを考えました。

最終的な目標。

稲の苗床の乾燥塩梅をセンサーで計測。

乾いたらポンプを回して潅水して、作業終了をスマホのLINEに通知。

いきなり本番というわけにはいかないので、金魚鉢で使えそうなポンプを動かすことにします。

完成までの手順

  1. IFTTTのアカウント取得からLINE通知の設定まで。
  2. ハードウェアの組み立て。
  3. センサー値の表示のためのアプリ「Blynk」のインストール。
  4. ESP=WROOM-02へスケッチを書き込むため、パソコンへAruduino IDEのインストールと書き込む準備。
  5. ESP-WROOM-02へスケッチ書き込み。
  6. 動作確認。

1.IFTTTのアカウント取得からLINE通知の設定まで

こちらにまとめています。

IFTTT(イフト)を使って連携。ESP-WROOM-02のWifiで、IFTTTからLINEへ通知。

 

2.ハードウエアの組み立て

必要なパーツ

ESPr® Developer(ESP-WROOM-02開発ボード): スイッチサイエンス

ESP-WROOM-02 Wi-fiモジュールにUSB-シリアル変換、3.3 V出力レギュレータやリセットスイッチ、動作モード切替用スイッチが搭載されているので、工作には使いやすい。

今回は使用しませんが、用途によっては Wi-Fiモジュール単体と基盤を組み合わせて使うこともあります。

土壌湿度センサー [M-SMS393] : aitendo

土壌の湿度を感知して、A0=アナログ信号とD0=デジタル信号が出力される。今回はアナログ信号を利用します。

スマホアプリBlynkで土壌湿度を表示させるためにも使用します。

KKHMF 1M DS18B20ステンレススチール防水温度プローブセンサArduinoと互換

1-WireのDS18B20がステンレス管に入っている防水型温度センサー。
潅水作業完了通知時に合わせて気温をお知らせするのと、スマホアプリBlynkで気温を表示させます。

UPSLON 小型水中ポンプ 直流DC5V-DC12V 池ポンプ 揚程3m 給水/排水ポンプ 水耕栽培 噴水 自作 DIYポンプ

動作確認用に小型水中ポンプを使います。

シリコントランジスター 2SC1815-GR 10個

水中ポンプのスイッチ用トランジスタ。一個では売っていないのでセット品を買います。

田舎だと近くにパーツショップがありませんので、まあ仕方ない^^;

農作業で使う大きなポンプの動力オンオフにはトランジスタだけでは無理ですので、別途リレーなどと差し替える必要あり。

抵抗キット1/4W (20種計500本入り)

4.7kΩ、220Ω、100Ω各1個づつ使用。

4.7kはDS1820のプルアップ抵抗。220Ωと100Ωは土壌センサーの分圧用。

土壌センサーから出力されESP-WROOM-02のTOUT端子で受ける信号は、1V近辺である必要があるため抵抗を使って分圧します。
ESP-WROOM-02から出力される3.3Vをそのまま土壌センサーにかけると、TOUTで受ける電圧が高すぎるため、正確なセンサー出力が計測されません。

シリコンワイヤー(2m・26AWG・赤) シリコンワイヤー(2m・26AWG・黄)

誤配線防止に何色か用意すると良い。

ELPA スズメッキ線 φ0.4mm HK-SM04H
配線用です。必要に応じて購入。

ジグザグユニバーサル基板 Cタイプ

パーツを配置する基盤の例。何でもいいです。

Bullet ジャンパーピン5色セット JP02

ESP-WROOM-02の機能のひとつ、deep-sleepモードを使う時に必要。(今回詳しくは解説していません。)

ESP-WROOM-02のIO16ピンとRSTを繋ぐ時に使用。スケッチ書き込み時にはジャンパーピンを外します。

普通のピンヘッダ10本セット

その他必要な物。

ESP-WROOM-02用USB ACアダプター

アンドロイドスマホの充電アダプターが使用出来ます。出来るだけアンペア数の大きいもの。

モバイルバッテリーも使用出来ますが、ものによっては誤動作の原因になる事もあるようです。

ポンプ動力用電源

ポンプに合わせた電源を用意して下さい。

 

回路図

ESP-WROOM-02のIO16とRSTをジャンパーピンで繋いでいます。

ESP-WROOM-02の機能のひとつ、deep-sleepモードを使う時に必要。(今回詳しくは解説していません。)

スケッチ書き込み時にはジャンパーピンを外します。deep-sleepモードを使わない場合配線不要。

 

3.センサー値の表示のためのアプリ「Blynk」のインストール。

こちらを参考にして下さい。

ESP-WROOM-02を使う「第2回」 Blynkの設定

4.ESP=WROOM-02へスケッチを書き込むため、パソコンへAruduino IDEのインストールと書き込む準備。

DS18B20を使用するためのArduino IDEのライブラリーは、以下のサイトからダウンロードしてインストールします。
https://github.com/ekstrand/ESP8266wifi
https://github.com/blynkkk/blynk-library
https://github.com/PaulStoffregen/OneWire
https://github.com/milesburton/Arduino-Temperature-Control-Library
https://github.com/PaulStoffregen/Time
https://github.com/jfturcot/SimpleTimer

ESP-WROOM-02を使う「第1回」 Arduino IDEをインストールして、ESP-WROOM-2に書き込む準備まで

5.ESP-WROOM-02へスケッチ書き込み。

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <BlynkSimpleEsp8266.h>
 
#define ONE_WIRE_BUS 14  //温度センサーをESP-WROOM-02の14番ピンに接続
#define Pump_Pin 12     //ポンプ駆動用
extern "C" {
#include "user_interface.h"
}
 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

char auth[] = "***********************";  //Blynkで生成されるAuth Token
 
const char* ssid     = "your SSID";   //無線ルーターのSSID
const char* password = "your password";  //無線ルーターのパスワード

const char* host = "maker.ifttt.com";
const char* secretkey = "IFTTT_key";  //IFTTTのキー
int val1 = 0;
int val3 = 0;
  
void setup() {
  
  pinMode(Pump_Pin, OUTPUT);
  
  Serial.begin(115200);  //デバッグ用にシリアルを開く
  delay(10);
  
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  Blynk.begin(auth, ssid, password);  //WiFiの設定を入れる。

  while (WiFi.status() != WL_CONNECTED) {  //接続が確立するまで、・・・を表示
    delay(500);
    Serial.print(".");
  }

  //ここに来たら、接続完了している。

  Serial.println("");             //改行して繋がったことをシリアルで伝える。
  Serial.println("WiFi connected");  
  
  Serial.println("IP address: ");   //WiFiの状態を表示
  Serial.println(WiFi.localIP());
}

int value = 0;
 
void loop(){

sensors.requestTemperatures(); // Polls the sensors
 
float val1 = sensors.getTempCByIndex(0); // 温度センサーから摂氏気温を取得

  Blynk.virtualWrite(4, val1);  //BlynkアプリでV4ピンを指定する
  
  uint ADC_Value = 0;      //unsigned int 型の入れ物を用意

  ADC_Value = 1024 - system_adc_read();  //土壌センサーから値を取得
    
  Blynk.virtualWrite(5, ADC_Value);  //BlynkアプリでV5ピンを指定する
  
  Serial.println("");
  Serial.println("TEMP:" + String(val1));
  Serial.println("MOIST:" + String(ADC_Value));
  ++value; 

  char* event = "";
  if (ADC_Value < 130) {     //設定した土壌センサー値以下であれば、eventで設定したIFTTTイベントを実行
    event = "KANSUI";
    digitalWrite(Pump_Pin,HIGH); //ポンプの電源ON
    delay(1000 * 3);             //指定した時間(ミリ秒)
    digitalWrite(Pump_Pin,LOW);  //ポンプの電源OFF
  }

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  // We now create a URI for the request         //IFTTTへ投稿するためのURL作成:始まり
  String url = "/trigger/";
  url += event;
  url += "/with/key/";
  url += secretkey;
  url += "?value1=";
  url += String(val1);
  url += "&value2=";
  url += String(ADC_Value);
  url += "&value3=";
  url += String(val3);

  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");         //IFTTTへ投稿するためのURL作成:ここまで
  delay(1000);

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");

  //ESP.deepSleep(300 * 1000 * 1000, RF_DEFAULT); //復帰までのタイマー時間設定
  //delay(1000);
}

これで自動潅水装置の完成です。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

この記事の著者

toru

1966年訓子府町生まれの訓子府育ち。玉葱や米、メロンを栽培する農家です。一眼レフを本格的に始めたのは2005年。仕事の時でもいつでもカメラを持ち歩く自称農場カメラマン。普段の生活を撮るのが主で、その他ストロボを使っての商品撮影、スタジオ撮影も。愛好家グループで年1回写真展を行っている。農機具の改造や作製、電子工作など、モノづくりが大好きです。

この著者の最新の記事

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

2019年1月
« 12月    
 123456
78910111213
14151617181920
21222324252627
28293031  

カテゴリー

ページ上部へ戻る