Node.jsで実世界UI
@shokaiReal.UI #01
私
•@shokai
•橋本 翔
•慶應SFC増井研
実世界UIとは !
電子工作とかセンサーとか使うやつのこと
実世界インタフェースは作るの大変だし、家で使ってるとすぐ動かなく
なったりする
沢山のデバイスにまたがったプログラム書くの難しい
!
家のWiFi再起動したら止まるとかやめてほしい
この辺を使うと良いと思う•Node.js • Socket.IO上に実装されたLinda • BlendMicro + ble-firmata
が作ったすごい人が作った
デモ
階層型コンテンツビューア
コントローラー色々
似たような構成で 色々やっている
研究室間 センサ情報通知
•部屋が多いので一体感を出したい • Yoが来る、部屋のスピーカーから音声で読み上げもある
近づいたらドアが開く
• iBeaconで接近 •サーボで鍵まわす •両手がふさがってても入れる
チャットでも見れる
チャットでも見れる
多いので省略
主に使っているもの紹介•Node.js • Socket.IO上に実装されたLinda • BlendMicro + ble-firmata
が作ったすごい人が作った
Node.js•ブラウザ以外でJavaScriptが動く •イベント駆動 •デバイス制御しながら通信したりするのは、Thread等よりイベント駆動の方が書きやすい感じする
•スクリプト言語でハードウェア扱うならライブラリ開発の活発さ気にするべきで、最近Nodeが圧倒的にすごい
BlendMicro• 5月末に発売した • Arduino MicroにBLE(Bluetooth Low Energy)が載ったボード
• $35 • 4日で届く
ble-firmata• https://www.npmjs.org/package/ble-firmata • node.jsの中にarduinoのコードが書ける • BLEの通信が隠蔽されて楽
var BLEFirmata = require('ble-firmata');var arduino = new BLEFirmata();!arduino.connect();!arduino.on('connect', function(){! arduino.digitalWrite(13, true, callback);! arduino.on('analogChange', function(e){ console.log("pin" + e.pin + " : " + e.old_value + " -> " + e.value); });});
Socket.IO•サーバー・クライアント間で双方向通信できるライブラリ
•なにがなんでも接続し、切れても再接続 • websocket, comet等 •メッセージングできる •オブジェクトをシリアライズしたりとか面倒な事全部やってくれる
Linda• https://www.npmjs.org/package/linda • Socket.IO上に実装されたLinda • 共有メモリによる分散処理プリミティブ • write, read, take, watch の4命令で大抵の分散処理が書ける
• Node.jsサーバープロセスに組み込んで使う •ブラウザJS, Ruby, scala, Obj-C, Javaで使える
デバイス間で直接通信するのではなく、データは全てLindaサーバーにwriteし、必要なデバイスがそれをwatch/readするとよい
var linda = new LindaClient().connect(socket);var ts = linda.tuplespace("delta");!var arduino = new BLEFirmata().connect();var tempe = arduino.analogRead(1)*3.3*100/1024;ts.write({type: "sensor", name: "temperature", value: tempe});
var ts = linda.tuplespace("delta");!ts.watch({type: "sensor", name: "temperature"}, function(err, tuple){ exec(“say 現在の温度” + tuple.data.value);}
温度を読み取って
別のマシンで読み上げる
socket.ioインスタンス
温度センサ読む
オブジェクトの 部分一致で watch
温度センサー使う別のアプリが複数ぶらさげられる サーバー側は書かなくていい
Tupleが見える
壊れた箇所の特定がかんたん
ブラウザからTuple writeできる
システム全体が完成してなくても部品を動かせる
Node, Socket.IO, Linda, BlendMicro, ble-firmata使うと、完成してなくても動かせるし、安定して動くし、壊れても気づきやすい
おわり
連載はじまったので 買ってください
実世界コンピューティング、ただし回路図とか出てこない