LoginSignup
3
4

More than 5 years have passed since last update.

RasberryPi2のNode-REDにWatson Cognitive関連のノードを追加してみました

Last updated at Posted at 2017-01-24

1. はじめに

Raspberry Pi用OSの最新RaspbianにはNode-REDがバンドルされて、Node-REDでの開発が可能です。
本投稿では、一から構築する場合の手順として、Rasbian OSの導入からNode-REDのバージョンアップ、Watsonノードの追加について手順をまとめました。

Watsonには、
(1)Watson Congnitive
(2)Watson Analytics
(3)Watson IoT

があり、最新RaspbianにはWatson IoTが提供されています。ただし、正常動作しない場合がありましたので、Node-Red,Watson IoTを最新した上で、Watson Cognitiveノードを追加しました。

2. 構成

(1)Raspberry Pi2 Model B
(2)Raspbian OS 2017年1月現在での最新版
(3)無線子機USB接続 Buffalo WLI-UC-GNME

3. Raspbian関連のインストール

インストール方法は、
・「RAWイメージ」
・「NOOBS」

の2つの方法がありますが、今回は「RAWイメージ」でインストールしました。

3-1. 書込みツールのダウンロード

RAWディスクイメージをmicroSDに書き込むツールは、「Win32 Disk Imager」を使用。
ダウンロードサイト:
http://sourceforge.net/projects/win32diskimager/
02.png

3-2.Raspbianのダウンロード

ダウンロードサイト:
https://www.raspberrypi.org/downloads/raspbian/
03.png
Raspbian Jessie with PIXELダウンロード
ダウンロードファイル「2017-01-11-raspbian-jessie.zip」

3-3.RaspbianをmicroSDへ書込み

書込みに使用するWindowsPC側での操作です。
・microSDをWindowsPCで認識させる。
04.png

「Win32 Disk Imager」起動
05.png
①ダウンロードファイルを解凍したイメージファイル「2017-01-11-raspbian-jessie.img」
②PCで認識したmicroSDのドライブ
③書き込みます。

書込み完了です。
06.png

microSDカードを抜いて、Raspberry Piに挿入してから起動します。

3-4.Raspbianの基本設定

電源、ディスプレイ、キーボード、マウス、無線子機を接続して、電源ON。
01.png

OSの選択。
07.png
OS:Rasbian 、言語:日本語、キーボード:JPを選択。

08.png
「Y」入力。

Rasbianインストール中。
09.png

OSのインストールが完了しました。
10.png

OS起動後、サービスとネットワーク、サウンドの設定を行います。

11.png
「Preferances」⇒「Raspberry Pi Configuration」

ここでは、SSH, VNC, Serial, 1-WareをEnableに設定しました。
12.png
「OK」

Location設定-TimeZone
13.png

Location設定-Keyboard
14.png

15.png
「Yes」でリブート。

無線ネットワークの設定。
16.png

サウンドの設定。
17.png

3-5.Raspbianを最新にする

Raspianの最新バージョン(Raspbian Jessie)ではすでにNode-REDとWatson IoTが提供されていますが、一度すべてを更新します。

Raspbianをupdate
sudo apt-get -y update ⏎ 

念のため、パッケージ構成の変更のあとに従ってアップグレードします。
これをしないとNode-RED実行時に正常動作しない場合がありました。

Raspbianをdist-update
sudo apt-get dist-upgrade

下記メッセージで停止したら、”q”で画面を閉じます。
18.png

3-6.Raspbianに日本語環境をインストール

日本語を表示・入力できるようにします。

日本語表示用
sudo apt-get install jfbterm
日本語入力用
sudo apt-get install ibus-anthy

再起動します。

3-7.音声再生用ALSAライブラリをインストール

今回、音声をイヤホンジャック経由で鳴らしたいので、ALSAライブラリーを
インストールします。

ALSAライブラリーのインストール
sudo apt-get install libasound2-dev

3-7.Raspbianにnpmをインストール

Raspbianにnpmが当然入っていると思ってましたが、入っていないのでインストール。

npmインストール
sudo apt-get install npm

3-8.RaspbianのNode-REDを最新にする

下記コマンドで現在のバージョンを確認。

Node-REDバージョン確認
sudo node -v

現在、V0.10.29 がインストールされていました。
このバージョンではNode-RED起動時やWatson Cognitiveノードを追加する際、エラーになりますのでバージョンアップします。

http://nodered.org/docs/hardware/raspberrypi.html 
の”Upgrading”を参照してください。

nodejsとNode-REDのアップデート 途中"y"で答える
sudo update-nodejs-and-nodered

Node-REDを起動すると~/.node-redディレクトリーが自動的に作成されます。
ディレクトリーがない場合は、一度Node-REDを起動し自動作成するか、手作業で作成してください。

ディレクトリーの変更
cd ~/.node-red

Node-REDのノードを再構築します。

ノードの再構築
sudo npm rebuild

アップグレードマニュアルに記述がありましたので、とりあえず実行します。

インストールされたノードリストの確認
sudo npm ls --depth=0

バージョンの確認

Node-REDバージョン確認
sudo node -v

V4.7.2にバージョンアップされました。

3-9.初期状態のノード確認

初期状態でインストールされているノードを確認します。
Node-REDの開始。

Node-REDの開始
cd ~/.node-red
sudo node-red-start

Node-REDが開始されました。
19.png

Raspberry Pi のIPアドレスは”192.168.1.12”です。
クライアントPCよりポート番号”1880”を指定し、アクセスします。
http://192.168.1.12:1880/ 

20.png

正常動作が確認できました。尚登録されているノード一覧は下記。
入力、出力に”Watson IoT”ノードがあります。
21.png

Node-REDを終了します。

Node-REDの終了
cd ~/.node-red
sudo node-red-stop

4. Watson Cognitiveノードの追加

ノードやフロー情報は下記サイトで確認できます。
http://flows.nodered.org/
22.png

Watson関連のノード情報は、
http://flows.nodered.org/node/node-red-node-watson
にあります。
23.png

RaspberryのWatsonノードを追加します。

Watsonノードの追加
cd ~/.node-red
sudo npm install node-red-node-watson

Node-REDを起動して追加されたノードを確認します。

24.png

Watson Cognitive関連のノードが追加されているのが確認できました。
これを使用して簡単なプログラムを作成したいと思います。

5. 簡単なサンプルプログラム

Rasberry PiのCPU温度を取得し、”Text to Speech"で音声ファイルに変換したものを、Rasberry Piのイヤホンで再生する非常に簡単なプログラムです。

5-1. 使用するBluemixサービス

Bluemixの下記2つのサービスを使用します。
・Internet of Things Platform
・Watson Text to Speech

5-1-1. Internet of Things Platformの登録

Bluemixのカタログより、”Internet of Things Platform”を選択。

25.png
「作成」

26.png
「ダッシュボードを起動」

27.png
「デバイス」

28.png
「デバイスの追加」

29.png
「デバイスタイプの作成」

30.png
「デバイスタイプの作成」

31.png
ここでは、名前:"Raspberry-DevType" 、説明:”My Raspberry Device”としました。⇒「次へ」

ここでは、モデルのみ登録しました。
32.png
「モデル」⇒「次へ」

33.png
ここでは、モデル:"Raspberry Pi 2Model B"としました。⇒「次へ」

34.png
「次へ」

35.png
「次へ」

36.png
ここでは、デバイスID:”RaspberryPi2-001”としました。⇒「次へ」

37.png
「次へ」

38.png
ここでは、自動生成認証トークンを選択。⇒「次へ」

39.png
「次へ」

40.png
×で閉じる。

以上で作成完了。
構成をメモします。

構成
組織 ID :e6vifg 
デバイス・タイプ:Raspberry-DevType 
デバイス ID :Raspberrypi2-001 
認証方式 :token 
認証トークン :(7BrB3rp&93E5aW8gi

41.png

5-1-2. Watson Text to Speechの登録

Bluemixカタログより、Watson Text to Speechを選択。

42.png
ここでは、サービス名:”Text to Speech-el”、資格情報名:”Credentials-1”はシステムでアサインされたのを使用しました。⇒「作成」

43.png
「サービス資格情報」⇒「資格情報の表示 」
資格情報をメモします。

資格情報
{
  "url": "https://stream.watsonplatform.net/text-to-speech/api",
  "password": "FrFi27YxDMr8",
  "username": "1e629837-2c6d-4b0c-8b73-91fa127521db"
}

以上で登録完了です。

5-2. サンプルプログラム

Raspberry PiのCPU温度を取得し、"Text to Speech"で音声ファイルにしたものを、Rasberry Piのイヤホンから音を再生します。
また同時に、Bluemixの"Internet of Things Platform"のダッシュボードにイベントを書き込みます。

44.png

5-2-1. timestamp(入力:inject)

10秒毎にプログラムを開始。
45.png

5-2-2. CPU温度の入手(その他:exec)

Raspberry Piのコマンド ”vcgencmd" とCPUの温度を取得するパラメータ" measure_temp" を使ってCPU温度を入手します。

46.png

vcgencmd
CPU温度以外の情報も色々取得できます。
http://elinux.org/RPI_vcgencmd_usage

5-2-3. 入手したCPU温度の整形(機能:function)

"vcgencmd measure_temp"コマンド実行の結果は、”temp=47.6'C”といったフォーマットで出力されますので、これを数字だけの”47.6”に整形します。
47.png

function
msg.payload = {"d":{"temp":msg.payload.replace("temp=","").replace("'C\n","")}};
return msg;

5-2-4. msg.payload(出力:debug)

デバッグメッセージを出力します。
48.png

5-2-5. イベントを登録(出力:Watson IoT)

Bluemixの"Internet of Things Platform"のダッシュボードにイベントを書き込みます。
「5-1-1. Internet of Things Platformの登録」でメモした構成を登録します。
・組織 ID :e6vifg
・デバイス・タイプ:Raspberry-DevType
・デバイス ID :Raspberrypi2-001
・認証方式 :token
・認証トークン :(7BrB3rp&93E5aW8gi

49.png

50.png

5-2-6. テキストメッセージ作成(機能:function)

"vcgencmd measure_temp"コマンド実行の結果を数値だけ抜き出し、”現在のラズベリーパイのCPU温度は"   " 度です。"といったメッセージを付けて成形します。
51.png

function
msg.payload = "現在のラズベリーパイのCPU温度は" +  msg.payload.replace("temp=","").replace("'C\n","") + " 度です。";
return msg;

5-2-7. Text to Speech(IBM_Watson:Text to Speech)

「 5-1-2. Watson Text to Speechの登録」で入手した資格情報を登録します。
・"password": "FrFi27YxDMr8",
・"username": "1e629837-2c6d-4b0c-8b73-91fa127521db"
ここでは、日本語を選択しました。
52.png

5-2-8. Speechメッセージの引き渡し(機能:function)

speech変数の値をpayloadへ渡します。
53.png

function
msg.payload = msg.speech;
return msg;

5-2-9. WAVファイル書込み(ストレージ:file)

Rspberry Piの ”/home/pi/temp/speech.wav”に音声ファイルを保存します。
54.png

5-2-10. WAVファイル読込み(ストレージ:file)

デバッグ目的で追加しましたが、このノードは必要ないです。(あっても特に問題ない。)

Rspberry Piの ”/home/pi/temp/speech.wav”の音声ファイルを読込ます。
55.png

5-2-11. 音声出力(その他:exec)

Raspberry Piのコマンド ”aplay" と音声ファイル” /home/pi/temp/speech.wav"で音声を出力します。

56.png

5-3. プログラムの実行

timestampノードの左端(矢印のところ)をクリックすると、プログラムが動き出します。
57.png

5-4. Blumixの "Internet of Things Platform" ダッシュボードでの情報確認

該当のデバイス行をクリックすると各種情報が表示されます。
58.png

59.png

6.おわりに

音声が出ない場合、デフォルトではサウンド出力先は自動判別になっていますが、強制的にラインに変更する、下記コマンドを実行してみてください。
amixer cset numid=3 1
また、
https://www.raspberrypi.org/documentation/configuration/audio-config.md
が参考になります。

JSON形式のサンプルプログラムフローを下記に貼り付けます。
「読込み」⇒「クリップボード」からインポートできます。
60.png

JSON形式のサンプルプログラムフロー
[{"id":"3342d0f3.3ecb9","type":"inject","z":"9fe2dbf9.ca9c88","name":"","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":false,"x":105,"y":88,"wires":[["a8a36520.f85e98"]]},{"id":"a8a36520.f85e98","type":"exec","z":"9fe2dbf9.ca9c88","command":"vcgencmd","addpay":false,"append":"measure_temp","useSpawn":"","timer":"","name":"CPU温度の入手","x":297,"y":91.5,"wires":[["ca961fc1.0b5c1","dc56eab7.0559f8"],[],[]]},{"id":"982e136.59a0af","type":"debug","z":"9fe2dbf9.ca9c88","name":"","active":true,"console":"false","complete":"payload","x":858,"y":81.5,"wires":[]},{"id":"ca961fc1.0b5c1","type":"function","z":"9fe2dbf9.ca9c88","name":"入手したCPU温度の整形","func":"msg.payload = {\"d\":{\"temp\":msg.payload.replace(\"temp=\",\"\").replace(\"'C\\n\",\"\")}};\nreturn msg;","outputs":1,"noerr":0,"x":544,"y":81,"wires":[["982e136.59a0af","b008a017.de52a"]]},{"id":"b008a017.de52a","type":"wiotp out","z":"9fe2dbf9.ca9c88","authType":"d","qs":"false","qsDeviceId":"","deviceKey":"da074a04.5d72d8","deviceType":"","deviceId":"","event":"event","format":"json","name":"イベントを登録","x":868,"y":154.5,"wires":[]},{"id":"3601997e.99ad56","type":"watson-text-to-speech","z":"9fe2dbf9.ca9c88","name":"Text to Speech","lang":"ja-JP","langhidden":"ja-JP","voice":"ja-JP_EmiVoice","voicehidden":"en-US_LisaVoice","format":"audio/wav","password":"FrFi27YxDMr8","x":795.5,"y":258.3499755859375,"wires":[["3525b7e5.88ccb8"]]},{"id":"dc56eab7.0559f8","type":"function","z":"9fe2dbf9.ca9c88","name":"テキストメッセージ作成","func":"msg.payload = \"現在のラズベリーパイのCPU温度は\" +  msg.payload.replace(\"temp=\",\"\").replace(\"'C\\n\",\"\") + \" 度です。\";\nreturn msg;","outputs":1,"noerr":0,"x":541.5,"y":259.4499816894531,"wires":[["3601997e.99ad56"]]},{"id":"3525b7e5.88ccb8","type":"function","z":"9fe2dbf9.ca9c88","name":"Speechメッセージの引き渡し","func":"msg.payload = msg.speech;\nreturn msg;","outputs":1,"noerr":0,"x":622.5,"y":383.4499816894531,"wires":[["2224815b.a605be"]]},{"id":"d3ee5d85.8bc71","type":"file in","z":"9fe2dbf9.ca9c88","name":"WAVファイル読込み","filename":"/home/pi/temp/speech.wav","format":"","x":834.5,"y":493.75,"wires":[["65a90d38.7c16a4"]]},{"id":"65a90d38.7c16a4","type":"exec","z":"9fe2dbf9.ca9c88","command":"aplay /home/pi/temp/speech.wav","addpay":true,"append":"","useSpawn":"","timer":"","name":"音声出力","x":1085.5,"y":497.54998779296875,"wires":[[],[],[]]},{"id":"2224815b.a605be","type":"file in","z":"9fe2dbf9.ca9c88","name":"WAVファイル書込み","filename":"/home/pi/temp/speech.wav","format":"","x":567.5,"y":495.75,"wires":[["d3ee5d85.8bc71"]]},{"id":"da074a04.5d72d8","type":"wiotp-credentials","z":"","name":"","org":"e6vifg","devType":"Raspberry-DevType","devId":"Raspberrypi2-001"}]
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4