Arduino/C++でAmbientにデーターを送信するライブラリーです。プログラムサンプルは「Arduino ESP8266で温度・湿度を測定し、Ambientに送ってグラフ化する」の「プログラム」を、ライブラリーのインストール方法は同じページの「Ambientライブラリーのインポート」をご覧ください。
Ambient::begin()
説明
Ambientの初期化(使う準備)をします。
構文
#include “Ambient.h” bool Ambient::begin(unsigned int channelId, const char * writeKey, WiFiClient * c[, const char * readKey]);
引数
unsigned int channelId; // データーを送信するチャネルのチャネルId const char * writeKey; // ライトキー WiFiClient * c; // WiFiClientのポインター
const char * readKey; // リードキー(オプション)
戻り値
true: 成功 false: 不成功
Ambient::set()
説明
Ambientに送信するデーターをパケットに設定します。Ambientでは8種類までのデーターを送信できます。set()は何種類目のデーターかを示す数値とそのデーターを指定します。
構文
#include “Ambient.h” bool Ambient::set(int field, char * data); bool Ambient::set(int field, int data); bool Ambient::set(int field, double data);
引数
int field; // 何種類目のデーターか示す数値。1から8が指定できます。 char * data; // 送信する数値を文字列にしたもの。 int data; // 数値はintまたはdouble型で渡すこともできます。 double data;
戻り値
true: 成功 false: 不成功
Ambient::setcmnt()
説明
Ambientにデータを送信する際にコメントを付けて送ることができます。詳しくは「リストチャート、表示/非表示の制御、コメント」をご覧ください。
構文
#include “Ambient.h”
bool Ambient::setcmnt(const char * cmnt);
引数
const char * cmnt; // コメントの文字列
戻り値
true: 成功 false: 不成功
Ambient::clear()
説明
パケットに設定したデーターを消去します。Ambient::send()またはAmbient::bulk_send()で
データーを送信した後は、設定したすべてのデーターは消去されます。
構文
#include “Ambient.h” bool Ambient::clear(int field);
引数
int field; // 何種類目のデーターかを指定します。1から8が指定できます。
戻り値
true: 成功 false: 不成功
Ambient::send()
説明
begin()で指定したチャネルにset()で設定したデーターを送信します。Ambientはデーターを受信した時刻をデーターの生成時刻として記録します。送信後、パケットに設定したデーターは消去されます。また、送信後、AmbientサーバーからのHTTPステータスコードがAmbient::statusにセットされます。
構文
#include “Ambient.h” bool Ambient::send([uint32_t tmout]);
引数
uint32_t tmout; // サーバー接続のタイムアウト値(ミリ秒)。省略時は30秒
戻り値
true: 成功 false: 不成功
Ambient::bulk_send()
説明
begin()で指定したチャネルに複数件のデーターをまとめて送信します。データーは下記に示すJSON形式で渡し、データーの中に生成時刻を含める必要があります。送信後、AmbientサーバーからのHTTPステータスコードがAmbient::statusにセットされます。
構文
#include “Ambient.h” int Ambient::bulk_send(char * buf[, uint32_t tmout]);
引数
char * buf; // データーへのポインター uint32_t tmout; // サーバー接続のタイムアウト値(ミリ秒)。省略時は30秒
データーは次のようなJSON形式にします。
{ “writeKey” : “ライトキー”, “data” : [ {“created” : “YYYY-MM-DD HH:mm:ss.sss”, “d1” : “値”, “d2” : “値”, ...}, {“created” : “YYYY-MM-DD HH:mm:ss.sss”, “d1” : “値”, “d2” : “値”, ...}, ... {“created” : “YYYY-MM-DD HH:mm:ss.sss”, “d1” : “値”, “d2” : “値”, ...} ] }
見やすくするために改行やインデントを入れてありますが、実際には改行やインデントは不要です。“created”はデーターの生成時刻で、値は“YYYY-MM-DD HH:mm:ss.sss”という形式か、 数値を渡します。 数値を渡した場合は1970年1月1日00:00:00からのミリ秒と解釈されます。“created”の後にはデーターを”キー”:”値”という形式で並べます。 キーは”d1″、”d2″、”d3″、”d4″、”d5″、”d6″、”d7″、”d8″のいずれかを指定します。
さらに、次のように“time”: 1 を指定すると、数値は「秒(協定世界時(UTC)の1970年1月1日00:00:00からの)」として扱われます。“YYYY-MM-DD HH:mm:ss.sss”という形式の場合は“time”: 1を指定しても無視します。
{ “writeKey” : “ライトキー”, “data” : [ {“created” : 数値, “time” : 1, “d1” : “値”, “d2” : “値”, ...}, {“created” : 数値, “time” : 1, “d1” : “値”, “d2” : “値”, ...}, ... {“created” : 数値, “time” : 1, “d1” : “値”, “d2” : “値”, ...} ] }
戻り値
実際に送信できたバイト数が返されます。
Ambient::read()
説明
begin()で指定したチャネルからデーターを受信します。受信データは、次のようなJSON形式の文字列です。受信後、AmbientサーバーからのHTTPステータスコードがAmbient::statusにセットされます。
[{"d1": 値1, "d2": 値2, "d3": 値3, ..., "created": :"2021-04-02T00:32:42.334Z}]
構文
#include “Ambient.h” bool Ambient::read(char * buf, int len[, int n[, uint32_t tmout]]);
引数
char * buf; // データが返されるバッファ
int len; // バッファのバイトサイズ
int n; // 受信する件数。省略時は1
uint32_t tmout; // サーバー接続のタイムアウト値(ミリ秒)。省略時は30秒
戻り値
true: 成功
false: 不成功
データの取り出し
read()で取得したデータはJSON形式の文字列なので、Arduino_JSONなどのライブラリを使って解析することもできますが、Ambientからのデータは単純な形式なので、1件のデータなら次のようにsscanf関数で値を取り出すこともできます。
char buf[128];
int d1, d2, d3;
ambient.read(buf, sizeof(buf));
sscanf(buf, "[{\"d1\":%d,\"d2\":%d,\"d3\":%d}]", &d1, &d2, &d3);
Ambient::delete_data()
説明
begin()で指定したチャネルに保存された全てのデーターを削除します。部分的に削除する機能はありません。 Ambientサイトのチャネルページの「データー削除」ボタンと同じ動作をします。 チャネルそのものやチャネルの設定情報は削除されずに残ります。 削除したデーターは復元できないので、注意してください。
構文
#include “Ambient.h” bool Ambient::delete_data(const char * userKey[, uint32_t tmout]);
引数
const char * userKey; // ユーザーキー
uint32_t tmout; // サーバー接続のタイムアウト値(ミリ秒)。省略時は30秒
戻り値
true: 成功 false: 不成功
Ambient::getchannel()
説明
端末ごとの固有のキー(デバイスキー)を送り、対応するチャネルIDとライトキーを取得します。詳しくは「複数台のIoT端末を同一プログラムで動かす」を御覧ください。
構文
#include “Ambient.h” bool Ambient::getchannel(const char * userKey, const char * devKey, unsigned int & channelId, char * writeKey, int len, WiFiClient * c[, uint32_t tmout]);
引数
const char * userKey; // ユーザーキー const char * devKey; // デバイスキー unsigned int & channelId; // チャネルIDのアドレス char * writeKey; // ライトキー int len; // ライトキーエリアのバイト数 uint32_t tmout; // サーバー接続のタイムアウト値(ミリ秒)。省略時は30秒
戻り値
true: 成功 false: 不成功