Edited at

Alexaで動くロボットを作ろう in Alexa Day 2019 カリキュラム

Alexa Day 2019で開催された親子ワークショップ「Alexaで動くロボットを作ろう」の親側のAlexaスキルを作成する手順書です。

https://alexaday2019.aajug.jp/session/49/

必要なものを揃えれば自宅でも構築できます。


タイムスケジュール

時間  
内容

13:00-13:15
挨拶/ワークショップの説明

13:20-15:00
子)PLEN:bit組み立て
親)Alexaスマートホームスキル作成

15:00-15:10
休憩

15:10-16:30
Micro:bit/PLEN:bit親子プログラミング

16:30-17:00
自由時間


登場人物

用語
説明

Alexa
Amazonが開発したAIアシスタント。

Echo
Alexaを呼び出すためのAmazonが販売しているデバイス。今日はEcho dotを使います。

スマートホームスキル
「Alexa、暖房をつけて」や「Alexa、温度を25度にして」とかスキルの呼び出し名なしで自然に呼びかけができるスキル。(Notカスタムスキル)

Node-RED
ブラウザ上で部品(ノード)をつなぐ操作だけでノンプログラミングでアプリケーション開発ができる開発環境

Node-RED Alexa Home Skill Bridge
AlexaとNode-REDをいい感じに繋いでくれるサービス。

Micro:bit
イギリスの放送局BBCが中心となって開発した教育用の小型コンピューターボード

PLEN:bit
Micro:bitで制御可能なメイドイン大阪なロボット

MakeCodeエディター
Microsoftが提供している、ブロックまたはJavaScriptを使ってmicro:bitを簡単にプログラミングできる開発環境


構成図

image.png


皆さんの手元にあるもの

Echo Dot(レンタル)

Raspberry Pi 3 B(レンタル)

Raspbian Stretch with desktop 2018-11-13 -> SDカードにインストール済み (SDカードは持ち帰りOKです)

- Node.js8系(10系だとBLE周りがうまく動かない不具合あり)

- Node-RED(node-red-contrib-generic-bleとnode-red-contrib-alexa-home-skillのノードを追加インストール済み)

PLEN:bit (子供たちが作ります/購入する方はお持ち帰りいただけます)

PLEN:bitはこちらから購入可能です

https://plen.jp/wp/shop/


Node-RED Alexa Home Skill Bridge登録

AlexaとNode-REDを繋いでくれるサービスです。

https://alexa-node-red.bm.hardill.me.uk/ からユーザー登録を行います。

画面上部のRegisterをクリックします。

image.png

ユーザー名、メールアドレス、パスワードを入力して登録をします。入力した情報はNode-REDで入力する必要があるので忘れないようにしておいてください。

image.png

登録できるとログインした状態となります。(認証メールなどはなし)

Devicesをクリックし、デバイスの登録を行います。

image.png

Add Deviceをクリックして、デバイス(PLEN:Bitへの命令)を登録します。

image.png

最初に前進させるための命令を作成します。

- NameとDescriptionに「前進」と入力します。

- Onにチェックをします。

入力したらOKをクリックします。

image.png

これで前進する命令が作成されました。

image.png

同様にパタパタの命令を作成してください。

image.png

前進とパタパタの2つの命令が作成できました。

image.png

これでNode-RED Alexa Home Skill Bridgeの設定は完了です。


Alexaアプリのダウンロード&セットアップ

以下を参考にスマートフォンにAlexaアプリをダウンロードし、お手元のEcho dotをセットアップしてください。

https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201602060

https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201994280

「Alexa,今何時?」と聞いて反応があればセットアップ成功です。


AlexaにNode-REDスキルの設定

AlexaアプリでNode-REDスキルを設定します。

Alexaアプリを開いて、左のメニューから「スキル・ゲーム」を選択します。

IMG_8751.PNG

右上の検索ボタンをクリックします。

IMG_8752.PNG

「nodered」と入力して検索をクリックします。

IMG_8753.PNG

Node-REDというスキルが表示されるのでクリックします。

IMG_8754.PNG

スキルを有効にします。

IMG_8755.PNG

Node-RED Alexa Home Skill Bridgeのログイン情報を入力する画面となるので、ログイン情報を入力します。

IMG_8756.PNG

正常にリンクされると成功画面が表示されますので、完了を押してAlexaアプリに戻ります。

IMG_8757.PNG

端末を検出する画面になるので、「端末を検出」をクリックします。

IMG_8758.PNG

検出まで少し時間がかかります。

IMG_8760.PNG

検出が終わるとNode-RED Alexa Home Skill Bridgeに登録したデバイスが検出されるので、「デバイスを選択します」をクリックします。

IMG_8761.PNG

先ほど作成した前進を選択します。

IMG_8762.PNG

グループを選択をクリックします。

IMG_8763.PNG

カスタムグループを作成を選択します。

IMG_8764.PNG

PLENbitというグループを作成します。

IMG_8765.PNG

これでPLENbitというグループ内に前進が登録されました。

IMG_8767.PNG

同じ手順でパタパタも登録してください。

IMG_8768.PNG

登録したグループ、デバイスは画面下のメニューに「デバイス」から確認できます。

IMG_8770.PNG

次にAlexaに呼びかけた時に設定した命令を実行するために、定型アクションを設定します。左のメニューから「定型アクション」を開きます。

IMG_8772.PNG

マイ定型アクションを開き右上の追加ボタンをクリックします。

IMG_8771.PNG

ここから実行条件とアクションを設定します。

IMG_8773.PNG

実行条件は開始フレーズを設定します。

IMG_8774.PNG

前進させるためのフレーズとして、「アレクサ、ロボットを歩かせて」と設定します。

IMG_8775.PNG

実行させるアクションは。スマートホームを選択します。

IMG_8776.PNG

デバイスをコントロールを選択します。

IMG_8777.PNG

実行させるデバイスとして、「前進」を選択します。

IMG_8778.PNG

これで、「アレクサ、ロボットを歩かせて」と呼びかけると、「前進」の命令が送られることになります。

IMG_8779.PNG

保存ボタンを押して設定を保存します。

IMG_8780.PNG

Alexaに声をかけなくてもフレーズ右側の再生ボタンを押すことでアクションを実行させることもできます。

IMG_8781.PNG

前進と同様の手順で、

「アレクサ、ロボットをパタパタさせて」と呼びかけると、「パタパタ」のアクションが実行されるように設定をしてください。

IMG_D3FAE493B90B-1.jpeg

これで、Alexa側のスキルの設定は完了です。


Raspberry Pi & Node-REDの設定を行います。

Raspberry Piを電源をONにして1、2分経つとNode-REDへアクセスできます。

http://[IPアドレス]:1880/

へアクセスをするとNode-REDの画面が表示されます。

image.png

左のメニューから「Alexa home」ノードをフローに展開します。

image.png

「Alexa home」ノードをダブルクリックし、Account右側の編集ボタンをクリックします。

image.png

Node-RED Alexa Home Skill Bridgeのログイン情報を入力して、「Add」をクリックします。

image.png

DeviceにNode-RED Alexa Home Skill Bridgeで登録したデバイスが表示されます。(うまく更新されない場合は一度Doneを押して一度設定を閉じて再度「Alexa home」ノードを開いてみてください。)

image.png

次にFunctionからfunctionノードを展開します。

image.png

functionノードをクリックして、Nameに「1:前進」と入力します。

Functionには以下のコードを入力します。

6e400003b5a3f393e0a9e50e24dcca9eは今回ロボットへ命令を送信する際にロボット側のBluetoothのインターフェイスIDになります。

313aは、1:をhex形式に変換した文字列です。

入力後Doneをクリックします。

msg.payload =

{
"6e400003b5a3f393e0a9e50e24dcca9e": "313a"
}
return msg;

image.png

「前進」ノードと「1:前進」ノードを接続します。これで、Node-RED Alexa Home Skill Bridgeで前進が呼び出されると「1:前進」ノードが実行されます。

image.png

outputのdebugノードを展開して、「1:前進」ノードと接続します。

image.png

同様の手順で「2:パタパタ」も作成してください。

Alexa homeノードのNode-RED Alexa Home Skill Bridgeアカウントは、「1:前進」で登録したものを選択してください。

同一アカウントを複数登録してしまうと、Node-RED Alexa Home Skill Bridgeとの通信が不安定になってしまいます。

パタパタのfunctionは以下になります。「2:」のhex変換をペイロードに付与します。

msg.payload =

{
"6e400003b5a3f393e0a9e50e24dcca9e": "323a"
}
return msg;

「1:前進」で作成したdebugノードに接続します。

image.png

デバッグ画面が表示されていない場合は、右上のメニュー -> view -> Debug messages をクリックしてください。

image.png

これで、Node-REDの設定は完了です。

右上のDeployをクリックして設定を反映させてください。

image.png

Alexaアプリから定型アクションを呼び出すとdebugにメッセージが送信されることを確認してください。

IMG_D3FAE493B90B-1.jpeg

デバッグ画面に、それぞれのアクションに応じたJSONが表示されることを確認してください。

image.png

これで、Alexaからラズパイ上のNode-REDまで通信ができるようになりました。


Micro:bitのプログラミング

PLEN:bitを制御しているMicro:bitのプログラミングは、 MakeCodeエディターを使って行います。

MakeCodeエディター

https://makecode.microbit.org/#

プログラムの転送の仕方

https://microbit.org/ja/guide/quick/


PLEN:bitのプログラミング

ここからはお子さんが作ったPLEN:bitを操作していきます。

今回AlexaからPLEN:Bitを動かすために使うコードはこちらになります。

https://makecode.microbit.org/_PmYXcgA2Ja31

ブラウザで開きhexファイルをダウンロードし、各自のMicro:bitに転送を行ってください。

ここでは

1-起動時に変数をリセットしてBLEを起動する。

2-BLEで「1:」や「2:」などのデータを受け取ったらコロンの前までを変数に入れる。

3-変数に応じて、PLEN:Bitの動きを変える

ということをしています。

image.png

転送がうまくできているとPLEN:bitの電源を入れた際に「Hello!」と表示されます。

なお、Micro:bit上の編集ボタンを押すとカスタマイズができます。


PLEN:bitとの接続

Raspberry PiからBluetoothでPLEN:bitを操作するために、

Node-REDをブラウザから開き、Bluetoothの接続を追加していきます。

outputメニュー内のGeneric BLEノードを展開し、ノードをダブルクリックします。(InputではなくOutputです)

image.png

NameにPlenbitと入力し、BLEの編集ボタンをクリックします。

image.png

「Select from scan result」をチェックして、自身のPLEN:bitのMACアドレスを選択し、Addをクリックします。

image.png

microbitが設定されたことを確認して、Doneをクリックします。

image.png

右上のDeployをクリックして設定を反映させます。

image.png

これでEcho(Alexa)からロボットを動かす準備が完了しました。

「アレクサ、ロボットを歩かせて」

「アレクサ、ロボットをパタパタさせて」

とEchoにロボットを動かす指示をしてみてください。

時間のある方は、追加の命令を設定してみたり、呼び出し方を変えてみたり、自由にカスタマイズしてみてください。


ヒント


  • 命令をした時に020エラーとなったり、変な動きになったりする場合はPLEN:bitのバッテリーが少ない可能性があります。充電しても改善しない場合は、Micro:bitのメモリが足りていない可能性があるので、Micro:bitのコードを減らしてみてください。

  • Alexaに話しかけるときはゆっくりはっきり話すのがポイントです。それでもうまく認識してくれないときは、スマートホームスキルの呼び出し文章を少し変えてみるといいかもしれません。

  • 当日お配りしたRaspberry Piへのログインは、 ユーザー:pi/パスワード:alexadayでログインできます。(sshおよびVNCでリモートログイン可能です。 ssh pi@raspberrypi.local