サービス終了のお知らせ
IIJ Machinist はサービスを終了いたしました。ご愛顧ありがとうございました。
以下の記事は過去の記録として残してありますが、現在は動作させることが出来ません。ご了承ください。
この記事について
ESP-WROOM-02(以下ESP8266), ESP-WROOM-32(以下ESP32) から、IIJ Machinist を利用して値を可視化します。
いきなりですが
以前書いた記事 にもさらっと書いたのですが、簡単に使うためのライブラリを作成してあります。
前回の記事からの変更点として、前回は ESP32 でしか動作しなかったものを、ESP8266 でも動作するようにバージョンアップしました。
使用方法
ライブラリのインストール方法
上記ページより、緑の "Clone or download" のボタンを押し、続いて "Download ZIP"のリンクをクリックして、ファイルをダウンロードしてください。
Arduino IDE より、メニューの スケッチ → ライブラリをインクルード → zip形式のライブラリをインストール を選択し、ダウンロードしたzipを選択すれば使用可能になります。
事前準備
以前書いたことのコピペですが、以下のことをやっておきます。
- Machinist にサインアップして、アカウントを作成します(現時点では無料です)。
- Machinistのマニュアル(Getting Started)を軽く読んでおきます。
- Machinistにログインし、管理UIからプロフィールの画面からAPIキーを取得しておきます。
- Machinistの管理UIから、エージェントを1つ作成しておきます。
実装
サンプルを開くと以下のようなコードが表示されます。
これは、乱数を Machinist にデータ送信するだけのプログラムです。
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include "IIJMachinistClient.h"
#define WIFI_ID "YOUR WIFI SSID HERE"
#define WIFI_PASS "YOUR WIFI PASSWORD HERE"
#define MACHINIST_API_KEY "YOUR Machinist API KEY here"
IIJMachinistClient c(MACHINIST_API_KEY);
void setup()
{
Serial.begin(115200);
Serial.println();
delay(3000);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_ID, WIFI_PASS);
// wait for WiFi connection
Serial.print("\nWaiting for WiFi to connect...");
while ((WiFi.status() != WL_CONNECTED))
{
Serial.print(".");
delay(1000);
}
Serial.println(" connected");
randomSeed(analogRead(0));
c.setDebugSerial(Serial);
c.init();
}
void loop()
{
float value = (float)random(10000) / 100.;
//あらかじめ Machinist の UI から "test" という名称の Agent を作成しておきます。
int s = c.post("test", "NAME\\SPACE", "NAME", value, "KEY", "VALUE");
if (s == 200)
Serial.println("OK");
else
Serial.println("NG status=" + String(s));
delay(60 * 1000);
}
ポイント解説
サンプルのコードはわかりにくいかもしれませんが、やるべきことは非常にシンプルです。
ライブラリのinclude
#include "IIJMachinistClient.h"
インスタンス生成 & 初期化
IIJMachinistClient
のインスタンスをグローバルで生成しておきます。引数は Machinist の UIから取得したAPIキーの文字列です。
setup()
関数内で、Wi-Fiに接続後、c.init()
関数で IIJMachinistClientの初期化を行います。
IIJMachinistClient c(MACHINIST_API_KEY);
void setup()
{
// ここでWi-Fiに接続しておく
....
// Machinist Clientの初期化
c.init();
}
値の送信
c.post()
関数を使用してMachinistへ値を送信します。センサなどから取得した値を送ればOKです。
post()
関数は引数により何種類かありますので、詳細は githubの説明ページ をご参照ください。
void loop()
{
...
// 単純な値送信
int s = c.post("Agent文字列", "namespace文字列", "name文字列", 送信値);
// タグ付きでの値送信
int s = c.post("Agent文字列", "namespace文字列", "name文字列", 送信値, "Tagキー文字列", "Tag値文字列");
// 時間を指定しての値送信
int s = c.post("Agent文字列", "namespace文字列", "name文字列", 送信値, "Tagキー文字列", "Tag値文字列", unixtime値);
...
}
さいごに
このライブラリはIIJ非公式です。私が勝手に作ったものですので、ご質問・ご要望はIIJに送らないで、この記事なりgithubのページの方にいただけるとありがたいです。