これまでOSXやChromebookをホストマシンとして、Arduino FirmataをCylon.jsやJohnny-Fiveから操作していました。ロボットやRCカーを作ろうとするといつまでも有線では困ります。センサーやアクチュエーターなどのハードウェア操作はArduinoは優れています。一方ArduinoへFirmataプロトコルのコマンドを発行したり、外部からWi-Fi経由でMQTTやWebSocketのメッセージを取得する場合はLinuxが動作するRaspberry PiやEdisonが便利です。Arduino YunやLinino OneのようにArduinoとLinuxの両方をワンボードに乗せたマイコンもあります。impやSparkのようにクラウドからデバイスに対して直接コマンドを発行できると、これまでのクラウドの技術を活用してコネクテッドデバイスの可能性が広がります。
Arduinoから大気圧センサーモジュールBMP180のデータをMeshbluにPOSTする
Docker上に構築したMeshbluへArduinoからセンシングデータを送信してみます。前回起動したコンテナではMongoDBを使わない設定なので、POSTしたデータはNeDBにJSONファイルとして保存されます。大気圧センサーモジュールはBMP180を使います。前回Intel Edisonでこのモジュールを使ったときはcylon-i2cやmraaが使えず、bmp085パッケージを使いました。Arduinoの場合cylon-firmataが動作するようです。Cylon.jsを使ってセンシングデータを取得してMeshbluにデータをPOSTしてみます。
Johnny-FiveでJavaScript Roboticsをはじめる
EspruinoやTessel、imp、Spark、EdisonのmraaなどNode.js/JavaScriptのインタフェースを持ったマイコンや小型コンピューターが増えてきました。これまでIoTのJavaScriptフレームワークとしてCylon.jsを主に使っていました。Cylon.jsのDSLはシンプルで良いのですが、もうちょっとNode.jsらしく書けないか別の方法を探しています。mraaはLow Level過ぎたりなかなか難しいです。Johnny-Fiveも同様のJavaScript Roboticsフレームワークです。FirmataプロトコルがベースになっているのでArduinoを使ってLチカのサンプルを書いてみます。
OSXにHomebrewでtmuxとEmacs 24.4をインストールする
普段はクラウド上のUbuntuコンテナやLinux Mintをメインの作業環境にしています。最近Arduinoなどマイコンを操作していると、USBシリアル通信をするホストマシンとしてOSXで一通りの開発環境が必要になりました。いつものクラウド上と同じようなの開発環境とOSX上にも用意しようと思います。
EspruinoのQuick Startでボタンを押してLチカする
2週間前にSeeed Studioから購入したEspruinoがようやく届きました。50ドル以上購入特典で送料無料すると到着まで時間がかかるようです。EspruinoはJavaScript for Microcontrollersこと、JavaScript/Node.jsで操作できるマイコンボードです。また、ChromeアプリのWeb IDEが開発環境として用意されているのも魅力です。Web IDEを使ってQuick Startを読みながらLチカまでやってみます。
Meshblu on Dockerの構築とMosquittoでテスト
Dockerを使いMeshbluのIoTプラットフォームをローカルに構築します。GitHubのリポジトリにはDockerfileもあるのですが、開発用に`node_modules`のキャッシュと`docker restart`がやりやすいように少し構成を変更します。最後にMosquittoのコンテナを2つ使いPub/Subのテストをしてみます。
Node.jsでつくるIoT - Part3: OctobluのMeshblu
Octobluは2014年に設立されたIoT事業者です。同じ年の12月にはCitrixに買収されています。IoTプラットフォームのMeshbluでは、コネクテッドデバイスと人やWebサービスをリアルタイム通信でつなぐためのプラットフォームと周辺技術の開発をオープンソースで行っています。ソースコードはMITライセンスでGitHubに公開されています。また、このプラットフォームを使ったサービスも現在ベータ版で提供を開始しています。
ArduinoのFirmataファームウェアをOSXのCylon.jsから使う
croutonのUbuntuにはNode.jsとCylon.jsをFirmataファームウェアを使って操作する環境を用意しました。OSX Yosemiteにも同じようにNod.jsの開発環境を用意します。FirmataのアップロードはArduino IDEを使わずにGortのCLIから行います。
EdisonとSSCI-Eaglet-MFTボードのGroveコネクタからBMP180モジュールとI2C接続する
Dockerのnpm installをnode_modulesのシムリンクとボリュームを使って効率化する
Node.jsアプリのDockerイメージを作っているとpackage.jsonのnpm installのときにnode-gypによるネイティブモジュールのビルドが走ることがあります。Node.jsのコードやDockerfileの構成を変更するたびにビルドされて長いときは数分かかります。なにか良い方法がないかググっているとnpm package.json and docker (mounting it…)という記事を見つけました。このソリューションを使っていまビルドに時間がかかっているMeshbluのDockerイメージ作成を修正します。