Raspberry Pi 3 + Node-RED による ネットワーク

Raspberry Pi 3 + Node-RED
による
ネットワークデバイスの構築
名古屋市⼯業研究所 システム技術部
⽣産システム研究室
⻫藤 直希
[email protected]
(C) Naoki Saito
1
この資料について
u 
この資料は過去に実施したセミナーの内容を元に再構成したものです.
u 
本資料を許可なく複製・改変・再配布することを禁じます。
u 
Raspberry Pi は英国 Raspberry Pi 財団の商標です.
u 
Linuxは Linus Torvalds⽒、⽶国及びその他の国における登録商標 あるいは商標
です。
u 
UNIXは、X/Open Company Limitedが独占的にライセンスしている⽶国ならび
に他の国における登録商標です。
u 
Windows は⽶国マイクロソフトコーポレーションの⽶国およびその他の国にお
ける登録商標です。
u 
その他、本資料中のすべてのブランド名および製品名は個々の所有者の登録商
標もしくは商標です。
u 
本資料の内容は予告なく改定することがあります
(C) Naoki Saito
2
アジェンダ
u 
はじめに
u 
u 
セットアップ
u 
u 
OSインストール,パッケージ更新
Node-REDによるアプリケーションの作成
u 
u 
⽬的,想定環境の確認
LED ON/OFF, 温度センサ読み出し,クラウドサービスとの送受信
まとめ
(C) Naoki Saito
3
⽬的
u 
Node-RED を Raspberry Pi で使⽤する⽅法について整理する
u 
IoT(のようなもの)を実際に作ってみることで IoT を理解する
u 
IoT らしいシステムとは? その構成要素(の⼀例)
u 
センサ(⼊⼒)+アクチュエータ(出⼒)(+マイコン)
u 
クラウドサービス
u 
ネットワーク
u 
コンピュータ(PC)
(C) Naoki Saito
4
⽬標
目標2
目標1
(C) Naoki Saito
5
本資料の想定環境
u 
Mac+ディスプレイ+キーボード+マウス
u 
u 
KURO-IOTEXP/KIT3
u 
u 
Windows をお使いでも同様のことは可能です
Raspberry Pi 3 を使った IoT 体験キット
u 
http://www.kuroutoshikou.com/product/others/others_iot/kuro-iotexp_kit3/
u 
本資料ではキット付属の電⼦部品を使⽤していますが,キットがなくても Raspberry Pi 3
を持っていれば Node-RED を試すことはできます.
サンプル (GitHub)
u 
https://github.com/nmiri-nagoya-nsaito/iot_training_sample
u 
以後,サンプルファイルの場所は iot_training_sample フォルダからの相対パスで表
現します
(C) Naoki Saito
6
注意事項
u 
本資料で作成したRaspberry Pi をそのままインターネットに公開しないでくだ
さい
u 
u 
機能の確認が第⼀で,セキュリティについては全く考慮していません
本資料ではパソコン(以降,PCと略記)で⾏う作業と Raspberry Pi(RPi と略
記)で⾏う作業とが混在しています.さらに,それぞれについてもWebブラウ
ザで⾏う作業やコマンドラインで⾏う作業など様々なアプリケーションでの作
業が含まれます.何に対して⾏う作業であるかについて,なるべく明記します
が注意してください.
(C) Naoki Saito
7
セットアップ
(C) Naoki Saito
8
Raspberry Pi (RPiと略記)
u 
学校や開発途上国におけるコンピュー
タサイエンスの学習促進を⽬的として,
英国のラズベリーパイ財団によって開
発された⼩型コンピュータ
u 
https://www.raspberrypi.org/
u 
パソコンのように様々なOSが動作する.
ここではRaspbianというLinuxベースの
OSを使⽤する.
u 
RPi の情報源
u 
https://www.raspberrypi.org/help/
(C) Naoki Saito
9
マイコンボードの準備
u 
ケースを分解する
u 
上蓋(⽩),横蓋(⽩),中蓋(⾚)を外す
u 
マイコンボードをケースにセットする
u 
ブレッドボードに拡張ボードを取り付ける
u 
USBケーブルをマイコンボードおよびACア
ダプタに接続する
u 
フラットケーブルを拡張ボードに接続する
u 
ピンを曲げないように注意!
u 
マイコンボードとの接続はあとで(回路を組
んでから)
(C) Naoki Saito
10
(C) Naoki Saito
11
(C) Naoki Saito
12
※マイコンボードへの接続は後で
(C) Naoki Saito
13
RPi にインストーラーをコピーして電源ON
u 
PCで http://www.raspberrypi.org/downloads/noobs/ から NOOBS_v2_x_x.zip をダ
ウンロードし,完了したら zip ファイルをダブルクリックして展開する.
u 
展開したNOOBSファイルの中⾝を micro SD カードへコピーする
u 
(注意)zipファイル展開時に作られる最上位のディレクトリごとコピーしないように
u 
micro SDカードをPCから「安全に」取り外し,RPi にセットする(印字⾯下向き)
u 
キーボード,マウス,HDMIケーブル,ネットワークケーブル,電源⽤USBケーブル
を RPi に接続する
u 
u 
間違えてパソコンの電源ケーブル(⽩⾊)を抜かないように
RPi の電源を⼊れるため,コンセントにUSB電源アダプタを接続する
(C) Naoki Saito
14
(参考)NOOBSのダウンロードページ
http://www.raspberrypi.org/downloads/noobs/
(C) Naoki Saito
15
(参考)ファイルの展開
(C) Naoki Saito
16
(参考)ファイルをmicroSDへコピー
(C) Naoki Saito
17
(参考)RPi の準備 → 電源ON
※フラットケーブルは後で接続します
※ 間違えてパソコンの電源ケーブルを抜かない
ように
(C) Naoki Saito
18
OS(Raspbian)のインストール
※ RPi での作業
u 
RPi の電源を⼊れると,インストール可能な OS の⼀覧が表⽰される.ここで
「Raspbian」 を選択する.
u 
画⾯の「Install」ボタンを押してインストールを開始
u 
u 
約20から30分くらいかかる
インストール完了したら,「OK」ボタンを押す.
u 
RPi が再起動して,OSが開始する
(C) Naoki Saito
19
(参考)インストール選択・開始
(C) Naoki Saito
20
(参考)インストール開始直後
(C) Naoki Saito
21
(参考)⾔語設定,キーボード設定
u 
インストール中に⾔語やキーボード
の設定を⾏うこともできる
u 
後で変更も可能
u 
⾔語を⽇本語にしておくと,インス
トール後のメニューなどが⽇本語に
なる
u 
u 
使⽤するキーボードに応じてキー
ボードの設定を切り替えておく
u 
(C) Naoki Saito
⽇本語を⼊⼒する⽅法が⾃動的に提
供されるわけではないため,使⽤す
るなら別途準備の必要がある
例えば英語キーボードの場合,GB
をUSに設定しておく
22
(参考)インストール完了時
(C) Naoki Saito
23
(参考)再起動後
(C) Naoki Saito
24
ブレッドボードに回路を組む
※ 後で電源を落とした時に接続します
※ブレッドボードは場所に
より導通する向きが異なり
ます
(C) Naoki Saito
25
電源(3V),GND
GND
+3V
※ ワイヤの⾊はなんでも構いませんが電源とGNDはそれぞれ⾚と⿊に統⼀しておくとわかりやすいです
(C) Naoki Saito
26
LED回路
※ LEDは⾜の⻑い⽅が抵抗に接続する側,
⾜の短い⽅がGNDに接続する側です
1KΩ
#21
GND
(C) Naoki Saito
27
温度センサ回路
※電源(3V)とGNDとを間違えないこと
※電源(3V)とGNDとをショートさせないこと
※温度センサの向きに注意
図の温度センサの向きで
⼿前側から⾒て
・左: #4
・中: +3V
・右: GND
(C) Naoki Saito
28
※温度センサの向きに注意
図の温度センサの向きにおいて
正⾯から⾒て
・左端: #4
・中央: +3V
・右端: GND
(参考)温度センサ(DHT11)のデータシート
https://akizukidenshi.com/download/ds/aosong/DHT11.pdf
(C) Naoki Saito
29
RPi の環境設定
※RPi での作業
u 
タイムゾーン設定の確認(P31)
u 
u 
u 
キーボード設定の確認(P32)
u 
u 
「Raspberry Pi の設定→ローカライゼーション」画⾯から,タイムゾーンを「Asia/
Tokyo」に設定
時刻表⽰のズレが修正される
「Raspberry Pi の設定→ローカライゼーション→キーボードの設定」画⾯で
「United States – English(US)」になっているかどうか確認
SSH および VNC 設定の確認(使⽤する場合)(P33)
u 
u 
u 
「Raspberry Pi の設定→インターフェイス」画⾯から,「SSH」や「VNC」を
「Enabled」にする
設定しておくと,PC から RPi の遠隔操作が可能になります
SSH はすぐに利⽤可能です.Macの画⾯共有でVNC接続するにはVNCサーバのインス
トールなどのセットアップが必要で,⼿順はP41で紹介しています
(C) Naoki Saito
30
(参考)タイムゾーン設定
(C) Naoki Saito
31
(参考)キーボード設定
※ 使⽤するキーボードに合わせて
設定する
(C) Naoki Saito
32
(参考)SSH,VNCの有効設定
(C) Naoki Saito
33
回路の接続
u 
u 
回路を接続する場合,電源をOFFにするため,シャットダウン(終了の⼿続
き)を⾏う
u 
メニューから 「Shutdown」 を選ぶ
u 
電源を切るときには必ず必要
micro SDカードのアクセスランプ(カードスロット付近にある) の点滅がなく
なったら,電源を落とす.
u 
⼗分に時間をおけば⼤抵の場合は⼤丈夫.シャットダウン完了後はネットワークコ
ネクタのリンクLEDもオフになっている
u 
(あらかじめ回路を作った)ブレッドボードを,マイコンボードにフラット
ケーブルで接続する(P13の右下画像)
u 
再び RPi の電源を⼊れる
(C) Naoki Saito
34
パッケージ類のセットアップ
※ RPi の端末ウィンドウでの作業
u 
ここでは,RPiでのパッケージ更新や追加の作業を⾏うため,あらかじめ⽤意した
セットアップスクリプトを使⽤する.
u 
所要時間の⽬安:クラス10 の microSD カード使⽤で約1時間10分弱
u 
このスクリプトは本資料の以下のページの作業内容を⾏なっています.
u 
u 
P39〜45, 48〜51, 54, 55, 77〜80, 86
端末ウィンドウで,以下のコマンドを⼊⼒してファイルをダウンロードし,実⾏
する(以下の例で "$" はコマンドプロンプトを⽰し,コマンドの⼀部ではない)
(P36〜38)
$ cd /home/pi/
$ curl https://raw.githubusercontent.com/nmiri-nagoya-nsaito/iot_training_sample/
※ 表⽰幅の関係上,複数⾏で表⽰していますが
master/setup/setup.sh -o /home/pi/setup.sh
改⾏を⼊れずに⼀⾏で⼊⼒してください
$ bash setup.sh
(C) Naoki Saito
35
(参考)端末ウィンドウの開始
コマンドプロンプトを⽰す記号($) の後ろに,
実⾏したいコマンドを⼊⼒する
(C) Naoki Saito
36
(参考)スクリプトダウンロードの様⼦
(C) Naoki Saito
37
(参考)スクリプト実⾏の様⼦
(C) Naoki Saito
38
(参考)Raspbianパッケージの更新
※ P35のセットアップスクリプトで実施済みの作業です
u 
RPi の端末ウィンドウで以下のコマンドを実⾏する
$ sudo apt-get update
$ sudo apt-get -y upgrade
u 
apt-get の –y オプションは既定の回答を y として⾃動的に処理をすすめるためのもの
u 
インストール中に apt-listchanges というツールにより changelog を表⽰するためのページャが⽴ち
上がるので、その時は’q’ キーを押して抜ける
(C) Naoki Saito
39
(参考)Raspbianパッケージ更新の様⼦
(C) Naoki Saito
40
(参考)VNCの準備(VNCを利⽤する場合)
※ P35のセットアップスクリプトで実施済みの作業です
※ VNCを使⽤しない場合は必要ありません
u 
RPi の端末ウィンドウで tightvncserver をインストールする(P42)
u 
u 
Macの場合,プリインストール済みのVNC(RealVNC)だとMacの画⾯共有で接続できない
開始するときは端末ウィンドウで 「tightvncserver」 と⼊⼒する(P43)
u 
u 
最初だけ,パスワードの設定を求められる(8⽂字以内にする必要がある)
u 
P35のセットアップスクリプトでは既定として「iot0x0x」を設定している.パスワードを後で変更
することもできる.
u 
「Would you like to enter a view-only password (y/n)?」の質問に対し,閲覧専⽤のパスワードを
設定したい場合は y を,それ以外は n と⼊⼒する(セットアップスクリプトでは n と設定)
起動に成功すると,スクリーンの番号が「:1」のように⽰される(停⽌時に必要)
$ sudo apt-get install tightvncserver # インストールするとき
# 起動するとき(パスワード設定が必要)
$ tightvncserver
# 停⽌するとき(数値は起動時に与えられる値)
$ tightvncserver -kill :1
(C) Naoki Saito
41
(参考)VNCサーバインストールの様⼦
(C) Naoki Saito
42
(参考)VNCサーバ起動の様⼦
(初回のみパスワード要求)
※ 画⾯サイズを指定する場合は
-geometry オプションを使う
※パスワードの⼊⼒(2回)
※スクリーンの番号(停⽌時に必要)
(C) Naoki Saito
43
(参考)VNC⾃動起動のための設定
※ P35のセットアップスクリプトで実施済みの作業です
※ VNCを使⽤しない場合は必要ありません
u 
RPi で,起動⽤スクリプト(ここでは vncboot とする)を⽤意し,端末ウィンドウ
で以下のコマンドを実⾏することにより⾃動起動の設定を⾏う. ※ vncboot ファイルの中⾝はP51で
$
$
$
$
u 
sudo
sudo
sudo
sudo
chown root:root vncboot
chmod 755 vncboot
cp -a vncboot /etc/init.d/
update-rc.d vncboot defaults
#
#
#
#
所有者を root に変更
アクセス権を変更
/etc/init.d にファイルをコピー
起動時に⾃動実⾏するよう設定
次回の起動時に(VNCサーバが稼働していれば)PCから RPi の遠隔操作が可能
u 
あらかじめ端末ウィンドウで RPi の IPアドレスを調べておくこと
$ hostname -I
※「-I」はハイフンに⼤⽂字のアイ
(C) Naoki Saito
44
(参考)vncboot の内容
※ P35のセットアップスクリプトに含まれている内容です
#! /bin/sh
# /etc/init.d/vncboot
### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
case "$1" in
start)
echo "Starting VNC Server"
#Insert your favoured settings for a VNC session
su $USER -c '/usr/bin/vncserver :1'
;;
stop)
echo "Stopping VNC Server"
su $USER -c '/usr/bin/vncserver -kill :1'
;;
*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac
USER=pi
HOME=/home/pi
export USER HOME
exit 0
(C) Naoki Saito
45
(参考)MacからRPiへのVNC接続の例
※ VNCを使⽤しない場合は必要ありません
※ Windowsを使⽤する場合はTightvncviewerなどのVNC接続ソフトを
使⽤すれば同様に接続が可能です.
※ または,RPi で RDP を使⽤する⽅法もあります(説明は省略)
u 
Mac でルートウィンドウをクリックするなどして,Finderアプリに切り替える
u 
Finderアプリのメニュー「移動→サーバへ接続」を選択し,「サーバへ接続」
画⾯を出す
u 
画⾯で「vnc://<IPアドレス>:5901」と⼊⼒し,接続ボタンを押す
u 
パスワードを要求されるので,設定したパスワードを⼊⼒する
u 
P35のセットアップスクリプトを使⽤した場合,既定値として「iot0x0x」と⼊れる
(C) Naoki Saito
46
(参考)VNCサーバへの接続操作の様⼦ ※ VNCを使⽤しない場合は必要ありません
(C) Naoki Saito
47
(参考)RPi の Node.js, Node-RED 更新
※ P35のセットアップスクリプトで実施済みの作業です
u 
Raspbian にあらかじめ⼊っているものはバージョンが古いため,更新する
u 
u 
(参考URL) https://nodered.org/docs/hardware/raspberrypi#upgrading
⼿順(RPi の端末ウィンドウで作業)
u 
以下のコマンドを実⾏("$" はコマンドプロンプトの記号.コマンドの⼀部ではない)
$ curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/
master/resources/update-nodejs-and-nodered -o update-nodejs-and-nodered.sh
※ 表⽰幅の関係上,複数⾏で表⽰していますが
$ bash update-nodejs-and-nodered.sh
改⾏を⼊れずに⼀⾏で⼊⼒してください
u 
スクリプトが完了するまでしばらく待つ(20分前後)
(C) Naoki Saito
48
(参考)Node.js, Node-RED更新作業の様⼦
(C) Naoki Saito
49
(参考)Node.js, Node-REDの更新完了の様⼦
(C) Naoki Saito
50
(参考)RPi での Node-RED 起動⽅法
※ P35のセットアップスクリプトでは⾃動起動の設定を実施済み
u 
⼿動での起動⼿順(2通り)
1. 
RPi の端末ウィンドウから「node-red-start」コマンドを実⾏する
$ node-red-start
2. 
u 
メニューから「Node-RED」を選択する(P52)
起動時に Node-RED を⾃動起動する場合,RPi で以下のコマンドを実⾏する
$ sudo systemctl enable nodered.service
※ P35のセットアップスクリプトでは⾃動起動の設定を実施しています.
u 
Node-REDはサーバとしてバックグラウンドで動作します.利⽤する場合は
Webブラウザを利⽤します(P60参照).
(C) Naoki Saito
51
(参考)メニューからのNode-RED起動
(C) Naoki Saito
52
(参考)Mac での Node-RED の構築・起動⽅法
u 
u 
Docker のインストール
※
※
Windowsの場合も Docker をインストールしたら
同様の⽅法が使えます
ここで挙げる⽅法とは別に
直接 Node.js と Node-RED をインストールしても良いです
u 
https://www.docker.com/products/overview
u 
(Mac の場合の例)Docker.dmg をダウンロードしてからファイルをダブルクリック
して展開する.そして,その中にある Docker.app をアプリケーションフォルダにコ
ピーする.コピーしたら Dockerアプリを起動する.
Mac のターミナルアプリを⽤いて,以下のコマンドを実⾏する.
u 
"$" はコマンドプロンプトの記号.コマンドの⼀部ではないことに注意
$ docker run -it -p 1880:1880 --name mynodered nodered/node-red-docker
u 
Node-REDはサーバとしてバックグラウンドで動作します.利⽤する場合は
Webブラウザを利⽤します(P60参照).
(C) Naoki Saito
53
(参考)RPi の温度センサ⽤ライブラリ追加
※ P35のセットアップスクリプトで実施済みの作業です
u 
u 
後で RPi の Node-RED において温度センサ(DHT11)を⽤いた温度測定を⾏う
ため,ライブラリをインストールする
⼿順
1. 
RPi の端末ウィンドウでBCM2835ライブラリをインストール
u 
$
$
$
$
$
$
$
$
2. 
(参考)http://www.airspayce.com/mikem/bcm2835/
cd /home/pi/
※ ホームディレクトリへの移動
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.51.tar.gz
tar xvf bcm2835-1.51.tar.gz
cd bcm2835-1.51
./configure
make
sudo make check
sudo make install
RPi の端末ウィンドウで Node.js のパッケージ node-dht-sensor をインストール
$ sudo npm install –g node-dht-sensor
(C) Naoki Saito
54
(参考)node-dht-sensor インストールの様⼦
(C) Naoki Saito
55
Node-REDによる
アプリケーションの作成
(C) Naoki Saito
56
Node-RED
u 
IBMのEmerging Technology Team によって開発されたアプリケーション開発プ
ラットフォームの⼀種
u 
u 
u 
u 
http://nodered.org/
各種のデバイスやオンラインサービスなどをノードで表現し,それらを線で結
んでデータの流れを表現することにより,アプリケーションを構築する
u 
Webブラウザ上で,グラフィカルな操作により⾏うことができる
u 
IoT以外にWebアプリなどのプロトタイプ作成にも便利.
Node.js (JavaScript実⾏環境)上で動作(JavaScript の知識があればより有⽤)
u 
RPi と PC とで同じ様に使⽤することができる
u 
それなりに⾼機能な計算能⼒や実⾏環境が必要
オープンソースソフトウェア
u 
https://github.com/node-red
(C) Naoki Saito
57
Node-REDの画⾯構成
デプロイボタン(フローの登録・開始)
処理ノードの検索
ノードの情報
やデバッグ
メッセージの
表⽰
処理ノード⼀覧
作業領域(フロー)
ここにノードを貼り付ける
(C) Naoki Saito
58
メニューボタン
Node-RED の使い⽅
※ RPi または PC のどちらでも実施可能
u 
Node-RED にアクセスする(P60)
u 
Webブラウザを起動し,http://<Node-REDの動作するマシンのIPアドレス>:1880 を開く
u 
u 
u 
PCのブラウザから RPi の Node-RED にアクセスすることもできる(逆向きも可能)
u 
この場合,アクセスするURLは「http://<RPi のIPアドレス>:1880」になる
u 
PC でフローをエクスポートして RPi にインポートする場合は単純にコピペで済むので楽
基本的な作業⼿順(最初の例はP61〜67を参照)
2. 
ノードを⼀覧から選び,フローに貼り付ける
貼り付けた各ノードを設定する
3. 
Deploy(デプロイ)ボタンを押してフローを登録,開始する
1. 
u 
ローカルマシンなら「localhost:1880」または「127.0.0.1:1880」
その他の操作
u 
フローでのノード編集(コピー,切り取り,貼り付け)
処理ノードの追加/削除(パッケージの管理)
u 
既存フローのインポート(読み込み)/エクスポート(書き出し)
u 
(C) Naoki Saito
59
(参考)WebブラウザでNode-REDにアクセス
http://127.0.0.1:1880
または
http://<Node-REDのIPアドレス>:1880
(C) Naoki Saito
60
例1:⼿順確認のための簡単な例
(ボタン→出⼒確認)
※ この例は RPi または PC のどちらでも確認可能です
1. 
injectノード(ボタン)と debug ノードをフローに配置
2. 
ノードを線で結ぶ
3. 
debugノードをダブルクリックし,設定画面を開く
u 
debugノード設定画⾯のOutputを「complete msg object」にする
u 
「完了」ボタンを押し,設定画⾯を閉じる
4. 
「デプロイ」ボタンを押し,フローを登録する
5. 
画⾯左側の「debug」タブを選択して,表⽰しておく
6. 
injectノードのボタンを押し,msgの内容を確認する
(C) Naoki Saito
61
(C) Naoki Saito
62
(C) Naoki Saito
63
(C) Naoki Saito
64
(C) Naoki Saito
65
(C) Naoki Saito
66
(C) Naoki Saito
67
最初の例の確認
u 
ノード間は msg という名前のオブジェクトデータをやり取りする
u 
u 
u 
u 
JavaScript のオブジェクトであり,知っている⼈なら同様の扱い⽅ができる
ノードは左側から msg を受け取って,処理をした後に,右側へ msg を出⼒
u 
基本的には即座に次のノードへ渡すが delayのように時間遅延を⽣じるものもある
u 
最初(⼀番左)のノードの処理開始タイミングはノードの種類による.injectノード
はボタンを押した時や,⼀定の時間間隔などで処理を開始することができる
msg はプロパティと呼ばれる様々な属性情報を持つ
u 
既定では msg.payload が主に使⽤されるが,それ以外のプロパティ(属性情報)を
追加したり,変更したりすることもできる
u 
ノードによっては payload 以外のプロパティを期待することがある.その場合は前
段のノードで適切に設定する必要がある
debugノードは msg 全体または指定したプロパティ値を確認するのに使うこと
ができる
(C) Naoki Saito
68
例2:Node-RED によるRPi の LED点灯
※ この例は RPi の Node-RED で実⾏する例です
※ 作業を始める前に,フロー画⾯の右上にあるプラス(+)印のボタンを押し,新規フローを追加しておくと
他の作業内容と混ざらないため作業しやすいです
u 
P27で作成したLED回路を RPi の Node_REDで点灯させてみる.
u 
u 
サンプルとして led/1.json を使う.
⼿順
1. 
※ サンプルファイルの位置は iot_training_sample ディレクトリからの相対位置で⽰しています
端末ウィンドウで,コマンドにより LED の点灯を確認する (参考:指南書P11)
$ gpio –g mode 21 out
$ gpio –g write 21 1
2. 
3. 
# ピンのレベルをHighにしてLEDを点灯する.消灯は1を0にする.
WebブラウザでNode-REDを開き,led/1.json をNode-RED のインポートの⼿順で読み込
む(⼿順はP70〜75ページ参照)
デプロイボタンを押して動作を確認する
u 
4. 
# 21番ピンを出⼒ピンに設定する
ONを押すと点灯,OFFを押すと消灯
同様にフローを追加し,同じディレクトリの 2.json, 3.json も試してみる(P76)
u 
2.json : injectノードを押す毎にONとOFFが⼊れ替わる
u 
3.json : ボタンを押すとその後は⼀定間隔で⾃動的にONとOFFが切り替わる
(C) Naoki Saito
69
(参考)サンプルのインポート⼿順
u 
インポート作業は Node-RED を利⽤しているコンピュータで⾏います.
u 
RPi で Web ブラウザを起動して利⽤している場合は,RPi で⾏います.PC のWebブラウ
ザで利⽤している場合はPCで⾏います.
u 
u 
a. 
PC の Webブラウザで RPi の Node-RED に接続している場合は,PC で作業を⾏うことになります.
逆に RPi の Webブラウザで PCの Node-RED に接続している場合は RPi で作業します.
PCで VNC を⽤いて RPi を操作している場合,RPi の Webブラウザを⽤いて利⽤している
ことになりますので,RPi で⾏います.
サンプルをダウンロードする
u 
https://github.com/nmiri-nagoya-nsaito/iot_training_sample
u 
RPi の端末ウィンドウや Mac のターミナルアプリでは,以下のコマンドを実⾏すること
でファイル⼀式をダウンロード可能.(WindowsだとGitコマンドのインストールが必要)
$ git clone https://github.com/nmiri-nagoya-nsaito/iot_training_sample.git (注) '$' はコマンドプロンプト
※ サンプルファイルは iot_training_sample ディレクトリからの相対位置で⽰しています
(C) Naoki Saito
70
(参考)サンプルのインポート⼿順(2)
b. 
サンプルの led/1.json をテキストエディタ等で開き,テキスト全体をクリップ
ボードにコピーする (P72)
u 
c. 
u 
P72の図は,PC から RPi の Node-RED に接続している場合の例ですので,PCのテキスト
エディタを⽤いています.RPi の場合は異なるテキストエディタを使うことになります
Node-REDのインポート(読み込み)⼿順にしたがってフローを読み込む
i. 
画⾯右上のメニューから「読み込み→クリップボード」を選択する(P73)
ii. 
「フローの読み込み」ダイアログ内のテキストボックスに,コピーした内容を貼り付け,
「読み込み」ボタンを押す(P74)
iii. 
フローが表⽰されるため,マウスクリックで位置を確定する(P75)
(参考)エクスポートの場合はメニューで「書き出し→クリップボード」を選択す
る.
u 
表⽰される⽂字列をテキストファイルに保存したり,メールで送ったりして利⽤できる
(C) Naoki Saito
71
(参考)インポート:データをコピー
(C) Naoki Saito
72
(参考)インポート:メニューの選択
(C) Naoki Saito
73
(参考)インポート:データの貼り付け
(C) Naoki Saito
74
(参考)インポート:フローの配置
led/1.json
※ マウスクリックにより,配置位置が確定
(C) Naoki Saito
75
(⽐較)LED点灯サンプル
led/2.json
led/3.json
(C) Naoki Saito
76
例3:温度データの取得と確認
※ この例は RPi の Node-RED で実⾏する例です
u 
P28, 29 で作成した温度センサ回路から温度データを取り込んでみる
u 
⼿順 ※ Node-REDを利⽤しているコンピュータで⾏う
1. 
Node-RED の「処理ノード追加の⼿順」により温度センサ⽤の処理ノード(nodered-contrib-dht-sensor)をインストールする(P78〜80)
u 
2. 
Node-RED のインポートの⼿順(P70〜75)を参考に,サンプル temperature/
1.json をインポートする.インポートするとP81のようなフローが表⽰される.
u 
3. 
P35のセットアップスクリプトを実⾏した場合,この処理は実施済みです.
各ノードの設定は P82〜P84 のようになっている.
デプロイ,実⾏(P85)
u 
デプロイしてから injectボタンを押すと,⼀定周期で温度が Debug タブに出⼒される
u 
ここでは,ライブラリにより読み取られる温度データが正しいと仮定して作業を進める.
どれだけ正確であるかについては特に触れない.必要なら各⾃確認しておく
(C) Naoki Saito
77
(参考)処理ノード追加の⼿順
u 
「処理ノードの追加」作業は,Node-RED を利⽤しているコンピュータで⾏い
ます.(P70の説明を参照)
u 
P35 のセットアップスクリプトを実⾏した場合,「node-red-contrib-dhtsensor」のインストールはすでに実施済みです.
1. 
Node-RED画⾯右上のメニューから「処理ノードの追加削除」を選ぶ.すると
画⾯左側に「処理ノードの追加削除」設定画⾯が現れる.(P79)
2. 
設定画⾯「処理ノードを追加」タブを選ぶ.(P80)
3. 
タブ内の「処理ノードを検索」欄にキーワードを⼊⼒すると,検索結果が現れ
る.
u 
4. 
ここでは「dht」と⼊⼒してみると「node-red-contrib-dht-sensor」が現れるため
「処理ノードを追加」ボタンを押してインストールする.(P80)
インストールしたら,「完了」ボタンを押すか,「処理ノードの追加削除」タ
ブ以外の領域をクリックすることで設定画⾯を閉じる
(C) Naoki Saito
78
(参考)処理ノードの追加削除を選択
(C) Naoki Saito
79
(参考)処理ノードを追加
(C) Naoki Saito
80
(参考)インポート直後
(C) Naoki Saito
81
(参考)rpi-dht22 ノードの内容
(C) Naoki Saito
82
(参考)injectノードの内容
(C) Naoki Saito
83
(参考)debugノードの内容
(C) Naoki Saito
84
(参考)温度測定:実⾏の様⼦
(C) Naoki Saito
85
例4:クラウドサービスへ温度を送信
※ この例は RPi の Node-RED で実⾏する例です
u 
例3で取得した温度データをクラウドサービスへ送信してみる
u 
u 
ここではクラウドサービスとしてM2X(https://m2x.att.com/)を利⽤
⼿順
1. 
クラウドサービス側の準備(P87〜95)※ Webブラウザで実施
u 
2. 
ここではM2Xの例を説明する.他のサービスを利⽤する場合はそのサービスごとに必要な作業は
様々であり,その都度調べる必要がある
フローの編集(P96〜98)※ Node-REDを利⽤しているコンピュータで⾏う
a. 
M2X 処理ノードの追加インストール
u 
u 
b. 
c. 
サンプル m2x/send_temperature_to_m2x_rpi.json を,Node-RED のインポート⼿順(P70〜75)
を参考にインポートする.インポートすると P96 のようなフローが表⽰される.
m2xノードの説明ドキュメントを元に,functionノード, m2x ノードを設定する(P97,98)
u 
3. 
P78〜80の内容を参考に,「node-red-m2x」をインストールする.「処理ノードの追加削除」画⾯で
「m2x」でキーワード検索すると⾒つけることができる.
P35のセットアップスクリプトを実⾏した場合,すでに実施済みです.
(参考)http://flows.nodered.org/node/node-red-m2x
デプロイ,実⾏(P99)
u 
デプロイしてからinjectionボタンを押し,温度データが送られているかどうかを確認
(C) Naoki Saito
86
(参考)M2Xサービスのセットアップ⼿順
※ この作業はWebブラウザで⾏います
1. 
M2Xのアカウントを作成する(P88〜90)
2. 
サインインした後,デバイスを追加する(P91〜93)
u 
3. 
追加するといくつかの情報が⽣成されるので覚えておく(後で使⽤する)
u 
DEVICE ID
u 
PRIMARY API KEY
各デバイスに対し,ストリームを追加する.(P94,95)
u 
ストリームIDを指定する.ここでは「temp_0xx」という名称にする
(C) Naoki Saito
87
(参考)アカウントの作成:M2Xサイト
※「SIGN UP」で作成開始
https://m2x.att.com
(C) Naoki Saito
88
(参考)アカウントの作成:作成画⾯
※必要な事項を⼊⼒する
(C) Naoki Saito
89
(参考)アカウントの作成:作成直後
※「Skip」でいったん抜ける
(C) Naoki Saito
90
(参考)デバイスの作成:追加
(C) Naoki Saito
91
(参考)デバイスの作成:設定
※ Private Device の場合は制御にAPIキーが必要
(C) Naoki Saito
92
(参考)デバイスの作成:作成後
※ プログラムで使⽤
DEVICE ID
PRIMARY API KEY
(C) Naoki Saito
93
(参考)ストリームの作成:追加
(C) Naoki Saito
94
(参考)ストリームの作成:設定
※ ストリームID:プログラムで使⽤
※ グラフ表⽰で使⽤される名称
※ 数値かどうか(数値ならグラフ表⽰される)
※ 単位系の指定(任意)
(C) Naoki Saito
95
(参考)サンプルのインポート後
※ functionノード
(C) Naoki Saito
※ m2x ノード
96
(参考)functionノードの編集
u 
m2xノードの説明ドキュメントを元に設定する
u 
u 
u 
(参考)http://flows.nodered.org/node/node-red-m2x
設定項⽬
u 
topic_id: DEVICE ID
u 
sub_topic_id:ストリームID("temp_0xx")
注意
u 
まれにNode-REDの編集画⾯が⾮常に使いづらい場合がある
(カーソル位置と編集対象⽂字の位置とが合わない).そ
の場合は,テキストエディタで編集してから全体を貼り付
けた⽅が楽
u 
Mac の⽂書編集アプリがダブルクオーテーション(") を勝⼿
によく似た別の⽂字に変更することがある.もしエラーが
発⽣したときは変わっていないか確認
u 
⽂書作成ソフトよりもテキストエディタを使⽤する⽅が問
題が少ない
(C) Naoki Saito
DEVICE ID
97
(参考)m2x feedノードの設定
u 
m2xノードの説明ドキュメントを元にm2x feed を編集
u 
M2X ノードをダブルクリックして編集画⾯を表⽰
PRIMARY API KEY
※ PRIMARY API KEY を設定
(C) Naoki Saito
98
(参考)実⾏結果の例
(C) Naoki Saito
99
例5:PCからクラウドデータを取得
※ この例は PC, RPi どちらの Node-RED からでも実⾏可能です.ただし
m2xノードがインストールされている必要があります(P86参照)
u 
クラウドサービス(M2X)に送信された最新のデータを取得する
u 
⼿順
1. 
Node-RED のインポート⼿順(P70〜75)を参考に m2x/fetch_from_m2x.json をイ
ンポートする.インポートすると P101 のフローが表⽰される.
2. 
例4と同様に function ノードの topic_id を Device ID に,sub_topic_id をストリー
ム ID に設定する(P102)
3. 
例4と同様に m2x feed ノードの API Key を PRIMARY API KEY に設定する(P98参
照)
4. 
function ノードで msg.action の値を ”stream” に設定する(P102)
5. 
デプロイして inject ノードのボタンを押し,結果を確認する(P103)
u 
value プロパティの値を確認
(C) Naoki Saito
100
(参考)サンプルインポート後
M2X feedの内容は
P104と同じ
functionノード
m2xノード
(C) Naoki Saito
101
(参考)functionノードの内容
DEVICE ID
(C) Naoki Saito
102
(参考)実⾏結果
(C) Naoki Saito
103
課題
u 
Node-REDにはここで使⽤した以外にも様々な処理ノードが⽤意されている.
u 
どのようなものが使えそうかを考えてみる
u 
Twitter の mention を受け取った時に,室温を問い合わせる⽂字列が含まれていた
ら室温を答えるようにする(簡易的なbot)
u 
部屋の各点からの温度データを集めて温度分布を作り,それとエアコンのデータや
物理モデルをもとに,室温の制御や予測に利⽤する
(C) Naoki Saito
104
まとめ
u 
Raspberry Pi での Node-REDの基本的な使い⽅を経験した
u 
u 
u 
セットアップ⼿順,単純なサンプル,LED点灯
Raspberry Pi と Node-RED を⽤いて,クラウドサービス(M2X)との簡単なデータ送
受信処理を実現した
u 
温度データの取得とクラウドサービスへの送信
u 
クラウドサービスからのデータ取得
u 
これ以外にも,様々なデバイスやサービスを活⽤することでより様々なシステムを構築
することができる
本資料では触れなかったが,重要な事項としてセキュリティの問題がある.機器
をネットワークに接続する際は情報収集と対策が必要
u 
(参考)IoTのセキュリティ:IPA 独⽴⾏政法⼈ 情報処理推進機構
u 
u 
特に Node-REDの場合,既定では誰もがアクセスできるため認証機能等の併⽤が必須
u 
u 
https://www.ipa.go.jp/security/iot/
https://nodered.org/docs/security
くれぐれも,本資料で作成したRaspberry Pi をそのままインターネットに公開しないで
ください
(C) Naoki Saito
105