IoTクラウドサービスとは?

 IoTクラウドサービスは、下の図に示すように、インターネット上にあって、IoTデバイスから送られるセンサデータを受信して、蓄積、可視化するサービスのことを指します。今回は、比較的簡便に利用できる「Ambient(アンビエント)」を利用して、M5Stackからのセンサ情報を表示してみようと思います。

IoTクラウドサービスを使う準備

 Ambientを使うためには、①ユーザ登録、②チャネルを開設、③ライブラリインストールの3つの準備をする必要があります。
 手順①のユーザ登録は、Ambientの登録画面(https://ambidata.io/usr/signup.html)でメールアドレスと任意のパスワードを設定するとメールが届き、メール上のURLを開くことで登録が可能です。そしてログインすると下のような「MYチャネル」が開きます。最初はチャネルもないので、「チャネルを作る」ボタンから作成します。

  そして最後に手順③のライブラリのインストールです。Ambientにデータを送るためのライブラリはArduinoにはあるみたいなのですが、私が使用しているPlatform IOには検索しても出できませんでした汗(2023/6/12現在)

Platform IOにはAmbientライブラリが表示されない

 Ambientのライブラリを探してみると、ここにありましたので、ファイルを適当な場所で展開してそのままフォルダごとPlatform IOの「lib」に移すことでインストールは完了です。

「Ambient ライブラリ」のインストール

サンプルコード

 サンプルコードを書く上で必要なライブラリは以下の3つです。

 <必要ライブラリ>
・M5Stackライブラリ(Platform IOのLibrariesにて「M5Stack」と検索する)
・Ambientライブラリ(このリンクよりダウンロード)
・Si7021ライブラリ(Platform IOのLibrariesにて「Adafruit si7021」と検索する)

サンプルコードを下に示します。wifiのssidとパスワードはそれぞれの環境に応じて変更してください。また、ambient上のチャネルIDやライトキーも環境によって異なるので、ご自身で変更してください。

#include <M5Stack.h>
#include <WiFi.h>
#include <Ambient.h>
#include "Adafruit_Si7021.h"

const char* ssid = "******";
const char* password = "*****";

WiFiClient client;
Ambient ambient;    //ambientオブジェクトの作成

unsigned int chanelid = *******;  //チャネルID
const char* writekey = "**********"; //ライトキー

Adafruit_Si7021 sensor = Adafruit_Si7021(); //Si7021のオブジェクト初期化

void setup() {
  M5.begin();
  WiFi.begin(ssid, password);
   while (WiFi.status() != WL_CONNECTED){ //WiFi接続待ち
    delay(500);
    M5.Lcd.print(".");
  }
  M5.Lcd.print("\nWiFi connected");

  ambient.begin(chanelid,writekey, &client);

  if(!sensor.begin()){ //Si7021の初期化
    Serial.println("did not find si7021");
    while(true){
      delay(0);
    }
  }
  
}

void loop() {
  float temp = sensor.readTemperature();
  float humid = sensor.readHumidity();
  M5.Lcd.printf("temp: %.2f, humid: %2f\r\n", temp, humid);

  ambient.set(1,temp);
  ambient.set(2, humid);
  ambient.send();          //ambientに送信

  delay(60*1000);         //データ送信間隔
}

実行結果

 上記のソースコードを実行すると、自身のチャネルには次のように表示されます。青の実線が温度を示し、赤のグラフが湿度を表しています。また、M5stack上ではAmbientにセンサデータを送信する度に、ログが残るようにしています。また、前回のM5Stackのwebサーバ化とは異なり、インターネットに繋がりさえすればどこでもデータが見られるのはいいですね。

Ambientの自分のチャネルにセンサデータが送られた
M5Stackにもセンサ情報が表示される

 さらにインターネットに接続できるスマホ・タブレット等あれば、Ambientにアクセスすることで、下のようにM5Stackが取得したセンサ情報を確認することができます。

タブレットでセンサ情報を確認

補足:Ambientの仕様

 M5Stackで今回設定した送信間隔は60秒としていますが、Ambientの仕様は次のようになっています。

・保有できるチャネル数:8チャネル
・データの種類:8種類まで
・送信間隔:最小5秒毎
・データ件数:1日最大3000件
・表示可能なチャート数:8個

 Ambientにセンサ情報を送信する場合、この仕様を満たすように送信回数等を設定する必要があります。例えば、5秒間隔でデータを送信したとすると、4時間10分で3000件に到達する計算になるので、1日中計測したいのであればサンプリングレートを下げる必要があります。とはいえ、今回の温度・湿度といった情報は、短時間に劇的に変化する可能性が低いので、測定する対象に合わせて5分や10分に1回計測・送信する頻度くらいが好ましいかと思います。

まとめ

 今回はIoTクラウドサービスとして利用しやすい「Ambient」を利用して、M5stackが取得したセンサ情報をクラウドに送ってみました。クラウドサービスのため、ネット環境さえ繋がっていればどこでもセンサ情報が見られるので、使い勝手としては優れていると感じました。