IoTで水耕栽培 第6回目。温湿度センサーで取得したデータを無線で飛ばしましょう

f:id:haruirosoleil:20200202172209j:plain
 これまでの講座で「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に貼り付け後、見やすいように調整し直して下さい。

 

解説

f:id:haruirosoleil:20200211071241p:plain
※クリックで拡大

 IoTで水耕栽培 2,3,4,5回の内容を全て組み合わせてスケッチを書きました。測定間隔は、とりあえず10秒に設定しています。

 

青色LEDの点灯

f:id:haruirosoleil:20200119181219j:plain
 青色の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で水耕栽培 参考記事】