mbedJS beta版をリリースしました
WebブラウザからJavascriptでmbedを制御できる次世代フィジカルコンピューティングソフトウェア(?)エェェェェンベッドJS (mbedJS)をリリースしました。*1
これは何?
エェェェェンベッドJSは、mbed単体で稼働するネットワークフィジカルコンピューティングの用のWebサービスソフトウェアです。
HTMLとJavaScriptでHTMLを書く知識があれば、特に新しいことを覚えなくてもフィジカルコンピューティングを始めることができます。
mbedをネットワーク経由でリモート制御するためのファームウェア、及びJavascriptAPIで構成されています。Websocket上のJSON RPC 2.0を用いた高速なRPCと、mbedSDKライクなJavascriptAPIが特徴です。
例えば、よくあるLチカプログラムは次のようなJavascriptで書くことができます。
function start() { var mcu=new mbedJS.Mcu(location.host,{ onNew:function(){ var v=1; var pin=new mbedJS.DigitalOut(mcu,mbedJS.PinName.LED1,{ onNew:function(){ pin.write(1); }, onWrite:function(){ setTimeout(function(){pin.write((v++)%2);},100); }}); }, onError:function(){alert("Error!");} }); }
mbedJSを始める準備
ハードウェアの準備
mbedJSを始めるには、次のハードウェアの何れかを準備する必要があります。
*2
ファームウェアの書き込み
mbedJSのファームフェアは、mbed.orgから取得できます。
mbedJS - a mercurial repository | mbed
ファームウェアをダウンロードして書き込んでください。
mbedJSの使い方
ブラウザで開発
mbedJSには、オンチップのJavascriptエディタが搭載されています。Javascript Editorを開くと、すぐに開発を始めることができます。
作成したコンテンツは、mbedに直接保存する事が出来ます。((現在はmbed1768のみ可能です。))
Onchip Javascript Editor
APIの種類
使用できるAPIの一覧とその説明は以下のURLから閲覧できます。
http://mimic.sourceforge.jp/doc/mbedjs/current/JsDoc Reference - Index
現在は、mbedSDKに含まれる以下のクラスと同等のAPIが整備されています。
- AnalogIn
- AnalogOut
- BusIn
- BusOut
- BusInOut
- DigitalIn
- DigitalOut
- PortIn
- PortOut
- PwmOut
- SPI
- SPISlave
Javascriptの書き方
mbedJSのAPIには、コールバックとGeneratorの2つの使い方があります。
コールバックはどのブラウザでも動作しますが、複雑なコンテンツを製作する場合にコードが難しくなります。(よく問題になるコールバック地獄です。)
Generatorを用いると、以下の様なスッキリとしたコードでmbedを制御することができます。
ただし、ES6をサポートしたブラウザ(FireFox,Chrome)でしか動作しません。
Generatorを使った記法
function start() { var g=function*(){ try{ var mcu=new mbedJS.Mcu(location.host,g); yield mcu.waitForNew(); var pin=new mbedJS.DigitalOut(mcu,mbedJS.PinName.LED1,g); yield pin.waitForNew(); for(var v=1;;v++){ yield setTimeout(function(){g.next();},100); yield pin.write(v%2); } }catch(e){ mcu.shutdown(); alert(e); throw e; } }(); g.next(); return; }
設定方法の詳細など
JavascriptAPI以外の機能は前作のMiMicRemoteMCUと同一です。設定方法などの詳細は、以下のマニュアルを参考にできます。
その他の遊び方
高速なJSON-RPCを使った直接制御
mbedJSのRPCはWebSocketとJSON-RPC/2.0で実装されており、高速に動作します。
従来のHTTPベースのRPCでは不可能だった、細かい単位でハードウェアの直接制御ができます。
一般的なmbedJS APIは、1~5msで応答することができます。
複数台のmbedを同時に制御
mbedJSは複数台のmbedを1つのコンテンツから操作することができます。上限はありません。(ネットワークに接続できる最大台数が上限です。)
例えば、1台のmbedで取得したアナログ値を、ブラウザを経由して別のmbedに転送するといった使い方もできます。
オンラインコンテンツと連携した新しいフィジカルコンピューティング
mbedJSはブラウザに対しては一般的なWebサーバと同じように振る舞います。制御用のコンテンツも特殊なものではなく、普通のHTML5です。
例えば、mbed取得したデータをオンラインの他のWebサーバに転送したり、逆にオンラインのコンテンツからmbedを操作することが可能です。
従来のようにファームウェアを変更する必要はなく、Javascriptとコンテンツの実装のみで実現することができます。
独自のRPC関数の追加
割と簡単にできます。rpctbl.cpp、libMiMic/mbed/jsonrpc/あたりを見ると多分仕組みは・・・ご理解いただけるかと。需要があれば解説記事書きます。
技術的な資料とか
- libMiMicのソースコード
http://sourceforge.jp/projects/mimic/scm/svn/tree/head/trunk/
- 無圧縮のmbedJS.all.js
http://nyatla.jp/mimic/js/current/mbedJS.all.js
- javascriptの開発ツリー
http://sourceforge.jp/projects/mimic/scm/svn/tree/head/trunk/misc/mbedJS/mbddJS.API/
- 出版社/メーカー: スイッチサイエンス
- メディア: おもちゃ&ホビー
- クリック: 1回
- この商品を含むブログを見る
- 出版社/メーカー: サッポロビール
- メディア: 食品&飲料
- 購入: 1人 クリック: 2回
- この商品を含むブログ (4件) を見る