29
Node.js実世界UI @shokai Real.UI #01

Node.jsで実世界UI

Embed Size (px)

DESCRIPTION

Real.UI#01の発表スライド http://realui.org

Citation preview

Page 1: Node.jsで実世界UI

Node.jsで実世界UI

@shokaiReal.UI #01

Page 2: Node.jsで実世界UI

•@shokai

•橋本 翔

•慶應SFC増井研

Page 3: Node.jsで実世界UI

実世界UIとは !

電子工作とかセンサーとか使うやつのこと

Page 4: Node.jsで実世界UI

実世界インタフェースは作るの大変だし、家で使ってるとすぐ動かなく

なったりする

Page 5: Node.jsで実世界UI

沢山のデバイスにまたがったプログラム書くの難しい

!

家のWiFi再起動したら止まるとかやめてほしい

Page 6: Node.jsで実世界UI

この辺を使うと良いと思う•Node.js • Socket.IO上に実装されたLinda • BlendMicro + ble-firmata

が作ったすごい人が作った

Page 7: Node.jsで実世界UI

デモ

Page 8: Node.jsで実世界UI

階層型コンテンツビューア

Page 9: Node.jsで実世界UI

コントローラー色々

Page 10: Node.jsで実世界UI

似たような構成で 色々やっている

Page 11: Node.jsで実世界UI

研究室間 センサ情報通知

•部屋が多いので一体感を出したい • Yoが来る、部屋のスピーカーから音声で読み上げもある

Page 12: Node.jsで実世界UI

近づいたらドアが開く

• iBeaconで接近 •サーボで鍵まわす •両手がふさがってても入れる

Page 13: Node.jsで実世界UI

チャットでも見れる

Page 14: Node.jsで実世界UI

チャットでも見れる

Page 15: Node.jsで実世界UI

多いので省略

Page 16: Node.jsで実世界UI

主に使っているもの紹介•Node.js • Socket.IO上に実装されたLinda • BlendMicro + ble-firmata

が作ったすごい人が作った

Page 17: Node.jsで実世界UI

Node.js•ブラウザ以外でJavaScriptが動く •イベント駆動 •デバイス制御しながら通信したりするのは、Thread等よりイベント駆動の方が書きやすい感じする

•スクリプト言語でハードウェア扱うならライブラリ開発の活発さ気にするべきで、最近Nodeが圧倒的にすごい

Page 18: Node.jsで実世界UI

BlendMicro• 5月末に発売した • Arduino MicroにBLE(Bluetooth Low Energy)が載ったボード

• $35 • 4日で届く

Page 19: Node.jsで実世界UI

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); });});

Page 20: Node.jsで実世界UI

Socket.IO•サーバー・クライアント間で双方向通信できるライブラリ

•なにがなんでも接続し、切れても再接続 • websocket, comet等 •メッセージングできる •オブジェクトをシリアライズしたりとか面倒な事全部やってくれる

Page 21: Node.jsで実世界UI

Linda• https://www.npmjs.org/package/linda • Socket.IO上に実装されたLinda • 共有メモリによる分散処理プリミティブ • write, read, take, watch の4命令で大抵の分散処理が書ける

• Node.jsサーバープロセスに組み込んで使う •ブラウザJS, Ruby, scala, Obj-C, Javaで使える

Page 22: Node.jsで実世界UI

デバイス間で直接通信するのではなく、データは全てLindaサーバーにwriteし、必要なデバイスがそれをwatch/readするとよい

Page 23: Node.jsで実世界UI

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

温度センサー使う別のアプリが複数ぶらさげられる サーバー側は書かなくていい

Page 24: Node.jsで実世界UI

Tupleが見える

壊れた箇所の特定がかんたん

Page 25: Node.jsで実世界UI

ブラウザからTuple writeできる

システム全体が完成してなくても部品を動かせる

Page 26: Node.jsで実世界UI

Node, Socket.IO, Linda, BlendMicro, ble-firmata使うと、完成してなくても動かせるし、安定して動くし、壊れても気づきやすい

Page 27: Node.jsで実世界UI

おわり

Page 29: Node.jsで実世界UI

連載はじまったので 買ってください

実世界コンピューティング、ただし回路図とか出てこない