今回は測定した温度をインターネット側に飛ばします。
これにより、スマートフォンなどで、どこにいても測定値を確認できます。
測定値を送信する先は Ambient にしました。
AmbientはIoTデーターの可視化サービスです。
ambidata.io
マイコンなどから送られるセンサーデーターを受信し、蓄積し、可視化(グラフ化)します。
測定値(温度でも湿度でも照度でも)を送信すれば、グラフ表示してくれるサービスです。
なので、こういったIoT機器を作り、測定した値をサクッと確認したい場合に重宝します。
ハードウェア構成は前回『Arduino(ESP-WROOM-02)で温度センサーDS18B20を制御する』から変更なしです。
Ambientへ送信する処理は、Ambientが提供するライブラリーを利用します。
ライブラリーの登録などは、こちらを参照してください。
Arduino ESP8266で温度・湿度を測定し、Ambientに送ってグラフ化する
以降、上記の記事とはセンサーが異なるだけなので、基本的な流れは同じです。
温度センサーDS18B20で測定した値をAmbientに送信するプログラムがこちら。
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include "Ambient.h"
#include <DallasTemperature.h>
extern "C" {
#include "user_interface.h"
}
#define PERIOD 30
#define ONE_WIRE_BUS 14 //温度センサーをESP-WROOM-02の14番ピンに接続
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "WIFI_PASSWORD";
unsigned int channelId = 0000;
const char* writeKey = "CHANNEL_WRITEKEY";
WiFiClient client;
Ambient ambient;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{
wifi_set_sleep_type(LIGHT_SLEEP_T);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
ambient.begin(channelId, writeKey, &client);
sensors.begin();
}
void loop()
{
float temp;
sensors.requestTemperatures(); // 温度取得
temp = sensors.getTempCByIndex(0); // 温度センサーから摂氏気温を取得
ambient.set(1, temp);
ambient.send();
delay(PERIOD * 1000);
}
14~17行目の文字列を環境に合わせて変更してください。
上から、SSID、SSIDのパスワード、AmbientのチャネルID、チャネルのライトキーです。
これで30秒ごとに温度を測定してAmbientに送信します。
結果をAmbientで見てみると、こんな感じに。
夜中、測定した状況です。田舎の家は冷えますね ^^;
なお、グラフはいろいろとカスタマイズできますが、ほぼデフォルトです。
ひとまずAmbientでのグラフ表示は完了しました。
そういえば、Ambientへの送信ってhttp(POST)通信でした。
IoTにはMQTTが軽量で向いているようだけど、あんまり動いている話を聞かないですね。
さて。このArduino(ESP-WROOM-02)は、プログラム(スケッチ)を一度書き込めば、あとはPCから外してもUSBで電源供給できれば起動します。
つまり、モバイルバッテリーがあれば、あとはどこにでも設置可能です。
が、今回は乾電池駆動を目指しているので、モバイルバッテリーは却下。
次は乾電池駆動をやってみます。