これまでの講座で「LEDの点灯」「温湿度センサーの使い方」「無線通信でのデータ送信」を学びました。今回の記事では、これらの技を使って測定スケッチを書いていきます。完成まであと一歩ですので頑張っていきましょう!
用意するもの
- ESP32-WROOM-32 開発ボード(DOIT社 V1互換機)
- 温湿度センサーモジュール DHT22(AM2302)
準備
- 開発ボードのGND, 3.3v, 15ピンをセンサーモジュールと繋ぐ
- Googleスプレッドシートの設定などは前回を参照
スケッチ
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <DHT.h>const int PIN_DHT = 15;
const int PIN_LED = 2;
DHT dht(PIN_DHT,DHT22);// 接続先のSSIDとパスワード
const char* ssid = "××××××××××××"; //無線ルーターのssidを入力
const char* password = "××××××××××"; //無線ルーターのパスワードを入力
void setup() {
Serial.begin(115200);
dht.begin(); //dhtライブラリの初期化
pinMode (PIN_LED, OUTPUT);
}
void loop() {
sendData();
delay(10000);
}
//WiFiに接続
void connectWiFi(){int i = 0;
Serial.print("ssid:");
Serial.print(ssid);
Serial.println(" に接続します。");WiFi.begin(ssid, password);
Serial.print("WiFiに接続中");
//接続施行中はボード上のLEDが点滅。
//wifiへの接続ができなかった場合、LEDを5回短点灯させる
while(WiFi.status() != WL_CONNECTED) {
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite(PIN_LED, LOW);
delay(500);
Serial.print(".");
i++;//30秒間応答がなかった場合は接続失敗
if (i == 30) {
Serial.println("wifiへの接続に失敗しました");for (int j = 0; j < 5; j++) {
digitalWrite(PIN_LED, HIGH);
delay(200);
digitalWrite(PIN_LED, LOW);
delay(200);
}
//WiFiを切断
WiFi.mode(WIFI_OFF);
return;
}
}Serial.println(" "); //改行
Serial.println("接続しました。");//IPアドレスの表示
Serial.print("IPアドレス:");
Serial.println(WiFi.localIP());
}
//測定データの送信
void sendData(){WiFiClientSecure sslclient;
const char* server = "script.google.com";
String url = "https://script.google.com/macros/s/××××××××××××"; //googlescript web appのurlを入力//測定値を準備
float sensor_data1= dht.readTemperature(); //温度の取得
float sensor_data2= dht.readHumidity(); //湿度の取得
float sensor_data3= 12.34; //仮の測定値//wifiに接続
connectWiFi();//測定値の表示
Serial.println(sensor_data1);
Serial.println(sensor_data2);
Serial.println(sensor_data3);//urlの末尾に測定値を加筆
url += "?";
url += "&1_cell=";
url += sensor_data1;
url += "&2_cell=";
url += sensor_data2;
url += "&3_cell=";
url += sensor_data3;// サーバーにアクセス
Serial.println("サーバーに接続中...");//データの送信
//サーバーへの接続ができなかった場合、LEDを3回短点灯させる
if (!sslclient.connect(server, 443)) {
Serial.println("接続に失敗しました");
Serial.println("");//改行for (int i = 0; i < 3; i++) {
digitalWrite(PIN_LED, HIGH);
delay(200);
digitalWrite(PIN_LED, LOW);
delay(200);
}
//WiFiを切断
WiFi.mode(WIFI_OFF);
return;
}Serial.println("サーバーに接続しました");
sslclient.println("GET " + url);
digitalWrite(PIN_LED, HIGH);
delay(1000); //私の環境ではここに待ち時間を入れないとデータが送れないことがある
digitalWrite(PIN_LED, LOW);
sslclient.stop();Serial.println("データ送信完了");
Serial.println("");//改行//WiFiを切断
WiFi.mode(WIFI_OFF);
}
※ブログの書式の関係でtabは入れていません。申し訳ないですがIDEに貼り付け後、見やすいように調整し直して下さい。
解説
※クリックで拡大
IoTで水耕栽培 2,3,4,5回の内容を全て組み合わせてスケッチを書きました。測定間隔は、とりあえず10秒に設定しています。
青色LEDの点灯
青色のLEDが光るタイミングは以下の場合になります。
- wifiへの接続試行中:0.5秒間隔で点灯
- データの送信:1秒間点灯
- サーバーへの接続に失敗:短点灯3回
- wifiへの接続に失敗:短点灯5回
(wifiに接続できないとサーバーにも接続できないため、3+5の計8回短点灯する)
スケッチの書き込みや通信確認などをする時は、開発ボードをパソコンに繋いで行います。そのため、もし不具合が出たとしても画面上ですぐに確認できます。しかし本番の環境ではパソコンは使わず、開発ボードと電源をただ繋げるだけです。動いているのかいないのか、トラブルが起きているのかいないのか…見た目では一切分かりません。
そこで何かの動作している時は、青色LEDが点灯するようにスケッチを組みました。特にwifiやサーバーへの接続ができなかった場合には、短点灯してユーザーに教えてくれます。ちなみに点灯する回数を数えることで、エラーの種類が分かるようになっています。
3つ目の変数《float sensor_data3》
今回は温度と湿度の2種類しか測定しません。そのため3つ目の変数《float sensor_data3= 12.34;》は必要ないです。しかしセンサーの中には「気圧」を同時に測れるものもあるので、今後のために残しておきました。もしもっと多くの項目を取り込みたい場合には、スケッチを書き足して下さい。
今回で測定するための装置構成やスケッチがほぼ完成しました。次回は栽培場所の温湿度を実際に測ってみます。
DSD TECH DHT22 温湿度センサーモジュール AM2302チップ付き
《Amazonでの検索結果はこちら》
「IoTで水耕栽培」シリーズでは温度と湿度を測るのに、DHT22センサーモジュールを使用しています。配線を繋ぐだけですぐにデータを取れるのでとても楽です。
HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード
《Amazonでの検索結果はこちら》
今回、温湿度センサーを繋げたのが「ESP32-WROOM-32 開発ボード」です。wifiだけではなくBluetoothでも接続できるので、使いこなせれば面白いことができそうです。形が微妙に似ているボードもあるので、間違えないように購入しましょう。
HiLetgo BME280 温度 センサー 湿度 センサー 気圧 センサー
《Amazonでの検索結果はこちら》
このモジュールは温度と湿度の他に「気圧」も測ることができます。気圧が分かれば、違った方向から野菜の成長傾向が見えてきそうですね。今後購入してみたいセンターの1つです。
【IoTで水耕栽培 参考記事】
- IoTで水耕栽培 第1回目。目指せ、水耕栽培とウェブの融合!
- IoTで水耕栽培 第2回目。基板上のLEDを光らせましょう
- IoTで水耕栽培 第3回目。センサーモジュールを繋げて温湿度を測定しましょう
- IoTで水耕栽培 第4回目。ESP32開発ボードをインターネットに接続します
- IoTで水耕栽培 第5回目。Googleスプレッドシートに測定データを送信します
- IoTで水耕栽培 第6回目。温湿度センサーで取得したデータを無線で飛ばしましょう
- IoTで水耕栽培 第7回目(最終回)。栽培装置にセンサーを入れて26時間のデータ取りを行います