ラズパイとBluemixで
IoTアプリを作ってみよう!
浦本直彦 吉⽥田忠⾏行行 渡邉毅
IBM ソフトウエア & システム開発研究所
10/5/15
1
Agenda
¡ セットアップ
¡ ラズパイお持ちの⽅方
¡ ⾃自分で無線LANやPC経由接続可能の⽅方 (資料料あり)
¡ サポートご希望の⽅方
¡ ラズパイお持ちでない⽅方
¡ 設定済のラズパイを配布
¡ 概要の説明
¡ ハンズオン &  Q&A
10/5/15
2
はじめに
10/5/15
3
ラズベリーパイ (Raspberry  Pi)
¡ 英国ラズベリーパイ財団 (Raspberry  Pi  Foundation)   によって開発
されている⼩小型コンピュータ
¡ 元々は教育⽤用として開発された
¡ 最新はRaspberry  Pi  2  Model  B
¡ ARMプロセッサ 4コア 900MHz  
¡ 1GBメモリ
¡ ストレージにはmicroSDカードを⽤用いる
¡ LinuxベースのOS  (Windows  10  IoT Coreも動く!)
¡ 各種センサーとのインタフェイスとなるGeneral   Purpose  IO  
(GPIO)  端⼦子を有し,IoTデバイスととしても注⽬目されている
ここで問題:  何故ラズベリーパイという名前なの?
10/5/15
4
IBM Bluemixとは?
5
様々なタイプのアプリケーション(Web、モバイル、ビッグ
データ、IoT等)を、構築・管理理・実⾏行行するための、クラウ
ドをベースとしたオープン・スタンダードなPaaS環境
即時に
実⾏行行環境を構築
豊富な「API」
「サービス」の
提供
既存システムとの
インテグレーショ
ン
DevOps環境の
提供
堅牢牢な
セキュリティ
柔軟な価格体
系
お⽀支払い⽅方法
Bluemixが提供するサービス
100を超えるサービスが利利⽤用可能
ボイラープレート:17種類
ランタイム:9種類
サービス:108種類
§ モバイル
§ Webアプリ部品
§ インテグレーション
§ ビジネス・アナリ
ティクス
§ Internet of Things
§ Watson
§ DevOps
§ データベース
§ ビッグデータ
§ セキュリティ
*2015年8月現在 ベータ含む
6
BluemixとIoT(Internet  of  Things)
• IBM  IoT Foundation
– クラウド上でMQTTサーバー機能を提供
– デバイス/アプリケーションはMQTTプロトコルを使⽤用し、IoT Foundationに接続
• IBM  Bluemix
– ブラウザ・ベースのコーディネーション・ツールNode-‐‑‒REDを提供
– Node-‐‑‒REDはIoTサービスを利利⽤用してIoT Foundationに接続
IBM  Bluemix
MQTT
IBM  IoT
Foundation
MQTTサーバー
アプリケーション
アプリケーション
アプリケーション
IoTサービス
MQTT
アプリケーション
MQTT
MQTT
MQTT
MQTTクライアント
アプリケーション開発に注⼒力力したスピーディなIoTアプリの実現
10/5/15
8
クライアント
プログラム
IBM  IoT
Foundation
MQTTサーバー
MQTT
(軽量量のPublish/
Subscribe
プロトコル)
IBM  Bluemix
Node-­REDIoTサービス
MQTT
Node-RED
本⽇日のハンズオン
¡ LED点滅 (Lチカ)  – デモのみ
¡ ハンズオン1:  ラズパイとIoT Foundationを繋ぐ
¡ ハンズオン2:  Bluemix Node-‐‑‒REDと繋ぐ
10/5/15
9
Lチカしてみよう
デモのみ
10/5/15
10
昔学んだこと:  ⾖豆電球を光らせる
10/5/15
11
電流流が流流れる
スイッチでオン・オフ
ラズパイでLEDを光らせる
10/5/15
12
GPIO端⼦子経由で
電流流が流流れるプログラムでオン・オフ
GPIO端⼦子
¡ デジタル信号 (1  or  0)  を⼊入出⼒力力する端⼦子
¡ 1:  +3.3vで表現 (high)
¡ 0:    0vで表現 (low)
¡ 例例:  ラズパイ側のプログラムで,GPIO端⼦子4に1を出⼒力力
-‐‑‒>  GPIO端⼦子4に3.3Vの電圧がかかる
¡ 例例:  センサー側で,GPIO端⼦子6に3.3vをかける
-‐‑‒>ラズパイ側のプログラムで,GPIO端⼦子6が1であることを認識識
¡ アナログ値を扱うためには,AD変換したり,デジタル信号の
on/off,  on時間などを使ってアナログ値を表現する
10/5/15
13
0
1
low
high
Lチカをやってみよう (デモのみ)
10/5/15
14
GND
GPIO
18
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
while True:
GPIO.output(18, True)
time.sleep(2)
GPIO.output(18, False)
time.sleep(2)
$ sudo python lchika.py
lchika.py
Raspberry PiをIoT
Foundationに繋ぐ
10/5/15
15
ラズパイをBluemix IoT
Foundationにつなぐ (1)
¡ ラズパイにログインする.
¡ 接続⽤用プログラムをダウンロードする
10/5/15
16
$ sudo dpkg -i iot_1.0-1_armhf.deb
Selecting previously unselected package iot.
(Reading database ... 78520 files and directories currently installed.)
Unpacking iot (from iot_1.0-1_armhf.deb) ...
Setting up iot (1.0-1) ...
Starting the iot program
$ curl -LO https://github.com/ibm-messaging/iot-
raspberrypi/releases/download/1.0.2/iot_1.0-1_armhf.deb
% Total % Received % Xferd Average Speed Time Time Time Current ….
100 397 0 397 0 0 482 0 --:--:-- --:--:-- --:--:-- 644
100 108k 100 108k 0 0 44019 0 0:00:02 0:00:02 --:--:-- 115k
¡ 接続⽤用プログラムをインストールする
ラズパイをBluemix IoT
Foundationにつなぐ (2)
¡ プログラムの稼働状況を確認する
10/5/15
17
$ service iot status
[ ok ] iot is running.
引数にはstausの代わりにstart,   stopも使える
¡ デバイスの識識別⼦子(MACアドレスを使う)を取得する
$ service iot getdeviceid
The device ID is b837eb388eda
For Real-time visualization of the data, visit
http://quickstart.internetofthings.ibmcloud.com/?deviceId=b837eb388eda
¡ 表⽰示されるURLにアクセスする.
CPU温度度が表⽰示される
10/5/15
18
b837eb388eda
Bluemix Node-REDと
連携する
10/5/15
19
Bluemixにログインする
¡ ダッシュボード画⾯面から,上部のメニューでカタログを選ぶ
10/5/15
20
Node-‐‑‒REDランタイムを作成する
¡ ボイラープレートから,Node-‐‑‒RED Starterを選ぶ
10/5/15
21
アプリを作成する
¡ 名前欄に,(全世界の)他のBluemixアプリと異異なる名前を付ける
10/5/15
22
待つことしばし…
¡ ステージングが完了了するまで数分かかります
10/5/15
23
アプリが開始される
10/5/15
24
¡ URLをクリックすることにより,アプリ画⾯面へと移⾏行行する
Node-‐‑‒RED  Flowエディタ画⾯面に
アクセスする
¡ “Go  to  your  Node-‐‑‒RED  flow  editor”ボタンを押す
10/5/15
25
Node-‐‑‒RED  Flowエディタ上で
プログラム開始
¡ 左側のパレットからibmiotを選択し,シートにdrag   &  drop
10/5/15
26
ラズパイからのデータを受け取る
ノードが作成される
10/5/15
27
¡ 作成されたノードをダブルクリックして,設定を⾏行行う
設定
¡ Authentication:  Quickstartを選択すると設定画⾯面の構
成が変化する.
¡ Input  Type:
Device  Eventのまま
¡ Device  Id
ラズパイのデバイスID
(コマンドラインから
”service  iot getdeviceid”
を実⾏行行して得られる値)
¡ Nameは変更更する必要なし
¡ 最後にOKボタンを押す
10/5/15
28
b837eb388eda
デバイスからのイベントが取得で
きているかを確認する
¡ パレットから”Debug”ノードをDrag   &  Drop
10/5/15
29
ノードをつなぎDeployボタンを押す
¡ “IBM  IoT App  In”ノードの右側の⼩小さな円から”Debug”ノードの
左側の⼩小さな円までカーソルを動かして線を引く
¡ 右上の”Deployボタンを押す
10/5/15
30
デプロイ完了了
10/5/15
31
¡ 上部にSuccessfully   Deployedというメッセージが出れば成功
¡ 右側ウインドウの上部のdebugタブをクリック
データの確認
¡ 右側のウインドウにデータが表⽰示されていれば成功
ゴミ箱ボタンを押してウインドウをクリアし,データが流流れている
のを確認する
10/5/15
32
デバッグを停⽌止する
¡ Debugノードの右の四⾓角をクリックすると,デバッ
グが停⽌止する (もう⼀一度度クリックすると再開する)
10/5/15
33
! デバックのオン・オフは
再Deployする必要なし
デバック停⽌止後
¡ さらに右側画⾯面の上部のゴミ箱ボタンを押して内容を
クリアしておく
10/5/15
34
データを加⼯工
¡ 左側のパレットをスクロールして,”function”セク
ションの”function”ノードをDrag   &  Drop
10/5/15
35
¡ “IBM  IoT App  In”ノードと繋げた後で,ダブルク
リックして設定画⾯面を表⽰示させる
10/5/15
36
イベントデータからCPU温度度だけ
を取り出す
¡ 設定画⾯面において
¡ Name:  “Get  CPU  Temp”
¡ Function:  
return  {payload:msg.payload.d.cputemp};
と⼊入⼒力力.OKボタンを押す.
10/5/15
37
デバッグノードを追加する
¡ 更更に,”Get  CPU  Temp”ノードにDebugノードを追加し,Deployボ
タンを押す.追加後は,以下のようになる
10/5/15
38
CPU温度度が表⽰示される
¡ 右側のウインドウに,CPU温度度だけが表⽰示されていることを確認する
10/5/15
39
条件分岐ノードを追加
¡ “Get  CPU  Temp”ノードに接続したDebugノードの右側の四⾓角をク
リックし,デバッグを停⽌止する
¡ 左側のパレットから”switch”ノードをシート画⾯面にDrap &  Dropする
¡ “Get  CPU  Temp”ノードと”switch”ノードを線で繋げる
10/5/15
40
条件分岐を設定する (1)
¡ Switchノードをダブルクリック
¡ Name:  “Check  Temp”
¡ “==“を”>=”に変更更,値は
CPU温度度の実際の値を参考に⼊入⼒力力
例例では,46.1とする
¡ +ruleをクリック
10/5/15
41
条件分岐を設定する (2)
¡ “<“,  “46.1”を⼊入⼒力力
¡ OKボタンを押す
10/5/15
42
温度度チェックノードが⽣生成された
¡ “Check  temp”ノードの右側に2つ四⾓角があることを
確認する (分岐1,  分岐2に相当する)
10/5/15
43
温度度チェックノードにデバッグ
ノードを2つ繋げる
¡ パレットからtemplateノードを2つDrag   &  Dropし,”Check  
Temp”ノードに繋げる
10/5/15
44
1つ⽬目のfunctionノードを設定する
¡ Name:  “High”
¡ Template:  
温度度が上がりました:   {{payload}}
¡ OKボタンを押す
10/5/15
45
2つ⽬目のfunctionノードを設定する
¡ Name:  “Low”
¡ Function  
return  “温度度が下がりました”;
¡ OKボタンを押す
10/5/15
46
追加ノードをデプロイ
¡ “Check  Temp”ノードの上の四⾓角 (設定では1番⽬目)に”High”ノード
が,下の四⾓角(2番⽬目)に”Low”ノードが繋がっていることを確認し,
画⾯面右上の”Deploy”をクリック
10/5/15
47
Debugノードを追加
¡ 2つのtemplateノードにDebugノードを追加
¡ Deploy後,templateノードで指定した⽂文字列列が表⽰示されることを確認
¡ Check  Tempノードの温度度を適当に変えてみよう
10/5/15
48
時間が余ったら..
¡ 結果をTwitterでつぶやいてみよう
¡ IoTイベントをデータベース (Cloudant)に保存して
みよう
10/5/15
49

WWCT ラズパイ Bluemix 講習資料