Arduino(ESP-WROOM-02)で測定した値をAmbientで表示する

今回は測定した温度をインターネット側に飛ばします。
これにより、スマートフォンなどで、どこにいても測定値を確認できます。

測定値を送信する先は 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で電源供給できれば起動します。

つまり、モバイルバッテリーがあれば、あとはどこにでも設置可能です。

が、今回は乾電池駆動を目指しているので、モバイルバッテリーは却下。
次は乾電池駆動をやってみます。