Ambient とは
はじめに、Ambientについて少し調べてみました。
AmbientはIoTデータの可視化サービスです。
マイコンなどから送られるセンサデータを受信し、蓄積し、可視化(グラフ化)します。
https://ambidata.io/
ふむふむ。なにやら便利そうなサービスだな。(どうせ面倒くさい設定が必要なんだろうなぁ。。)
簡単、でも強力なグラフ化機能
AmbientはIoTのアイデアをなるべく簡単にプロトタイプするお手伝いをします。細かな初期設定をしなくても送ったデータをリアルタイムでグラフ化します。
使い方は簡単
Ambientを使うには、まずユーザー登録(無料)をします。お使いのマイコンがArduino、mbed、Raspberry Piであればライブラリとサンプルプログラムがあるので、それをコピーし、カスタマイズするのが一番簡単です。
https://ambidata.io/
要するに必要なのは無料のユーザ登録のみ。ほんとかよ。。(未来の自分 < ほんまに簡単やん!)
調べる前は名前からして海外の会社かと思っていましたが、どうやら日本の会社のようです。ドキュメントやUIも全て日本語表記なので純日本人の私にとっては大変ありがたいです。他には、「公開ボード」というサービスが面白かった。Ambientのサービスを使った実際の活用事例が任意で公開されている。どれもリアルタイムで動いているものなので、非常に参考になった。こんな感じ↓
実際に使ってみた
というわけでほんの少しだけ触ってみた。
今回はM5stackとそれに搭載されたESP32を使って、計測したセンサデータをAmbientに送信・表示してみた。センサーはBME280を使用して、温湿度・気圧を計測してみました。
使用部品
- M5stack
- BME280
- ブレッドボード
- ジャンピングワイヤー
動かしてみた
やってみたことはざっくりこんな感じ↓
- M5Stackを使うためのArduinoの環境設定
- USBドライバーのインストール
- ESP32 Arduino Coreのインストール
- M5Stackライブラリーのダウンロード
- M5stackの動作確認
- 簡単なプログラムを使って、M5stackの動作を確認
- 簡単なプログラムを使って、M5stackの動作を確認
- Ambientライブラリーのインストール
- Githubよりライブラリをインストールし、ArduinoIDEでライブラリをインクルード
- Githubよりライブラリをインストールし、ArduinoIDEでライブラリをインクルード
- M5stack と BME280 の接続
- こんな感じ↓
- こんな感じ↓
- BME280 の動作確認
- 計測した温湿度・気圧をM5stackのLCDに表示
- 計測した温湿度・気圧をM5stackのLCDに表示
- BME280 で計測したデータを Ambientに送信
- こちらもライブラリが用意されているので、ダウンロードしてビルド
- こちらもライブラリが用意されているので、ダウンロードしてビルド
以上。
最後に、Ambientのチャンネルホームページ と 使用したコードを載せておきます。

(左から、気温、湿度、大気圧)
/*
* 2023.03.02, tko
* M5StackとBME280をI2C接続し、温度、湿度、気圧を測定し表示
*/
#include <M5Stack.h>
#include <Wire.h>
#include "BME280.h"
#include "Ambient.h"
#define PERIOD 60
BME280 bme280;
WiFiClient client;
Ambient ambient;
const char* ssid = "IODATA-d7a768-2G";
const char* password = "6130466465256";
unsigned int channelId = 76075; // AmbientのチャネルID
const char* writeKey = "f0dd626b258b5898"; // ライトキー
void setup(){
M5.begin();
Wire.begin(); // I2Cの初期化
Serial.begin(74880);
delay(100);
Serial.println("\r\nM5Stack+BME280->Ambient test");
WiFi.begin(ssid, password); // Wi-Fi APに接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
delay(100);
}
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
pinMode(21, INPUT_PULLUP); //デファルトのSDAピン21 のプルアップの指定
pinMode(22, INPUT_PULLUP); //デファルトのSDAピン22 のプルアップの指定
bme280.begin(); // BME280の初期化
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
}
void loop() {
int t = millis();
float temp, humid, pressure;
// BME280で温度、湿度、気圧を測定する
temp = (float)bme280.readTemperature();
humid = (float)bme280.readHumidity();
pressure = (float)bme280.readPressure();
if (pressure > 800.0) { // 電源投入直後に異常値が読めたら捨てる
M5.Lcd.printf("temp: %2.2f", temp);
M5.Lcd.printf(" humid: %0.2f", humid);
M5.Lcd.printf(" pressure: %f\r\n", pressure);
// 温度、湿度、気圧、CO2、TVOCの値をAmbientに送信する
ambient.set(1, String(temp).c_str());
ambient.set(2, String(humid).c_str());
ambient.set(3, String(pressure).c_str());
ambient.send();
}
t = millis() - t;
t = (t < PERIOD * 1000) ? (PERIOD * 1000 - t) : 1;
delay(t);
}
感想
非常に使いやすい。UIもシンプルだし、設定も簡単だし。
計測したデータは、csv形式で簡単に取得できるし、工夫次第では色々と遊べそう。
前回組み立てたM5stick C(plus) の ジャイロセンサーを使ってシステム同定とかしてみると面白そう。
(いつかやろう)
というわけで、最後まで読んでいただきありがとうございました。
コメント