pdf-icon

Arduino入門

2. デバイス&サンプル

6. アプリケーション

EzData 1.0 - Arduino

1. 機能説明

EzData は M5Stack が提供する IoT クラウドデータストレージサービスで、異なるデバイス間で 唯一のトークン を使用してストレージキューにデータを挿入または取得し、データ共有を実現します。

1.1 紹介

  • Token:データの読み書きアクセスを行うための唯一のフィールド
  • Topic:トークンの下にキュー形式でデータを保存するキー。同一トークン下で保存可能な Topic の数: Topic + List Topic ≤ 100
    • 各 Topic に挿入できるデータは ≤1000
    • setData により新しいデータをキューに挿入し、スタック方式(先入れ後出し)で処理され、常にキューの先頭に追加されます。
    • getData によりキューの先頭のデータを取得します。取得後は元データはキューから削除されます。
  • List Topic:
    • トークンの下にリスト形式でデータを保存するキー。同一トークン下で保存可能な Topic の数: Topic + List Topic ≤ 100
    • addToList により新しいデータをリストの末尾に追加します。
    • getData により指定したインデックスや範囲のリストデータを取得します。返されるデータはリスト形式です。

1.2 Token の取得

UiFlow Web IDE 1.0 バージョン を開き、Blockly リストから EzData オプションをクリックすると、現在のブラウザのトークンを確認できます。トークンの一意性を確保するため、固定のブラウザを使用し、シークレットモードは使用しないでください。

2. サンプルプログラム

このサンプルプログラムでは CoreS3 デバイスを使用して Ezdata のデータ送信・取得テストを行います。コンパイル前に以下の依存ライブラリをインストールし、トークンと Wi-Fi 情報をコードに記入してください。

#include "M5Unified.h"
#include "M5_EzData.h"

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

void setup()
{
    M5.begin();
    M5.Display.println("Wi-Fi connecting...");
    if (setupWifi(ssid, password)) {
        M5.Display.println("Wi-Fi connected!");
    } else {
        M5.Display.println("Wi-Fi connect failed");
    }
}

void loop()
{
    // データ 100 を testData キューの先頭に保存
    if (setData(token, "testData", 100)) {
        M5.Display.println("Success sending data to the testData");
    } else {
        M5.Display.println("Fail");
    }
    delay(5000);

    // データ 3 件を順番に testList の先頭に保存
    for (int i = 0; i < 3; i++) {
        if (addToList(token, "testList", i)) {
            M5.Display.printf("Success sending %d to the list\n", i);
        } else {
            M5.Display.println("Fail");
        }
        delay(100);
    }
    delay(5000);

    // Topic から 1 件のデータを取得し、result に保存
    int result = 0;
    if (getData(token, "testData", result)) {
        M5.Display.printf("Success get data %d\n", result);
    } else {
        M5.Display.print("Fail to get data\n");
    }
    delay(5000);

    // List から複数のデータを取得し、Array に保存
    int Array[3] = {0};
    if (getData(token, "testList", Array, 0, 3)) {
        M5.Display.print("Success get list\n");
        for (int i = 0; i < 3; i++) {
            M5.Display.printf("Array[%d]=%d,", i, Array[i]);
        }
        M5.Display.println("");
    } else {
        M5.Display.println("Fail to get data");
    }
    delay(5000);

    // データ削除
    if (removeData(token, "testData"))
        M5.Display.printf("Success remove data\n");
    else
        M5.Display.println("Fail to remove data");

    if (removeData(token, "testList"))
        M5.Display.printf("Success remove data from the list\n");
    else
        M5.Display.println("Fail to remove data");
    delay(5000);
    M5.Display.fillScreen(BLACK);
    M5.Display.setCursor(0, 0);
}

3. コントロールパネル

データを確認または共有する場合は、以下の URL アドレスにトークンパラメータを渡して EzData コントロールパネルページにアクセスできます。

# https://ezdata.m5stack.com/debugger/?token=dCtdfg3u5id72J8xxxxxxxxxxxxxxx
https://ezdata.m5stack.com/debugger/?token={token}

4. API

4.1 setData

関数プロトタイプ:

int setData(const char *token, const char *topic, int val);

機能説明:

  • データ val を指定した topic キューの先頭に保存

引数:

  • const char *token
    • Ezdata トークン
  • const char *topic
    • Ezdata のデータ topic
  • int val
    • 書き込む数値

戻り値:

  • int:
    • 1: 送信成功
    • 0: 送信失敗

4.2 getData

関数プロトタイプ:

int getData(const char *token, const char *topic, int &result);

機能説明:

  • 指定した topic キューの先頭からデータを取得し、result に保存

引数:

  • const char *token
    • Ezdata トークン
  • const char *topic
    • Ezdata のデータ topic
  • int &result
    • データを格納する変数参照

戻り値:

  • int:
    • 1: 読み取り成功
    • 0: 読み取り失敗

4.3 addToList

関数プロトタイプ:

int addToList(const char *token, const char *list, int val);

機能説明:

  • データを指定したデータリストの先頭に保存

引数:

  • const char *token
    • Ezdata トークン
  • const char *list
    • Ezdata のデータ list topic
  • int val
    • 書き込む数値

戻り値:

  • int:
    • 1: 送信成功
    • 0: 送信失敗

4.4 getData (list)

関数プロトタイプ:

int *getData(const char *token, const char *list, int *Array, int offset, int count);

機能説明:

  • 指定したデータリストから複数のデータを取得。リスト形式の利点は、データのインデックスオフセット指定や複数データの一括取得が可能な点です。戻り値はリストです。

引数:

  • const char *token
    • Ezdata トークン
  • const char *list
    • Ezdata のデータ list topic
  • int *Array
    • リストデータを格納する変数ポインタ
  • int offset
    • データリスト先頭からのオフセット
  • int count
    • 読み取るデータの個数

戻り値:

  • int *:
    • int *Array: 読み取り成功時、データリストポインタを返す
    • 0: 読み取り失敗

4.5 removeData

関数プロトタイプ:

int removeData(const char *token, const char *field);

機能説明:

  • topic または list topic を削除し、キューデータをクリア

引数:

  • const char *token
    • Ezdata トークン
  • const char *field
    • Ezdata topic / list topic

戻り値:

  • int:
    • 1: 削除成功
    • 0: 削除失敗
On This Page