Edited at

#toio を Alexa や micro:bit から操作する 〜概要編〜(JavaScriptライブラリを使ってみた)

この記事は、toio(トイオ)のJavaScriptライブラリが公開されたのを受けて、micro:bit や Alexa を使った toio の操作を行ってみた話の概要です。

まずは概要を書いたこの記事を書いて、詳細は別記事に分けようと思っています。


はじめに


toio(トイオ)とは

toio(トイオ)は、ソニー・インタラクティブエンタテインメントさんが提供しているロボットトイです。

 

概要は、下記の公式動画を見ていただくのが分かりやすいと思います。

さあtoio™をはじめよう!:商品説明動画


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 と PC が接続され、PCのキーボードの矢印キーを押すと、toio がそれに連動して動きます。

このとき、公式サンプルのスピードのパラメータを、少し調整したりしてみました。


micro:bit のボタン押下で toio を操作

次に、何か別のデバイスとの連携をしてみたいと思い、micro:bit をコントローラにするようなものを作ってみました。

それを試したときの様子が、以下の動画です。

micro:bit についている2つのボタン(A・Bボタン)を押すと、toio が前進したり後退したりします。

micro:bit のボタン押下を toio ヘと伝えている部分は、シリアル通信です。

node.js のプログラムの中では「serialport」を利用しており、micro:bit と PC との間はUSB接続での通信です。

micro:bit 側のプログラムは、MakeCodeエディターを使って、以下のような非常にシンプルな仕組みを作っています。

micro:bitでのシリアル通信

これにより、miciro:bit 上のボタン押下によって異なる文字列が、シリアル通信で PC に送られることになります。これを受け取る部分と、上記で試した公式サンプル「keyboard-control」の toio を動かす部分を組み合わせて、micro:bit を使った toio の操作を実現しました。


Alexa を使った声での toio の操作

次に、Amazon の AIアシスタントである Alexa と組み合わせてみました。

Alexaスキル(スマホでいうアプリ的なもの)を作り、それと公式サンプル「keyboard-control」の toio を動かす部分を組み合わせました。

まずは作ってみたものをご覧ください。

Amazon の画面付スマートスピーカー Echo Spot で Alexa を動作させています。

最初に、今回用に作った Alexaスキルを呼び出し、その後、声で「前進・後退・右回転」といった動作を指示して、toio を動かしています。

ここで利用した仕組みなどを、以下で簡単に記載していきます。


voiceflow(GUIベースでのAlexaスキル開発)

Alexaスキルは、node.js や Python で開発できますが、今回は、GUIベースでスキル開発が行える「voiceflow」を利用しています。以下のツイートにあるような、様々な機能を持ったブロックを配置して、それらに設定を付与し、ブロック間を線でつないでいく流れで開発します。

余談ですが、この voiceflow にある外部APIとの連携の仕組み(自分が使ったのは HTTPリクエストの POSTメソッドの利用)で、Alexa から LINE に通知を送ったり、Wio NODE というデバイスにつないだ LED のテープを光らせたり消したり、というものを簡単に作れたりしました。

今回も、この 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 を動かす仕組み以外のものは試せていないため、それらも試してみようと思います。

また、今回は試した内容の概要のみを記載していて、プログラムの詳細などを一部省略しているので、そのあたりの補足も別途行えればと思います。