AlexaとNode-REDでRaspberry piを制御する

まず、やりたい事。
Alexaから音声コマンドで照明をつけたり消したりしたい
いわゆるスマートホームってやつですな。
 
僕は電子工作はできるけどプログラムはまったくわからない…
でも、Node-REDという素晴らしいツールがあるんです!
 
WebブラウザからGUI画面でフローチャートみたいなのをあれこれ繋げるだけで
プログラムが完成してしまうとても便利なもの。僕にぴったりじゃないか。
 
というわけで、手持ちの機材だけで出来そうなのでサクッとやってみました
 
用意するものはRaspberry piとブレッドボードとその辺に転がってた抵抗とLED
 

f:id:hiratechlab:20180522181837j:plain

 
Raspberry pi(以下ラズパイ)はSSHで他のPCから接続できるようにしておき
Windows上のTera Termなどで作業する方がやりやすいと思います
 
ラズパイの設定→インターフェースでSSHを有効にしておきましょう
 
あとはラズパイのターミナルでip aと打ち込めばIPアドレスが出てくる
たぶん多くのルータでは192.168.x.xとかになってると思うので
Tera Term上でそのアドレスを入れれば接続できるはず。
 
コンソールの準備ができたら、まずはNode.jsnpm
最新版にアップデートしましょう
こちらに詳しく書いてくださっています。 

Raspberry PiにNode.jsとnpmの最新版をインストールする

 
Node-REDはラズパイに標準で入っていますが、Alexaで制御するには
Alexa Home Skill Bridgeというものをインストールする必要があります
上記を入れることで、Node-RED上にAlexaのノードが追加されます。
 
Alexa Home Skill BridgeはAlexaと紐づいているため簡単なアカウント登録が
必要になりますがこちらに手順などわかりやすく書いてくださっているので
そのまま手順通り行いました。
 
Node-REDの画面にアクセスするには、ラズパイ上でNode-REDを立ち上げておき
外部からWebブラウザでアクセスします。
 
ラズパイがサーバになっているので192.168.0.2:1880
みたいな感じにアドレス入れれば接続できます。
 
制御目的でつかうなら、ラズパイを起動したときに自動でNode-REDを開始する
ようにしておいたほうが便利でしょう。
 
 
一応。僕がつまづいた点だけ載せておきます
 
まず、単純にAlexaのノードと出力を繋いだだけでは動作しないみたいで
間にchangeノードを挟んで値の変換をしています。
 

f:id:hiratechlab:20180509111716j:plain

 

ノード一覧からchangeを選んでAlexaと出力の間に挟み
名前は適当に。bool to int とでもつけておきましょうか
 

f:id:hiratechlab:20180509111753j:plain

 

”true"は”1”に"false”は”0”に変換するようにします。これで動作するはず
 
あ、変更したら必ず右上の”デプロイ”を押すようにしてくださいね。
それを押さないと反映されないので…
 
今回はデバイス名に”ラズパイ”とつけたので、Alexaに
 
「Alexa ラズパイをオンにして」と言えばONになり
「Alexa ラズパイをオフにして」と言えばOFFになります
 
バイス名はAlexaアプリから変更できます。”ラズパイ”は言いにくいので
”照明”とか、用途によって変えるとよいと思います。
 
次回は、LEDの部分をソリッドステートリレーに変更して
家の中の廊下の照明を制御にチャレンジの予定です。