sakura.io ハンズオン
2017/8/26
(C) Copyright 1996-2017 SAKURA Internet Inc
さくらインターネット株式会社
2
はじめに
本ワークショップの目的
3
1. 本ワークショップはsakura.ioを使用し、組込み系エンジニアおよび
Web/アプリ開発系のエンジニアがご自身のスキルセットを
大きく超えることなく、Internet of Things(IoT)に挑戦できることを
体験いただくものです。
2. そのため各章内で技術的な詳細は極力省略しております。
3. 今回は1人1つワークショップキットをご用意しておりますが、
組込みやWeb/アプリ開発に詳しい方がいらっしゃいましたら、
ご不明点を積極的にフォローしあって進めていただければと思います。
今回のハンズオンの流れ
5
マイコンおよび
プログラムの構築
Webサービス連携
(さくらのクラウド)
sakura.ioの設定
さくらの通信
モジュール
仮想サーバ
Slack
照度センサ
(GL5537-2)
マイコン(Arduino Uno)
1
あ、もう
家を出る時間だ
部屋の電気を消して
出かけよう
スマホに通知が!
あと10分で次
の電車がくる
のか。
ゆっくり
歩いても
余裕だな
2
3
4
今回ハンズオンでやりたいこと
6
Agenda
7
1. マイコンおよびプログラムの構築
₋ マイコン(Arduino)による開発環境の準備
₋ 照度センサおよびさくらの通信モジュールの繋ぎ込み
₋ 試験用プログラムの流し込み
2. sakura.ioの設定
₋ プロジェクトの作成
₋ さくらの通信モジュールの登録
₋ 連携サービスの設定
3. Webへのデータ連携(Node-RED ⇒駅すぱあとWebサービス)
₋ Node-REDサーバ用インスタンスの作成
₋ WebSocketを利用したデータ連携フロー作成
₋ 駅すぱあとWebサービスおよびSlackとの連携フロー作成
8
マイコンおよび
プログラムの構築
今回のハンズオンの流れ
9
マイコンおよび
プログラムの構築
Webサービス連携
(さくらのクラウド)
sakura.ioの設定
さくらの通信
モジュール
仮想サーバ
Slack
照度センサ
(GL5537-2)
マイコン(Arduino Uno)
今回のワークショップでご提供するもの
10
Arduino Uno
Rev3
ジャンパーコード 人感センサ
(SB412A)
照度センサ
(GL5537-2)
温湿度センサ
(HDC1000)
各種抵抗
※必要に応じてご提供
さくらの通信モジュール
+Arduino用シールド(アンテナ付)
USB2.0
ケーブル(A-B)
12W級 9V-1.3A
DCアダプタ
ブレッドボード
各種LED
※必要に応じてご提供
本日は使用しません
Arduino IDEのセットアップ
11
https://www.arduino.cc/en/Main/Software から開発環境(Arduino IDE)を入手します。
2017/4/18時点での最新版は【1.8.3】となります。
Windowsは【Windows Installer】、Macは【 Mac OS X 10.7 Lion or newer】を選択します。
Arduino IDEのセットアップ
12
該当の金額を選択するか(寄付する場合)、もしくは【JUST DOWNLOAD】にてダウンロードします。
Arduino IDEのセットアップ
13
インストールはデフォルト推奨、ドライバーについても全てインストールします。
#本スライド記載の画像はWindowsの場合になります。
Arduino IDEのセットアップ
14
Arduino IDEが起動したら、Arduino本体をPCに接続します。
ボードは【 Arduino/Genuino Uno 】、シリアルポートは出てきたCOMポートを選択します。
Macの場合はシリアルポート内の「~~~(Arduino/Genuino Uno)」となるものを選択します。
ボードの選択 シリアルポートの選択
マイコン(Arduino)の準備
15
[ファイル]→[スケッチの例]→[01.Basics]→[Blink]を選択し、Blinkスケッチを表示します。
【→】をクリックしてスケッチをマイコンに書き込み、該当箇所のLEDが点滅状態になることを確認します。
何らかの問題があった場合、スケッチ下部にオレンジ色のエラーが表示されます。
<凡例>
照度センサの繋ぎ込み
16
図に従い、温湿度センサの向きに注意しながら配線します。(実際にはArduinoシールドに対して配線します)
ブレッドボード側は色で明示された位置であれば、自由に接続しても問題ありません。
Arduinoシールドを介してセンサを接続する場合も同様の配線を行います。
GND
A0
5V
cdsセル
(照度センサ
GL5537-2)
抵抗
(10kΩ)
cds(照度センサー)サンプル
const int cdsPin = A0;
boolean flg = 0;
void setup() {
Serial.begin(9600);
Serial.println("OK");
}
void loop() {
int cdsAnalogVal;
uint32_t cdsSimpleVal = 0;
String msg = "";
cdsAnalogVal = analogRead(cdsPin);
cdsSimpleVal = map(cdsAnalogVal, 0, 1023, 0, 255);
if(cdsSimpleVal > 100){
msg = "Lighted : ";
flg = 0;
}else{
msg = "Darken : ";
if(flg == 0){
Serial.print("* ");
flg = 1;
}
}
Serial.print(msg);
Serial.println(cdsSimpleVal);
delay(500);
}
17
センサの動作確認
18
http://iot.from.tv から「cds test スケッチ」を開いてソースコードをコピーし、Arduino IDEへペーストます。
【→】をクリックし、センサ部分を指で覆ってみて、 [ツール]→[シリアルモニタ]より値が変化することを確認します。
何らかの問題があった場合、スケッチ下部にオレンジ色のエラーが表示されます。
ライブラリの取得(SakuraIO)
19
[スケッチ]→[ライブラリをインクルード]→ [ライブラリを管理...]をクリックし、
右上検索窓から【sakuraio】を検索すると、[SakuraIO by SAKURA Internet Inc.]がヒットします。
最新のVer.を選択のうえインストールをクリックすると該当ライブラリが取り込まれ、[INSTALLED]が表示されます。
cds(照度センサー)とWebSocket
#include <SakuraIO.h>
SakuraIO_I2C sakuraio;
const int cdsPin = A0;
boolean sendFlg = 0;
void setup() {
Serial.begin(9600);
Serial.println("Waiting to come online");
for (;;) {
if ( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
Serial.print(".");
delay(300);
}
Serial.println("OK");
}
void loop() {
int cdsAnalogVal;
uint32_t cdsSimpleVal = 0;
String msg = "";
cdsAnalogVal = analogRead(cdsPin);
cdsSimpleVal = map(cdsAnalogVal, 0, 1023, 0, 255);
if(cdsSimpleVal > 100){
msg = "Lighted : ";
sendFlg = 0;
}else{
msg = "Darken : ";
if(sendFlg == 0){
sakuraio.enqueueTx(1, cdsSimpleVal);
sakuraio.send();
Serial.print("* ");
sendFlg = 1;
}
}
Serial.print(msg);
Serial.println(cdsSimpleVal);
delay(500);
}
20
試験用プログラムの流し込み
21
http://iot.from.tv から「cds WebSocket スケッチ」を開いてソースコードをコピーし、Arduino IDEへペーストます。
【→】をクリックし、[ツール]→[シリアルモニタ]より「Waiting to come online」表記の後、
状態および数値が表示されていることを確認します。
22
sakura.ioの設定
今回のハンズオンの流れ
23
マイコンおよび
プログラムの構築
Webサービス連携
(さくらのクラウド)
sakura.ioの設定
さくらの通信
モジュール
仮想サーバ
Slack
照度センサ
(GL5537-2)
マイコン(Arduino Uno)
sakura.io コントロールパネル ログイン
24
sakura.io コントロールパネル(https://secure.sakura.ad.jp/iot/)にログインします。
Googleにて「さくらインターネット iot 開発者」を検索し、開発者向けページの下記ボタンからもアクセスします。
コントロールパネルへのログイン
25
既にログイン済みのセッションがない場合、以下画面にて会員認証を求められます。
会員ID、パスワードを利用してログインします。
プロジェクトC
プロジェクトB
sakura.ioコントロールパネルにおける考え方
26
sakura.ioでは【プロジェクト】という単位で大枠を構成し、プロジェクト内に複数の【通信モジュール】、
【連携サービス】を紐付けていきます。 【データストア】や簡易位置情報、ファイル配信といった
【オプションサービス】はプロジェクトに対して一つもしくは1セット設定することができます。
プロジェクトA
通信モジュール1
uAAAAAAAAAA
通信モジュール2
uBBBBBBBBBB
通信モジュール3
uCCCCCCCCCC
データストア
Light/Standard/…
簡易位置情報
ON/OFF
連携サービス1
WebSocket
連携サービス2
Outgoing Webhook
ファイル配信
File1/File2/…
連携サービス3
AWS IoT
プロジェクトに対して
複数紐付け可能
プロジェクトに対して
単一(1セット)設定可能
プロジェクトに対して
複数紐付け可能
プロジェクトの作成
27
初めはプロジェクトが無いため、新規にプロジェクトを作成する必要があります。
まずプロジェクトを作成するため、[+新規プロジェクト]をクリックします。
プロジェクトの作成
28
新規プロジェクトの作成画面に遷移します。
[名称]欄に任意の名前を入力し、[追加]をクリックします。
通信モジュールの登録
29
プロジェクトが作成されました。次に通信モジュールの登録を行います。
[モジュール登録]のボタンをクリックします。
通信モジュールの登録
30
モジュールの追加画面に遷移します。指定したプロジェクトが選択されていることを確認のうえ、
登録用ID、登録用パスワード、および任意の名称を入力して、[追加]ボタンをクリックします。
通信モジュールの登録
31
モジュールの追加に成功すると[モジュールを追加しました]というダイアログが表示されます。
ID/PASSが正しくない、もしくは既に登録されている通信モジュールを追加しようとした場合は
内容とともに[モジュールの追加に失敗しました]というダイアログが表示されます。
登録が成功した場合 登録が失敗した場合
連携サービスの設定
32
通信モジュールが登録されました。最後に外部への連携サービスを設定します。
[+サービス追加]のボタンをクリックします。
連携サービスの設定(WebSocket)
33
追加サービスの選択画面に遷移します。
今回はWebSocketを作成しますので、[WebSocket]をクリックします。
連携サービスの設定(WebSocket)
34
WebSocketの作成には特に設定事項はありません。
[名前]欄に任意の名前を入力し、[作成]ボタンをクリックします。
連携サービスの設定
35
連携サービスが登録されました。この後で使用するWebSocketのURLを確認します。
該当のプロジェクトにて作成された名称の連携サービスをクリックします。
連携サービスの設定(WebSocket)
36
WebSocketを設定しました、これでコントロールパネルでの準備は完了です。
ここで表示されるWebSocketのURLはハンズオンの後半で使用しますので書き留めておいてください。
連携サービスの設定(WebSocket)
37
なお、WebSocketの場合、簡易的に通信モジュールからのデータを確認することができます。
簡易表示モードでは通信モジュールから受け取ったデータを以下のように確認できます。
単一メッセージで
送信された値は
同一時刻で表示
→値
データを送信した
通信モジュールのID
データが格納された
チャンネル番号
送信されたデータの
タイムスタンプ
送信された値データの型
38
Webへのデータ連携
(さくらのクラウド)
今回のハンズオンの流れ
39
マイコンおよび
プログラムの構築
Webサービス連携
(さくらのクラウド)
sakura.ioの設定
さくらの通信
モジュール
仮想サーバ
Slack
照度センサ
(GL5537-2)
マイコン(Arduino Uno)
さくらのクラウド コントロールパネル ログイン
40
ユーザでログインができたら[さくらのクラウド(IaaS)]をクリックします。
Node-REDサーバの作成
41
左側のペインのサーバを選択し、右上の【 追加 】ボタンをクリックします。
はじめはサーバ追加の案内が出る場合があります。
Node-REDサーバの作成
42
デフォルトではサーバの作成は細かい設定が不要な「シンプルモード」で作成できます。
スタートアップスクリプトを利用する場合は右上の【 シンプルモード 】のチェックを外します。
Node-REDサーバの作成
43
サーバプランでは仮想サーバに割り当てるCPUとメモリの量を指定します。
仮想コアは【 1 】を、メモリは【 1GB 】を、それぞれ選択します。
Node-REDサーバの作成
44
2.ディスクでは使用するディスクの種類やサイズ、インストールイメージを選択します。
アーカイブ選択のみ【 CentOS 7.x 64bit #xxxxxxxxxxxx 】を選択し、後はデフォルトとします。
Node-REDサーバの作成
45
3.NICではネットワークに関する設定を指定します。
今回はすべてデフォルトの値を使用しますので変更は不要です。
Node-REDサーバの作成
46
4.ディスクの修正ではOSに関する設定値を指定します。
管理ユーザのパスワードおよびホスト名は任意の値を入力します。
公開鍵は今回のハンズオンでは使用しないためデフォルトの【 なし 】を使用します。
Node-REDサーバの作成
47
[スタートアップスクリプト]で【 shell 】を選択のうえ、[配置するスタートアップスクリプト]で
【 [public] Node-RED #xxxxxxxxxxx 】を選択します。オプションのWebUIポート番号には【 80 】を入力します。
Node-REDサーバの作成
48
5.シンプル監視はさくらのクラウドで提供する死活監視のサービスとなります。
本件では使用しないため、デフォルトのチェックなしで進めます。
Node-REDサーバの作成
49
6.サーバの情報はコントロールパネル上で管理するための情報を記述する項目となります。
本件では名前に判別がつくような任意の値を入力します。
Node-REDサーバの作成
50
7.その他のオプションおよび作成数はすべてデフォルトの値を使用します。
内容を確認し、問題がなければ【 作成 】をクリックします。
Node-REDサーバの作成
51
操作確認のダイアログにて、作成しても良いか改めて確認されますので、
問題がなければ【 作成 】をクリックすると指定したサーバやディスクの作成を開始します。
ステータスが全て成功になればサーバの作成が完了となります。
Node-REDサーバの作成
52
サーバが作成されました。【 http://<IPアドレス>:<指定したWeb UIポート番号>/ 】に
Webブラウザよりアクセスします。WebUIポートに80番ポートを指定した場合はポート番号を省略可能です。
Node-RED 初期画面
53
Node-REDは「ノード」と呼ばれる機能の固まりをシート上で組み合わせ、
ひとつの「フロー」にすることで、ほとんどプログラミングを知らない人でも
プログラムを構築することができるツールとなります。
ノード
パレット
シート
Info/Debug
コンソール
デプロイ
Node-RED WebSocketノードの作成
54
まずはWebSocketからのデータを受け取るノードを追加します。
ノードパレットの入力から「websocket」ノードをシートにドラッグ&ドロップします。
Node-RED WebSocketノードの作成
55
ドラッグ&ドロップされたWebSocketノードをWクリックし、設定画面に移ります。
Typeは「Connect to」、Nameは「任意の名称」を入力のうえ、URLの行にある鉛筆マークをクリックします。
Node-RED WebSocketノードの作成
56
指定するURLの値は、コンパネの連携サービスで確認できる赤枠部分となります。
赤枠部分の情報をコピーして、WebSocketノードのURL部分にペーストします。
Node-RED WebSocketノードの作成
57
URL部分はコンパネからのペーストを行い、ドロップダウンの項目については
「Send/Receive payload」を選択し、【追加】をクリックします。
Node-RED WebSocketノードの作成
58
【完了】をクリックするとwebsocketノードへの設定が反映され、設定不備がない場合はノードの三角マークが消えます。
WebSocketノードへの設定が反映されましたが、この時点ではsakura.ioからデータは入ってきていません。
続いてはデータを表示するためのDebugノードを作成します。
Node-RED Debugノードの作成
59
次に、ノードパレットの出力から「debug」ノードをシートにドラッグ&ドロップします。
Debugノードは自動で「msg.payload」に名前が変わります。特に設定は不要です。
Node-RED ノード間の接続
60
各ノードの動作を繋げるために、WebSocketノード右端とDebugノード左端をドラッグ&ドロップで繋ぎます。
Node-RED フローのデプロイ
61
各ノードを接続し、準備が完了したら、右上部の【デプロイ】をクリックします。
デプロイが完了するとデプロイボタンがグレーアウトされ、設定した内容を元に処理が開始されます。
動作確認
62
フローに問題がない場合、Websocketノード下部に[connected]と表示され、
コンソールのdebug内にプラットフォームから取得したJSONデータを確認できます。
Debugノード右端の緑マークをクリックするとdebugへの表示が停止されます。
Node-RED から 駅すぱあとWebサービスにアクセスしてみる
Node-REDの簡単な操作方法がわかったところで、
まず手始めに、Node-REDから駅すぱあとWebサービスにアクセスし、APIで取得した駅の情報をデバッグウィ
ンドウに表示してみましょう。
63
フローの読み込み
まず、フローを読み込みます。
Node-REDは、フローをjsonファイルに吐き出すことができ、吐き出したjsonファイルからフローを再現する
ことができます。
先ほどの工程では、自分でフローを作成しましたが、今回はjsonファイルを読み込んでフローを用意したい
と思います。
以下のURLにアクセスしてください。
https://gist.github.com/hmaruyama/45a
73bcf97d81ec3de7f6fd0c655f6f1
【flow_get_station.json】の中身をコピーしてください。
64
フローの読み込み
右上メニューボタン、【読み込み】→【クリップボード】の順にクリックします。
65
フローの読み込み
先ほどコピーしたjsonファイルをクリップボードに貼り付け、【読み込み】をクリックします。
66
フローの読み込み
jsonファイルからフローが生成されるので、それを適用な場所に置きます。
67
ノードの編集
【set variables】と書かれたノードをダブルクリックし、
【context.global.ekispertWebServiceKey】の値を、当日お伝えするアクセスキーに置き換えて、【完了】
をクリックします。
68
ノードの実行
【デプロイ】をクリックしてから数秒後、画面右側のデバッグウィンドウに、
stationName: “なんば”, stationCode:”29090”
という文字列が表示されたら成功です。
69
ノードの編集
では、 stationName:なんば と書かれたノードをダブルクリックして、Payload項目を「梅田(大阪市営)」
に書き換えたらどうなるでしょうか?
70
ブラウザで駅すぱあとWebサービスにアクセスしてみよう
デバッグウィンドウに、
stationName: “梅田(大阪市営)”, stationCode:”29089”
という文字列が返ってきましたか?
これは、Node-REDの中で、駅すぱあとWebサービスのAPIにアクセスして、返却されたレスポンスデー
タをパースしてNode-REDのデバッグウィンドウに出力しています。
http://api.ekispert.jp/v1/json/station?key=xxx&type
=train&name=なんば
上記のURLを、ブラウザでアクセスしてみたらどんなレスポンスが返ってくるか確認してみましょう。
※「xxx」の部分を、当日配布するアクセスキーに置き換えてからアクセスしてください。
71
ブラウザで駅すぱあとWebサービスにアクセスしてみよう
Node-REDの中で呼び出しているURLは以下です。
駅すぱあとWebサービスのドメイン データ形式 機能
アクセスキー 交通種別の指定 取得するデータの数 駅名文字列
APIの使い方は、以下のページで詳しく説明しています。
http://docs.ekispert.com/v1/api/station.html
色々な指定方法でリクエストを投げてみましょう。
72
照度センサの値をトリガに駅の時刻表をslackに流す
Node-REDの中で駅すぱあとWebサービスが呼び出せることを確認できたところで、いよいよ最後です。
sakura.ioで受け取った照度センサの値をトリガに、駅の時刻表をslackに流してみましょう。
1
あ、もう
家を出る時間だ
部屋の電気を消して
出かけよう
スマホに通知が!
あと10分で次
の電車がくる
のか。
ゆっくり
歩いても
余裕だな
2
3
4
73
slackのbot作成
まず、slack botの設定を行います。
以下のURLにアクセスしてください。
https://slack.com/apps
画面右上の【Sign in】をクリックします。
74
slackのbot作成
テキストボックスに、ハンズオンで使用しているslackのチーム名を入力して、【Continue】をクリック
します。
75
slackのbot作成
slack登録時に利用したメールアドレスとパスワードを入力して【Sign In】をクリックして、ログインしま
す。
76
slackのbot作成
テキストボックスに「incoming webhook」と入力して、一番上に出てきたintegrationをクリックします。
77
slackのbot作成
【Add Configration】をクリックします。
78
slackのbot作成
botが通知を流すチャンネルを選択します。
今回は#randomチャンネルに通知を流したいので、【Post to Channel】に【#random】を選択して、【Add
Incoming Webhooks Integration】をクリックします。
79
slackのbot作成
botの詳細な設定を行います。
【Webhook URL】は、後ほど利用するので、今
のうちにどこかにコピーしておくと楽です。
自分が作成したbotかどうか区別できるように
、【Customize Name】や【Customize Icon】を変
更しておきましょう。
設定が完了したら、【Save Setting】をクリック
します。
これで、slackのbot作成は完了です。
80
slackの処理ノードの追加
Node-REDの画面に戻ります。
次は、Node-REDのノードパレットに、slackの処理ノードを追加します。
slackの処理ノードは、最初からデフォルトで入っているわけではないので、自分で追加する必要があり
ます。これを追加することによって、自分で実装する手間を大幅に省くことができます。
ノード
パレッ
ト
81
slackの処理ノードの追加
右上メニューボタン→【処理ノードの追加削除】をクリックします。
82
slackの処理ノードの追加
【処理ノードを追加】というタブをクリックし、検索窓に【node-red-contrib-slack】と入力して、一番上
に表示された処理ノードをインストールします。
最後に【完了】をクリックします。
83
フローの読み込み
フローを読み込みます。
以下のURLにアクセスしてください。
https://gist.github.com/hmaruyama/45
a73bcf97d81ec3de7f6fd0c655f6f1
【flow_send_message_in_slack.json】の中身をコピーしてください。
84
フローの読み込み
右上メニューボタン、【読み込み】→【クリップボード】の順にクリックします。
85
フローの読み込み
先ほどコピーしたjsonファイルをクリップボードに貼り付け、【読み込み】をクリックします。
86
フローの読み込み
jsonファイルからフローが生成されるので、それを適用な場所に置きます。
87
ノードの編集
【set variables】と書かれたノードをダブルクリックし、
【context.global.WebHookURL】の値を、先ほどslackで設定した【Webhook URL】に置き換えて、【完了】
をクリックします。
88
ノードの編集
【Recieve data】と書かれたノードをダブルクリックし、URL項目を、sakura.ioコントロールパネル で、
先ほど設定した 連携サービス WebSocket のURLに設定します。【完了】をクリックします。
89
ノードの実行
【デプロイ】をクリックします。slackノードが、正しくプロパティ設定されていないという警告が出て
きますが、構わず【デプロイの確認】をクリックします。
90
ノードの実行
デプロイが完了したら、照度センサを手で覆ってみる or ライトで照らしてみましょう。
照度センサを手で覆ったタイミングでslackに以下のようなメッセージがきたら成功です。
91
92
そこに、さくら

【最新版誘導用】駅すぱあとWebサービス&sakura.io体験ハンズオン