RAPIRO(ラピロ)をWebサーバにする

ラピロとコミュニケーションをとりたいと考えたとき、やり方はいろいろあると思います。

  1. ラピロに何かセンサを繋げて、それに対して人がアクションをとってそれをセンシングさせる
  2. ラピロにマイクを繋げて、音声認識させる
  3. スマートフォン経由でラピロと対話

1.と2.は直接ラピロとコミュニケーションをとることができますが、それ相応にハードルが上がります。3.はスマホを介するので間接的なコミュニケーションになりますが、一番簡単そうなので、まずはこれからやってみることにします。

スマートフォン経由でラピロと対話するにしても、これまたやり方は色々あると思います。AndroidアプリやiOSアプリをゴリゴリと書くのアリかもしれませんが、個人的には、ラピロをWebサーバにして、HTTPでアクセスできるようにするのが一番簡単なような気がします。これなら、ブラウザが動く環境なら、AndroidだろうがiPhoneだろうがPCだろうが、どれを通してもラピロと通信することができるので。

ということで、ラピロのRaspberry PiにWebサーバを実装することにします。これまたApacheやらlighttpdやら色々選択肢はあるのかもしれませんが、個人的に実装が簡単そうに思えるnode.js + Expressフレームワークで実装してみようと思います。

ではまず、node.jsのインストールから。node.jsは頻繁にバージョンアップがあるため、バージョン管理ツールを本体のインストールより先にイ ンストールするのが良いらしいです。ということで、node.jsのバージョン管理ツール”nodebrew”をインストール。

$ curl -L git.io/nodebrew | perl - setup

続いて、環境変数の設定。ホームフォルダの.bashrcの末尾に以下を追加。

export PATH=$HOME/.nodebrew/current/bin:$PATH

書けたら、有効にする。

$ source .bashrc

これでバージョンマネジャのインストールは完了。次にnode.jsの本体をインストールする。本家を見てみると、11/2時点ではv0.10.33が最新らしいのですが、ここを除いてみるとRaspberry Pi向けのバイナリファイルはv0.10.3が最新だった(=node-v0.10.3-linux-arm-pi.tar.gzが存在した)ので、これを入れることにします。

$ nodebrew install-binary v0.10.3

インストールしたら、これを利用するように設定。

$ nodebrew use v0.10.3

ちなみに、現在インストールされているnode.jsのバージョンと、現在利用設定しているバージョンを知りたい場合は、以下を実行。

$ nodebrew list

これで、node.js本体のインストールは完了。

次 に、Webアプリを簡単に作れるようにするためのフレームワークである、Expressをインストールします。express-generatorを使ってアプリの雛形をつくるやり方もありますが、自分の環境では何だかうまく動かなかったのと、あと勉強も兼ねて、雛形なしで作っていくことにします。

といっても、サンプルレベルならとても簡単です。node.jsの公式ページの”Getting Started”のやり方に従うだけです。

まず、適当に作業用のディレクトリを作って、そこに移動します。

$ mkdir Rapiro
$ cd Rapiro

次に、package.jsonを作るために、以下を実行。

$ npm init

シェルが色々聞いてきますが、とりあえず全部enterしとけばOKです。

package.jsonができたら、expressをインストール。

$ npm install express --save

ここまでできたら、同じフォルダにapp.jsを作ります。app.jsの内容は、”Getting Started / Hellow World”の内容そのままでOK。

できたら、以下で実行。

$ node app.js
Example app listening at http://0.0.0.0:3000

それでは、Webサーバが機能しているかチェックです。Raspberry Piの繋がっているローカルネットに手持ちのスマートフォンをWi-Fi接続し、スマートフォンのブラウザで以下のように入力。

http://192.168.xxx.xxx:3000/

(アドレスはRaspberry PiのIPアドレス。事前にifconfigか何かでチェック)

これで、画面に”Hello World!”が表示されればOKです。

 

あとはこのサンプルに対して色々ルーティング処理を入れていけば、ラピロへの問いかけに対して色々なリアクションをさせる、というのは作り込んでいけそうです。