- 2018-12-29
- ESP-WROOM-02, 電気工作
- コメントを書く
ESP=WROOM-02を使って初めて作ったのは、温度センサーの値をスマホで表示するというものでした。
それから何か発展したものを何かと考えてました。
折角なら自分の仕事(農業)に活かせるものと、今回のを考えました。
最終的な目標。
稲の苗床の乾燥塩梅をセンサーで計測。
乾いたらポンプを回して潅水して、作業終了をスマホのLINEに通知。
いきなり本番というわけにはいかないので、金魚鉢で使えそうなポンプを動かすことにします。
完成までの手順
- IFTTTのアカウント取得からLINE通知の設定まで。
- ハードウェアの組み立て。
- センサー値の表示のためのアプリ「Blynk」のインストール。
- ESP=WROOM-02へスケッチを書き込むため、パソコンへAruduino IDEのインストールと書き込む準備。
- ESP-WROOM-02へスケッチ書き込み。
- 動作確認。
1.IFTTTのアカウント取得からLINE通知の設定まで
こちらにまとめています。
2.ハードウエアの組み立て
必要なパーツ
ESPr® Developer(ESP-WROOM-02開発ボード): スイッチサイエンス
ESP-WROOM-02 Wi-fiモジュールにUSB-シリアル変換、3.3 V出力レギュレータやリセットスイッチ、動作モード切替用スイッチが搭載されているので、工作には使いやすい。
今回は使用しませんが、用途によっては Wi-Fiモジュール単体と基盤を組み合わせて使うこともあります。
土壌の湿度を感知して、A0=アナログ信号とD0=デジタル信号が出力される。今回はアナログ信号を利用します。
スマホアプリBlynkで土壌湿度を表示させるためにも使用します。
KKHMF 1M DS18B20ステンレススチール防水温度プローブセンサArduinoと互換
1-WireのDS18B20がステンレス管に入っている防水型温度センサー。
潅水作業完了通知時に合わせて気温をお知らせするのと、スマホアプリBlynkで気温を表示させます。
UPSLON 小型水中ポンプ 直流DC5V-DC12V 池ポンプ 揚程3m 給水/排水ポンプ 水耕栽培 噴水 自作 DIYポンプ
動作確認用に小型水中ポンプを使います。
水中ポンプのスイッチ用トランジスタ。一個では売っていないのでセット品を買います。
田舎だと近くにパーツショップがありませんので、まあ仕方ない^^;
農作業で使う大きなポンプの動力オンオフにはトランジスタだけでは無理ですので、別途リレーなどと差し替える必要あり。
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
配線用です。必要に応じて購入。
パーツを配置する基盤の例。何でもいいです。
ESP-WROOM-02の機能のひとつ、deep-sleepモードを使う時に必要。(今回詳しくは解説していません。)
ESP-WROOM-02のIO16ピンとRSTを繋ぐ時に使用。スケッチ書き込み時にはジャンパーピンを外します。
その他必要な物。
ESP-WROOM-02用USB ACアダプター
アンドロイドスマホの充電アダプターが使用出来ます。出来るだけアンペア数の大きいもの。
モバイルバッテリーも使用出来ますが、ものによっては誤動作の原因になる事もあるようです。
ポンプ動力用電源
ポンプに合わせた電源を用意して下さい。
回路図
ESP-WROOM-02のIO16とRSTをジャンパーピンで繋いでいます。
ESP-WROOM-02の機能のひとつ、deep-sleepモードを使う時に必要。(今回詳しくは解説していません。)
スケッチ書き込み時にはジャンパーピンを外します。deep-sleepモードを使わない場合配線不要。
3.センサー値の表示のためのアプリ「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); }
これで自動潅水装置の完成です。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。