第 2 回 3G シールド・アイデア・コンテスト向け 「SensorCorpus TM

第2回
3G シールド・アイデア・コンテスト向け
「SensorCorpus TM」ユーザー・ガイド
第1.1 版
2014.08.26 作成
目次
Ⅰ「SensorCorpus TM」のご紹介
~センサー・データの蓄積・活用に特化したクラウド・サービス
P2
Ⅱ
P4
操作方法
(1)ユーザー登録を行う
P4
(2)コンテストサイトにログインする
P5
(3)ゲートウェイ機器(Arduino)を登録する
P6
(4)センサー機器を登録する
P10
(5)Arduino+3G シールド上のスケッチを作成する
P13
(6)データを表示・閲覧する
P19
(7) データをダウンロードする
P20
(8)利用上の注意(必ずお読みください)
P21
1
第2回
3G シールド・アイデア・コンテスト対応
「SensorCorpus TM」ユーザー・ガイド
Ⅰ「SensorCorpus TM」のご紹介
~センサー・データの蓄積・活用に特化したクラウド・サービス
株式会社インフォコーパスが運営する「SensorCorpus TM」は、さまざまなセンサー情報
を集約できるクラウド基盤です。
第 2 回 3G シールド・アイデア・コンテストの参加者は、SensorCorpus
TM
コンテスト
専用の簡単 API を使うことによって、Arduino+3G シールドの測定データを、簡単にクラ
ウド上に送信し、蓄積し、表示・閲覧等を行うことができます。
SensorCorpus TM コンテストサイトの主な特徴は以下の通りです。
・コンテスト専用の簡単 API をお使いいただくことで、煩雑なプログラミングから解放
されます。
・参加者の認証やゲートウェイ機器(Arduino)の簡易認証が可能です。
・参加者ごとに、ゲートウェイ機器(Arduino)やセンサー機器の管理ができます。
・データ値をすぐにビジュアル化し、測定結果を検証できます。
・センサー・データの測定単位は、国際標準である国際単位系(SI)に準拠しています。
・データ転送は REST API に準拠し、JSON/CSV に対応しています。
なお、本コンテスト参加者におかれましては、コンテスト期間中は SensorCorpus
TM を
無償でお使いいただけます。
また、本マニュアルの説明で用いているソースコードのうち、SensorCorpus TM の利用に
関係したソースコードついては、Web サイトに掲載しており、C 言語版と C++言語版の二
種類のコードをダウンロードすることができます。第5節をご参照ください。
2
<図 1>
Arduino+3G シールドから「SensorCorpus TM」のクラウドを活用
<図 2> 「SensorCorpus TM」ホーム画面
(http://www.sensorcorpus.net/?page_id=11)
この利用マニュアルの
PDF はここからダウン
ロードできます。
3
Ⅱ
操作方法
それでは,Arduino+3G シールド上の温度センサー値をクラウドにアップし,グラフを閲
覧したりデータをダウンロードしたりするまでの手続きを、解説していきます。
(1)ユーザー登録を行う
まず、ユーザー登録を済ませていただきます。
今回のコンテストでは、ご参加いただく段階で、予めコンテスト事務局にメールアドレ
スをご連絡いただいていることと存じます。本 SensorCorpus TM の利用をご希望される方
は、コンテスト事務局にご連絡いただいたものと同一のメールアドレスを用いて、
[email protected] 宛に利用ご希望のメールをご送付ください。「SensorCorpus
TM
コンテストサイト」のユーザー登録をさせていただき、登録完了をメールにてご返信致
します。
<図 3>
登録完了ご案内電子メール画面
To: [email protected]
Subject: 登録完了のご案内 (SensorCorpus コンテストサイト)
Reply-to: [email protected]
[email protected] 様
SensorCorpus コンテストサイトの登録完了のご案内のメールです。
ログイン名: [email protected]
初期パスワード: kNes8K3
で登録を完了致しました。
SensorCorpus ホーム ( http://www.sensorcorpus.net/ ) から入り、
管理画面に移動後、パスワードをご変更の上、ご利用ください。
このメールについて、身に覚えがなければ削除願います。
よろしくお願い致します。
---SensorCorpus コンタクトセンター ([email protected])
4
(2)コンテストサイトにログインする
コンテストサイトには、ご登録いただいたメールアドレスとパスワードを入力してログ
インしておいてください。ログインすると下記のメインメニュー画面に遷移します。
<図 5>
SensorCorpus ホームから管理画面に移動してログイン
(http://www.sensorcorpus.net/)
ここから管理画面に
移動してください
ここからログイン
してください
sensor
メインメニュー
です
5
(3)ゲートウェイ機器(Arduino)を登録する
続いて、お手持ちのゲートウェイ機器(Arduino)を登録します。
メインメニューから、ゲートウェイ管理画面 をクリックしてください。ゲートウェイ機
器の一覧・検索画面が開きます。
<図 6> ゲートウェイ機器の一覧・検索画面
ゲートウェイ一覧で、
検索もできます
右のオペレーションメニューから、「ゲートウェイ作成」をクリックしてください。
6
<図 7> ゲートウェイ機器の作成画面
※1
※2
※3
以下の情報を入力してください。
・ ゲートウェイ名 (任意) <図 7 ※1>
ゲートウェイに自由に名前を付けることができます。グラフの表示等でその名前が表
示されます。またセンサー登録時に、そのセンサーをどのゲートウェイに繋げるかを
設定する際にこの名称で選択します。名前を付けなかった場合にはシステム側で割り
当てた通番が表示されます。
・ プロダクト名 (任意) <図 7 ※2>
プロダクト名を選択してください。いつでも入力できます。入力しなくても動作には
支障はありません。もし一覧にない場合には、製品名、製品番号、製品を出している
会社の製品仕様の URL を [email protected] までご連絡ください。選択
肢に追加いたします。
・ データ送信開始日時 (任意)
7
今回のコンテストでは入力は不要です。コンテストの実験開始日時が自動的に設定さ
れます。
・ データ送信終了日時 (任意)
今回のコンテストでは入力は不要です。コンテストの実験終了日時が自動的に設定さ
れます。
・ データ送信間隔 (任意) <図 7 ※3>
データを送信する間隔を設定してください。「任意」は不定期に送信する場合に設定
してください。不定期送信の場合にも、連続する送信は 5 秒以上の間隔を空ける必要
があります。
・ タグ 1 ~タグ 5 (任意)
データ取得の際に、タグを指定することで絞り込みが可能になります。いつでも入力
できます。設定しなくても構いません。
・ 有効フラグ (任意)
このゲートウェイを一時的に無効にしたい場合に「無効」設定してください。通常は
「有効」になっています。
必須項目の入力が済んだら、
「作成」ボタンをクリックしてください。作成が完了すると、
ゲートウェイ詳細画面表示になり、上から3行目、4行目にそれぞれ「ゲートウェイ認証
コード」と「セッションコード」が表示されます。
8
<図 8>
ゲートウェイ機器の登録完了画面。認証コードが発行されています
ゲートウェイ認証コードとセッション
コードが発行されました。
このコンテストでは、セッションコード
のみ使用します。
今回のコンテストでは、これらのうち、
「セッションコード」をセンサーからの送信の際
に指定します。指定の仕方は、次々節の「Arduino+3G シールド上のスケッチを作成する」
で説明します。
9
(4)センサー機器を登録する
続いて、お手持ちのセンサー機器を登録します。
<図 9>
メインメニュー画面
メインメニューから センサー管理画面 をクリックしてください。センサー機器の一
覧・検索画面が開きます。
<図 10>
センサー機器の一覧・検索画面
センサー一覧で、
検索もできます
10
右のオペレーションメニューから、「センサー作成」をクリックしてください。
<図 11>
センサー機器の作成画面
※1
※2
※3
※4
以下の情報を入力してください。
・ ゲートウェイ名 (任意) <図 11 ※1>
作成するセンサーがどのゲートウェイに属するかを指定します。この指定はセンサー
作成後に指定することもできます。まずセンサー機器の登録だけしておき、センサー
の使用時にどのゲートウェイに属するかを決めたり、変更することができます。
・ センサーID (任意) <図 11 ※2>
センサーを識別する ID。通常、機器識別番号として割り当てられている番号(~64 ビ
ット)を hex 形式文字列(~16 バイト)で指定します。あるいは、所有者の管理範囲で
センサーを個別に識別できる任意の文字列を指定しても構いません(ただし、英数字
_-で構成される 16 文字以内の文字列とします)。
11
・ センサー名 (任意) <図 11 ※3>
センサーに自由に名前を付けることができます。グラフの表示等でその名前が表示さ
れます。名前を付けなかった場合にはセンサーID が表示されます。
・ プロダクト名 (任意) <図 11 ※4>
プロダクト名を選択してください。いつでも入力できます。入力しなくても動作には
支障はありません。もし一覧にない場合には、製品名、製品番号、製品を出している
会社の製品仕様の URL を [email protected] までご連絡ください。選択
肢に追加いたします。
・ タグ 1 ~タグ 5 (任意)
データ取得の際に、タグを指定することで絞り込みが可能になります。いつでも入力
できます。設定しなくても構いません。
・ 有効フラグ (任意)
このセンサーを一時的に無効にしたい場合に「無効」設定してください。通常は「有
効」になっています。
必須項目の入力が済んだら、
「作成」ボタンをクリックしてください。
12
(5)Arduino+3G シールド上のスケッチを作成する
それでは、いよいよ Arduino+3G シールド側のスケッチ(プログラム)を作成してきま
しょう。こちらは、前節の「セッションコード」を使って、スケッチに記載していきます。
ここでは、温度センサー「LM61BIZ」を使って、図 12 のようにピンをアナログ A0 ピン
と、A1 ピン、それに A2 ピンのピンに差し込みます。
<図 12> 3G シールド上の温度センサー(LM61BIZ)の取り付け
13
それでは、スケッチを紹介していきましょう<リスト 1>。ここでは、送信先に依存する
値を、スケッチ1の中に実際に書き込んでください。
<リスト 1> 初期設定部分のスケッチ
// A3GS sample – httpPOST (Use sensorcorpus.net)
#include <SoftwareSerial.h>
SensorCorpus に関係する
#include “a3gs.h”
URL などを設定。a3gs ライ
#define LM61BIZ_Pin 1
// LM61BIZ output pin A1
const char *server = “data.sensorcorpus.net”;
ブラリでは、制御文字のエス
ケープは $ 文字
const char *path = “/store/”;
const char *header = “Content-Type: application/x-www-form-urlencoded$r$n”;
int port = a3gsDEFAULT_PORT;
// ゲートウェイ登録画面で得られたセッションコード(64 バイト)を埋め込んでおく
char *bodyinit = "session=012345…78901&gw_ts=xxxx-xx-xxTxx:xx:xx%2B09:00&csv=";
char bodybuf[256];
セッションコード(64 バイト)
を埋め込んでください
// センサー測定値の CSV の1行を生成するためのバッファ
// このゲートウェイ配下のセンサーID(16 バイト以下)を埋め込んでおく
char *s1init = "0123456789000001,xxxx-xx-xxTxx:xx:xx%2B09:00,T,";
char s1buf[64];
センサーID(16 バイト以下)
を埋め込んでください
// HTTP POST の結果を得るためのバッファ
char res[50];
int len;
ここでは特に、「server」や「path」
、それに「header」に SensorCorpus に関係するも
のを設定してあります。
このコードでは、1測定データのみを送信するサンプルになっていますが、CSV の1行
が1つのセンサーの1つの測定データを表すようになっているため、複数行の CSV を生成
することで、複数のセンサーのデータや同一センサーの異なる測定時刻のデータをまとめ
て送信することもできます。
14
つぎの「setup」関数<リスト 2>では、温度センサーをアナログピンに連続して設定す
るものと、あとは、3G シールドの初期化を行っています。
<リスト 2>
setup 関数の設定
このスケッチの中で 3G シールドに関係するものは、
「a3gs.start」と「a3gs.begin」の二
つのみで、この二つで 3G シールドの立ち上げ、つまりネットとの接続を行っています。
15
つぎの「loop」関数<リスト 3>では、温度センサーの値を読み込み、サーバに受け渡す
ため「httpPOST」を使っているところが、3G シールドに関係するものです。こちらは、
30 秒おきに温度センサー値をアップするように、最終行に待機で「delay(30000);」を設定
しています。
<リスト 3> loop 関数での処理
// val に生測定値、scale に小数点以下桁数を指定し、測定データを文字列に変換
const char *make_val (int val, int scale) { … }
// 取得した測定データを、送信用 CSV の 1 行の形式で sbuf に書き込む
void set_val (char *sbuf, const char *init, int offset, const char *vstr) { … }
// 測定データの CSV 文字列やセッションデータをまとめて POST データに仕上げる
char *make_body (char *body, const char *init) { … }
SensorCorpus で
void loop () {
提供する便利関数
static int Count = 1;
Serial.print(“>httpPOST requesting: “);
Serial.println(Count++, DEC);
CSV と POST
len = sizeof(res);
データを生成
int temp = getTemp();
// 温度値用の CSV の1行を生成(17 はセンサーID のバイト数+1)
set_val(s1buf, s1init, 17, make_val(temp,1));
// 温度値用の CSV と現在時刻を含めた POST 用のデータを bodybuf に設定
make_body(bodybuf, bodyinit);
if (a3gs.httpPOST(server, port, path, header, bodybuf, res, &len, true) == 0) {
Serial.println(“Succeeded.”);
Serial.print(“>Response=[”);
httpPOST で サ ー バ
Serial.print(res);
にデータを送信
Serial.println(“]”);
}
else {
Serial.println(“Failed.”);
}
delay(30000);
// take and interval
}
16
続いて、温度センサー値を計算するための関数<リスト 4>もご紹介しておきます。
<リスト 4> getTemp 関数:温度センサー値を計算する関数
最後に、HTTP POST の結果としてどのような値が得られるかを以下に示します。結果
は文字列として、char res[50] の配列に格納されます。
HTTP コード: 200
① データが格納された場合
"正しく格納された件数,送信された総数,エラー情報 1,エラー情報 2,エラー情報 3,..."
※エラーがない場合は、エラー情報以降は空。エラー情報は以下の形式
CSV の行にエラーがあった場合: "行番号:カラム名"
クォータ制限で破棄された場合: "quota:破棄された件数"
例:
5,5
5 件送信、5 件格納
3,5,2:ts,3:ts
5 件送信、第 2,3 行目の時刻表記エラーで破棄、3 件格納
0,0,quota:5
5 件送信されて、クォータ制限で 5 件破棄
② 軽微なパラメータ指定の不備の場合
"Bad Parameter: POST/GET パラメータ名
HTTP コード: 401
以下のいずれかの場合で、データは一切格納されない
・セッションコードが設定されていないか不正の場合
・セッションコードが無効になっている場合
・セッションコードは有効であるが、設定された有効な受信期間内でなかった場合
17
ソースコードサンプルのご提供
上述の説明で用いているソースコードのうち、SensorCorpus
TM
の利用に関係したソー
スコード(リスト1とリスト3)ついては、Web サイトに掲載しており、C 言語版と C++言
語版の二種類をダウンロードすることができます。
 上記の例と同様に、C 言語で記述されたもので、3G シールドのライブラリを利用し
ています。動作確認を行う場合などにご利用ください。
(URL https://www.sensorcorpus.net/contest/download/sc_3g.ino )
 Ethernet シールドの例で C++言語で記述されています。3G シールドの例ではあり
ませんが、容易に変更できるように記述されておりますので、C++で開発されたい
場合などにご参照ください。
(URL https://www.sensorcorpus.net/contest/download/sc_eth.ino )
18
(6)データを表示・閲覧する
続いて、クラウドに格納したデータを表示・閲覧してみましょう。
<図 13>
メインメニュー画面
メインメニューから グラフ をクリックしてください。現在登録されているセンサーの
測定データをグラフで表示することができます。
<図 14>
グラフと最新値の表示画面
どのセンサーを表示す
るかを選択できます。
19
(7)データをダウンロードする
格納されているセンサーデータは、期間(何日から何日まで)とセンサーID(複数可)を指定
して、測定値を CSV 形式でダウンロードすることができます。
(詳細は本マニュアルの次版で説明いたします)
<リスト 4> ダウンロードした CSV データの例
045B1C8020002345,2014-07-01T10:00:00+09:00,T,24.2
045B1C8020002345,2014-07-01T11:00:00+09:00,T,24.5
045B1C8020002345,2014-07-01T12:00:00+09:00,T,25.0
045B1C8020002345,2014-07-01T13:00:00+09:00,T,25.2
0A3F254030008675,2014-07-01T10:10:00+09:00,T,26.3
0A3F254030008675,2014-07-01T11:10:00+09:00,T,26.7
0A3F254030008675,2014-07-01T12:10:00+09:00,T,27.1
センサーID
測定時刻
測定型(T は温度)
20
測定値
(8)利用上の注意(必ずお読みください)
① セッションコードの管理について
本コンテストでは、ゲートウェイの簡易認証を導入しており、通信時には、割り当てら
れたセッションコードを指定します。このセッションコードが他者に使用されても、自分
の測定データが他者に詐取されることはありませんが、逆に、他者のゲートウェイから送
信されたデータが自分のセンサー情報として取り込まれることになり、測定データに想定
外のデータが混じることになります。セッションコードの管理は十分に注意して行ってく
ださい。
②
データの「通信間隔」および「送信件数」の制限について
SensorCorpus TM では、
「通信間隔」に下限を、および「一定時間内のデータの送信件数」
に上限を、それぞれ設けています。本コンテストでは、通信間隔に関しては、不定期送信
の場合 5 秒、定期送信の場合は 15 秒を下限としています。また、総送信データ件数の上限
に関しては、1ユーザー1時間当たり 720 件となります。いずれの場合も、制限を超えた
データはクラウド側に格納されず破棄されます。
ただし、コンテストでの利用状況およびシステム負荷によっては、この制限値を変更す
る場合があります。
③ データの保管期間について
データの保管期間は、2014 年 9 月 1 日から 2014 年末までを予定しております。この期
間中に蓄積されたデータに関しては、各自バックアップしていただくか、2014 年 12 月に
リリース予定の SensorCorpus TM ベータ版サービスに移行することができます。
④ 個人情報の取り扱い
株式会社インフォコーパスは、本コンテスト参加者の個人情報を適切かつ慎重に管理す
るものとし、本コンテストでのサービス提供、及びそれに関するご通知・ご案内以外の目
的には使用しません。
⑤ 免責事項
本マニュアルに示された「SensorCorpus
TM
」サービスは、株式会社インフォコーパス
が第 2 回 3G シールド・アイデア・コンテストの趣旨に賛同し、同コンテストの参加者に向
けて特に無償で提供を行っているものです。従いまして、株式会社インフォコーパスは、
本サービス運営上生じるかもしれないシステム・トラブル、データの誤謬・改変・毀損・
消滅、閲覧不能、アップロードとダウンロードの不能、コンピューターおよびネットワー
ク上で生じるセキュリティ上のトラブル、及びその他本サービスを利用することに起因す
21
る一切の事態に関し、いかなる責任も負わないものとします。本サービスの利用者は、本
サービスの利用開始と同時に、上記の免責事項に同意したものと見なされますので、ご承
知ください。
22