はじめまして、外部ライター ワンフットシーバス 田中正吾です。ウフル様とはMilkcocoaやenebularを使ってみて事例づくりやそれを伝えることを中心に関わっております。
個人的にクローズドな技術交流会がありまして結構な寒冷地に行ってきたので、enebularのInfoMotionで室内と室外の温度変化を測定してみました。
今回やること
- 測定機器はスイッチサイエンス製のESPr Developer(ピンソケット実装済)にESPr Developer用GROVEシールドを装着してデジタル温度・湿度センサProに設定を行う
- 測定先はMilkcocoaに投げてenebularのInfoMotionで可視化の準備をする
- いざ宿泊しているホテルの室内から室外に出て温度変化と湿度の変化を測定する
測定機器の設定
まず測定機器の設定をします。
スイッチサイエンス製の以下の製品を使います。
D12のGROVEの差込口に挿して、以下のようにプログラムを書き込みます。(室内で行いました)
Milkcocoa以外のセンサーをつなげるソースコードは、umi_kappaさんのESP-WROOM-02 Arduino互換ボードで温湿度センサーを使うを参考にさせていただきました。
#include #include // ライブラリを読み込む #include "DHT.h" /************************* WiFi Access Point *********************************/ #define WLAN_SSID "WLAN_SSID" #define WLAN_PASS "WLAN_PASS" /************************* Milkcocoa *********************************/ #define MILKCOCOA_APP_ID "MILKCOCOA_APP_ID" #define MILKCOCOA_DATASTORE "MILKCOCOA_DATASTORE " #define MILKCOCOA_SERVERPORT 1883 const char MQTT_SERVER[] PROGMEM = MILKCOCOA_APP_ID ".mlkcca.com"; const char MQTT_CLIENTID[] PROGMEM = __TIME__ MILKCOCOA_APP_ID; WiFiClient client; Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID); // 接続するピン #define SENSOR_PIN 12 // 今回は温湿度センサーはDHT22 #define DHT_TYPE DHT22 // センサーのインスタンス DHT dht(SENSOR_PIN, DHT_TYPE); void setup() { Serial.begin(115200); // センサ初期化 dht.begin(); // Serial.println(F("Milkcocoa SDK demo")); // // Connect to WiFi access point. Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // onpush Serial.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) ); // Serial.println("---- start DHT22 Milkcocoa----"); } void loop() { milkcocoa.loop(); delay(5000); // 湿度を取得 float humidity = dht.readHumidity(); // 温度を取得 float temperature = dht.readTemperature(); // センサーから値を取得できたか判定 if (isnan(humidity) || isnan(temperature)) { Serial.println("sensor error."); // loop()関数の始めに戻る return; } // push DataElement elem = DataElement(); elem.setValue("t", temperature); elem.setValue("h", humidity); // Milkcocoaに送信 milkcocoa.push(MILKCOCOA_DATASTORE, &elem); } void onpush(DataElement *elem) { Serial.println(elem->getInt("t")); Serial.println(elem->getInt("h")); };
enebularのInfoMotionで可視化の準備をする
では、測定先はMilkcocoaに投げてenebularのInfoMotionで可視化の準備をします。
DataSourceで新しいDataSourceを作成します。
今回の送りこむMilkcocoaのAppIDとDataSourceを設定します。
つづいて、InfoMotionで新しいグラフを作成します。
BarChartで温度を示す t 値を見張るようにしておきます。
それでは、いざ測定
では、宿泊しているホテルの室内から室外に出て温度変化と湿度の変化を測定してみます。
まず室内の様子。
乾燥していますが、あたたかいですね。
いざ外に移動してみます。さむい。。。
ぐんぐんさがります。
数分待ってみると、無事、天気予報と同じ-1℃程度になりました。よかった。そしてたんまり雪が積もっていたので、湿度は高めでした。センサーに温度が伝わりきるまでに少々時間がかかりますね。
可視化を確認
さて、さきほどのグラフはどうなっているでしょう?
室内ですこし温まったら確認してみました。
みてみると無事測定できてます!
また、別立てで温度と湿度を比べるグラフ形式では、室内では温度が高く乾燥しているところから、室外へ行くと温度は低いが湿度が高いクロスした現象が確認できました。
このように、ひとまずセンサーを取り込んでみて、環境の様子を確認することがすぐできるenebularおもしろいですね。
また測定の機会があればお知らせしていきます。
余談
一緒に行った方にこっそり撮影していただいてました。なかなかあやしいw