0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Spresense+LTE拡張ボード で IIJ Machinist を使用する

この記事について

Spresense+LTE拡張ボード を使用して、IIJ Machinist を利用して値を可視化します。
以前投稿した ESP-WROOM-02/32 で IIJ Machinist を使用する の更新版です。

IIJ Machinist Client ライブラリ

簡単に使うためのライブラリを作成してあります。
ESP32/ESP8266に加えて Spresense でも使用できるようにバージョンアップしました。

使用方法

ライブラリのインストール方法

上記ページより、緑の "Clone or download" のボタンを押し、続いて "Download ZIP"のリンクをクリックして、ファイルをダウンロードしてください。
Arduino IDE より、メニューの スケッチ → ライブラリをインクルード → zip形式のライブラリをインストール を選択し、ダウンロードしたzipを選択すれば使用可能になります。

事前準備(Arduino IDE)

Spresense+LTE拡張ボードを使用して IIJMachinistClient のライブラリを使用するには、NTPClientArduinoHttpClient を追加する必要があります。
以下の手順で、ライブラリを追加します。

  1. Arduino IDE のメニューから、ツール→ライブラリを管理... を選択します。
  2. 「ライブラリマネージャ」のダイアログが開くので、"NTPClient" を検索してインストールします。
  3. 同様に、"ArduinoHttpClient" を検索してインストールします。

事前準備(Machinist)

以下のことをやっておきます。

  • Machinist にサインアップして、アカウントを作成します(現時点では無料です)。
  • Machinistのマニュアル(Getting Started)を軽く読んでおきます。
  • Machinistにログインし、管理UIからプロフィールの画面からAPIキーを取得しておきます。
  • Machinistの管理UIから、エージェントを1つ作成しておきます。

実装

Arduino IDE のメニューから、ファイル→スケッチ例→IIJMachinistClientrandom_value_sendor_for_spresenseを選択します。
スケッチ例を開くと以下のようなコードが表示されます。
これは、乱数を Machinist にデータ送信するだけのプログラムです。

random_value_sender_for_spresense.ino
#include <LTE.h>
#include "IIJMachinistClient.h"

#define LTE_APN       "apn"      // replace your APN
#define LTE_USER_NAME "user"     // replace with your username
#define LTE_PASSWORD  "password" // replace with your password

#define MACHINIST_API_KEY "YOUR Machinist API KEY here"

LTE lteAccess;
IIJMachinistClient c(MACHINIST_API_KEY);

void setup()
{
  Serial.begin(115200);
  Serial.println();
  delay(3000);

  while (true) {
    if (lteAccess.begin() == LTE_SEARCHING) {
      if (lteAccess.attach(LTE_APN, LTE_USER_NAME, LTE_PASSWORD) == LTE_READY) {
        Serial.println("attach succeeded.");
        break;
      }
      Serial.println("An error occurred, shutdown and try again.");
      lteAccess.shutdown();
      sleep(1);
    }
  }

  randomSeed(analogRead(A0));
  c.setDebugSerial(Serial);
  c.init();
}

void loop()
{
  float value = (float)random(10000) / 100.;

  //あらかじめ Machinist の UI から "test" という名称の Agent を作成しておきます。
  int s = c.post("test", "NAMESPACE", "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()関数内で、LTE回線を接続後、c.init() 関数で IIJMachinistClientの初期化を行います。

IIJMachinistClient c(MACHINIST_API_KEY);

void setup()
{
  // ここでLTEを接続しておく
    ....
  // 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のページの方にいただけるとありがたいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?