Home Made Garbage

発話でラジコン! ー Alexa + Node-RED + micro:bit ー

ホーム
電子工作
Raspberry Pi
IOT
WEB

ものすごく便利なNode-REDモジュールを見つけてしまいました。

Node-RED Alexa Home Skill Bridge というもので、仮想のAlexaデバイスを作成して発話応答をNode-REDへ返してくれます。まさにブリッジとなってAmazon Echoへの発話とNode-REDの各種パレットをつないでくれます。

これなんでもできるようになるんじゃ。。。可能性ひろがるぅ 😳 

ここではAmazon Echoでコントロールするラジコンカーを作ってみました。

構成

Amazon Echoへの発話応答をNode-RED Alexa Home Skill Bridgeを介して ラズパイZero W上のNode-REDに返して、BLEでmicro:bitに信号を送ります。micro:bitは拡張ミニロボットカーMaqueenに載せて信号を受けて動かします。

部品

Maqueen詳細については以下参照ください。

DFRobot micro:bit ロボットプラットホーム Maqueen を使ってみた

Node-RED Alexa Home Skill Bridgeの設定

Node-RED Alexa Home Skill Bridge用のアカウントを作成してロボットカーを制御するための仮想のAlexaデバイスを作成します。

アカウント登録

以下にアクセスして、Resisterをクリックします。
 https://alexa-node-red.bm.hardill.me.uk/

ユーザ名とメアド、パスワードを登録します。

デバイス登録

登録後、Devicesタグを選択してAdd Deviceをクリックします。

 
ロボットカーのモータを回して前進、後進させるためのAlexa用デバイス”回転”を作成しました。

Name: デバイス名 ” 回転” 入力
Description: デバイスの簡単な説明記載
Actions: デバイスの動作種類を選択。ここではOnとOffを選択。
     Onで前進、 Offで後進させます。

同様にロボットカーを左右に向かせる”ターン”と、停止させる”ストップ”という2つのデバイスを追加で作成しました。

Alexaスキル  Node-RED有効化

スマホのAlexaアプリでNode-REDスキルを有効にしてAlexaサービスとNode-RED Alexa Home Skill Bridgeを紐づけます。

 
スキルを有効にするとNode-RED Alexa Home Skill Bridgeのアカウント入力画面に切り替わるので、登録したユーザ名とパスワードを入力します。

 
問題なければデバイス検出画面に移行します。

 
端末の検出をクリックで作成したデバイスが見つかります。

定型アクションを編集

作成したデバイスの起動するための発話をカスタマイズするために、 Alexaスマホアプリで定型アクションを編集します。

以下のように設定しました。

「アレクサ、前に進め」:デバイス “回転” On
「アレクサ、バックして」:デバイス “回転” Off
「アレクサ、右向け右」:デバイス “ターン” On
「アレクサ、左向け左」:デバイス “ターン” Off
「アレクサ、止まれ」:デバイス “ストップ” On

参考

 

Node-RED設定

Node-REDにAlexa Home Skill Bridge用のノードをインストールして、発話を受けてBLEでmicro:bitに文字列を送信できるようにします。ここではRaspberry Pi Zero WのNode-REDを使用しました。

我が家ではRaspberry Pi Zero Wを自宅内サーバとして使っていて、コンシェルジュのティラノくんが宿題やったか?とか朝だよーとか言ってくれるのです。

AquesTalk と Node-RED と ラズパイで おしゃべりティラノくん作製

ノードのインストール

node-red-contrib-alexa-home-skillをインストールします。

設定でパレットのインストールでnode-red-contrib-alexa-home-skillを検索して”install”クリックでノードが追加されます。

更にBLEを使用するために以下も同様にインストールします。
 node-red-contrib-generic-ble

Node-REDフロー

Alexa-homeノード

作成した仮想Alexaデバイス”回転”、”ターン”、”ストップ”の3つを配置します。

ノードを配置してまずはNode-RED Alexa Home Skill Bridgeで登録したユーザ名とパスワードを入力します。

 
デバイスを選択します。ここでは”回転”を選択。

同様に”ターン”とストップ”用のノードも配置します。
 

true/false分岐 ファンクションノード

“回転”と”ターン”デバイスは発話によってtrueとfalseを返すので、ファンクションノードで分岐させます。

 

BLE送信用文字列 ファンクションノード

“回転”と”ターン”のOn/Offと”ストップ”のOnの発話応用に対応するBLE送信用の文字列を生成するファンクションノードを配置します。

前進(”回転”デバイス On)では文字列 “1:”を送信しています。
micro:bit BLEの書き込み用UUIDと16進数文字列を指定します。

それぞれ以下の文字列を送信します。
 前進(”回転”デバイス On): “1:”
 後進(”回転”デバイス Off): “2:”
 右向(”ターン”デバイス On): “3:”
 左向(”ターン”デバイス Off): “4:”
 ストップ(”ストップ”デバイス On): “5:”
 

Generic BLE 出力ノード

Generic BLE outノードを配置して、鉛筆マークをクリックします。

 
Select from scan resultにチェックを入れ、BBC micro:bit を選択します。

 

MakeCode

Node-REDからの文字列をBLE介してmicro:bitで受けて、ミニロボットカーを制御します。

ここではMakeCodeでブロックコーディングしてmicro:bitに書き込みます。

 https://makecode.microbit.org/

機能拡張

設定アイコン -> 拡張機能をクリックでMaqueen用とbluetooth用のブロックを追加します。

 

Maqueenブロック追加

以下のライブラリリンクを入力して検索をクリック

maqueenをクリックでMaqueenのブロックが追加されます。

 

bluetoothブロック追加

拡張機能でbluetoothを選択。無線ブロックと共存ができないので、無線ブロック削除メッセージが出ます。削除しちゃってください。

 
bluetooth用ブロックが追加されます。

 

micro:bitのBLEペアリング設定を変更します。設定アイコン -> プロジェクトの設定をクリックで一番上の”No Paring Required”を選択します。これでペアリング無しで通信が可能となります。

 

参考

MakeCode ブロック

以下がMaqueen制御用のMakeCodeブロックです。


 

① 初期設定

変数stateを初期化して、BluetoothがNode-RED(Raspberry Pi Zero W)と接続されるとニコニコマークをmicro:bitのLEDマトリクスに表示します。


 

② 文字列受信

Node-REDからの文字列を受信してコロン”:”前の文字を変数stateに代入します。


 

③ 前後進制御

文字列”1:”受信で前進、”2:”受信で後進させます。LEDマトリクス表示もそれぞれ変えます。


 

④ 右向き制御

文字列”3:”受信で右に90°ターンします。LEDマトリクスにはターン方向の矢印を表示させて Maqueen前方についている赤LEDインジケータ右側をウィンカーのように点滅させてます。ターン後、全て停止します。


 

⑤ 左向き制御

文字列”4:”受信で左に90°ターンします。LEDマトリクスにはターン方向の矢印を表示させて Maqueen前方についている赤LEDインジケータ左側をウィンカーのように点滅させてます。ターン後、全て停止します。


 

⑥ モータ停止

文字列”5:”受信でモータ停止し、LEDマトリクスの表示を消します。

 

MakeCode JavaScript

全体のJavaScriptコードを以下に記載します。

 

 

動作まとめ

ゴチャついてきたので、動作を一覧にまとめます。


 

動作

音声でロボットカーを制御できております!

ちょっと初期設定が大変かもだけど、ブロック組み合わせるだけで実にフィジカルなVUIアプリを作成できました!

ゴミ箱とか音声で近くに移動してくれたりとかいいかも 🙄 

とにかくNode-RED Alexa Home Skill Bridge が神がかって便利なので今後もいろいろ活用考えたいです!

Related Posts

「発話でラジコン! ー Alexa + Node-RED + micro:bit ー」への8件のフィードバック

  1. 貴重な記事を読ませていただきました。孫を喜ばせようと奮闘していますが1箇所分からないところがありますので教えて頂きたく。「micro:bit BLEの書き込み用UUID」はmicro:bitによって違うのでしょうか?違う場合はどのように確認すればよろしいのでしょうか?初歩的な質問で申し訳ありませんが宜しくアドバイスをお願いします。

    1. お問い合わせありがとうございます。
      Generic BLE 出力ノードでmicro:bitを選択して接続するとGATT Characteristics に各プロパティーのUUIDが表示されます。

      Write Without ResponseのUUIDを指定してみてください。

      1. 何度かやって見ましたがGATT Characteristics の表示が(not available)になります。前行程の設定がどこか間違っているのでしょうか?

        1. BLEノードでBBC micro:bitは選択可能でしたでしょうか?
          パソコンはBLE対応の機種でしょうか?
          ご教示のほどよろしくお願いいたします。

          1. はい、BBC micro:bitは選択出来ました。パソコンはまずraspberry pi zeroでやってみてその後MacBook proでやってみましたが状況は変わらず(not available)でした。

          2. お手数をお掛けして申し訳ありません。ここのサイトでMain Bluetooth services, pairing not requiredのプログラムをmicro:bitに読み込んでGeneric BLE 出力ノードでmicro:bitを選択して接続するとGATT Characteristicsが正しく表示されます。
            https://www.bittysoftware.com/downloads.html
            その後、元のプログラムに戻すと正しく動作しません。この現象でどこの設定が間違っているのか想定可能でしょうか?

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください