この記事は、toio(トイオ)のJavaScriptライブラリが公開されたのを受けて、micro:bit や Alexa を使った toio の操作を行ってみた話の概要です。
まずは概要を書いたこの記事を書いて、詳細は別記事に分けようと思っています。
はじめに
toio(トイオ)とは
toio(トイオ)は、ソニー・インタラクティブエンタテインメントさんが提供しているロボットトイです。
概要は、下記の公式ページなどをご覧ください。。
●小さなキューブ型ロボットトイ・toio(トイオ)
https://toio.io/
toio のJavaScriptライブラリについて
元々、上記の動画にあるような使い方をするものでしたが、最近、この toio のJavaScriptライブラリが公開されたことにより、テキストプログラミングで制御できるようになりました。
●toio/toio.js: Library for controlling toio™Core Cube
https://github.com/toio/toio.js/
node.js の他のライブラリ等と組み合わせると、色々なことができそうだったので、とりあえず3つほど試してみました。
toio のJavaScriptライブラリで試したこと
toio のキーボード操作を行うサンプル
最初は、3つある公式サンプル(※2019年6月のライブラリ公開時点)のうちの1つ「keyboard-control」です。
導入手順は、JavaScriptライブラリの公式ページに記載があるとおり「gitでのリポジトリのクローン、yarnによるインストール・ビルド」といった流れです。
それらを試した結果は以下のとおりです。
#toio の JavaScriptライブラリの
— you (@youtoy) 2019年6月14日
キーボードコントロールのサンプルを少し書きかえ。
スピードの値を減らして動かしてみました。 pic.twitter.com/tBB0GOgivI
プログラムを実行すると、toio と PC が接続され、PCのキーボードの矢印キーを押すと、toio がそれに連動して動きます。
このとき、公式サンプルのスピードのパラメータを、少し調整したりしてみました。
micro:bit のボタン押下で toio を操作
次に、何か別のデバイスとの連携をしてみたいと思い、micro:bit をコントローラにするようなものを作ってみました。
それを試したときの様子が、以下の動画です。
#toio のJavaScriptライブラリを試したやつの3つ目。
— you (@youtoy) 2019年6月14日
micro:bit と組み合わせてみました。
micro:bit の Aボタンで前進、Bボタンで後退します。 pic.twitter.com/GZsPt60r9M
micro:bit についている2つのボタン(A・Bボタン)を押すと、toio が前進したり後退したりします。
micro:bit のボタン押下を toio ヘと伝えている部分は、シリアル通信です。
node.js のプログラムの中では「serialport」を利用しており、micro:bit と PC との間はUSB接続での通信です。
micro:bit 側のプログラムは、MakeCodeエディターを使って、以下のような非常にシンプルな仕組みを作っています。
これにより、miciro:bit 上のボタン押下によって異なる文字列が、シリアル通信で PC に送られることになります。これを受け取る部分と、上記で試した公式サンプル「keyboard-control」の toio を動かす部分を組み合わせて、micro:bit を使った toio の操作を実現しました。
Alexa を使った声での toio の操作
次に、Amazon の AIアシスタントである Alexa と組み合わせてみました。
Alexaスキル(スマホでいうアプリ的なもの)を作り、それと公式サンプル「keyboard-control」の toio を動かす部分を組み合わせました。
まずは作ってみたものをご覧ください。
ここ最近試した2つを組み合わせ。
— you (@youtoy) 2019年6月18日
組み合わせたのは、#toio のJavaScriptライブラリと、#voiceflow (Alexaスキル)です。
声で toio を動かしてみました!#voicedg pic.twitter.com/GHXTxq0Lnv
Amazon の画面付スマートスピーカー Echo Spot で Alexa を動作させています。
最初に、今回用に作った Alexaスキルを呼び出し、その後、声で「前進・後退・右回転」といった動作を指示して、toio を動かしています。
ここで利用した仕組みなどを、以下で簡単に記載していきます。
voiceflow(GUIベースでのAlexaスキル開発)
Alexaスキルは、node.js や Python で開発できますが、今回は、GUIベースでスキル開発が行える「voiceflow」を利用しています。以下のツイートにあるような、様々な機能を持ったブロックを配置して、それらに設定を付与し、ブロック間を線でつないでいく流れで開発します。
#voiceflow で、Alexaスキルからのライン通知を作ったやつ。
— you (@youtoy) 2019年6月17日
こんな構成で、オレンジで囲った部分が、LINE通知用です。
(※ LEDを光らせる、とかある部分は別の実験用です)#voicedg pic.twitter.com/EjbZ4ZXObE
余談ですが、この voiceflow にある外部APIとの連携の仕組み(自分が使ったのは HTTPリクエストの POSTメソッドの利用)で、Alexa から LINE に通知を送ったり、Wio NODE というデバイスにつないだ LED のテープを光らせたり消したり、というものを簡単に作れたりしました。
昨日のイベントで初めて使った #voiceflow 。
— you (@youtoy) 2019年6月16日
イベントで講師をされていた @mochan_tk さんに、外部API 連携に使うやつがメニュー内のどれなのか、だけは聞いてたけど、
自宅で詳細を見て試したら、あっさりと、IFTTT経由でLINEアプリへの通知が作れてしまった(Webhook+LINE Notify)。#voicedg pic.twitter.com/3IPNKZqom7
また、 #voiceflow のお試しスキルで、外部APIを使うものを作ってみました。
— you (@youtoy) 2019年6月17日
この前のものは、IFTTT経由でのLINEアプリへの通知(Webhook+LINE Notify)をやるものでしたが、
今回は、Wio NODE につながった LEDテープを、インターネット経由で光らせたり、消したり、というものです。#voicedg pic.twitter.com/uMjaO0XApv
今回も、この HTTPリクエストを送る機能を含んだ Alexaスキルを作りました。
ngrok(自分の PC内で立ち上げたローカルサーバに外部からアクセス)
Alexaスキルからの HTTPリクエストを受け取り、それを toio に伝える仕組みが必要です。
とりあえず簡単に試す、というのを主目的として「ngrok」を使いました。これを使うと、自分のローカルPC内で動作させたサーバに、外部からアクセスさせることができるようになります。
今回は、Alexaスキルからの HTTPリクエストを、自分の PC内で立ち上げたローカルサーバで受信できるようにします。そのローカルサーバを node.js を使って動作させ、また、それと合わせて自分の PC から toio を操作するプログラムも node.js で動かし、これらを組み合わせました。
おわりに
今回、toio の JavaScriptライブラリの公式サンプルの1つを流用して、micro:bit や Alexa を toio と組み合わせてみました。
他のサンプル2つで使われている仕組みや、toio を動かす仕組み以外のものは試せていないため、それらも試してみようと思います。
また、今回は試した内容の概要のみを記載していて、プログラムの詳細などを一部省略しているので、そのあたりの補足も別途行えればと思います。