Node.jsで実世界UI

8,998 views
8,903 views

Published on

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

Published in: Technology

Node.jsで実世界UI

  1. 1. Node.jsで実世界UI @shokai Real.UI #01
  2. 2. 私 •@shokai •橋本 翔 •慶應SFC増井研
  3. 3. 実世界UIとは ! 電子工作とかセンサーと か使うやつのこと
  4. 4. 実世界インタフェースは 作るの大変だし、家で 使ってるとすぐ動かなく なったりする
  5. 5. 沢山のデバイスにまたがっ たプログラム書くの難しい ! 家のWiFi再起動したら止 まるとかやめてほしい
  6. 6. この辺を使うと良いと思う •Node.js •Socket.IO上に実装されたLinda •BlendMicro + ble-firmata が作ったすごい人が作った
  7. 7. デモ
  8. 8. 階層型コンテンツビューア
  9. 9. コントローラー色々
  10. 10. 似たような構成で 色々やっている
  11. 11. 研究室間 センサ情報通知 •部屋が多いので一体感を出したい •Yoが来る、部屋のスピーカーから音声で読み上げもある
  12. 12. 近づいたらドアが開く •iBeaconで接近 •サーボで鍵まわす •両手がふさがってても入れる
  13. 13. チャットでも見れる
  14. 14. チャットでも見れる
  15. 15. 多いので省略
  16. 16. 主に使っているもの紹介 •Node.js •Socket.IO上に実装されたLinda •BlendMicro + ble-firmata が作ったすごい人が作った
  17. 17. Node.js •ブラウザ以外でJavaScriptが動く •イベント駆動 •デバイス制御しながら通信したりするのは、 Thread等よりイベント駆動の方が書きやす い感じする •スクリプト言語でハードウェア扱うならライ ブラリ開発の活発さ気にするべきで、最近 Nodeが圧倒的にすごい
  18. 18. BlendMicro •5月末に発売した •Arduino Microに BLE(Bluetooth Low Energy)が載 ったボード •$35 •4日で届く
  19. 19. 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); }); });
  20. 20. Socket.IO •サーバー・クライアント間で双方向通信できる ライブラリ •なにがなんでも接続し、切れても再接続 •websocket, comet等 •メッセージングできる •オブジェクトをシリアライズしたりとか面倒 な事全部やってくれる
  21. 21. Linda •https://www.npmjs.org/package/linda •Socket.IO上に実装されたLinda •共有メモリによる分散処理プリミティブ •write, read, take, watch の4命令で大抵の分散 処理が書ける •Node.jsサーバープロセスに組み込んで使う •ブラウザJS, Ruby, scala, Obj-C, Javaで使える
  22. 22. デバイス間で直接通信する のではなく、データは全て Lindaサーバーにwrite し、必要なデバイスがそれ をwatch/readするとよい
  23. 23. 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 温度センサー使う別のアプリが複数ぶらさげられる サーバー側は書かなくていい
  24. 24. Tupleが見える 壊れた箇所の特定がかんたん
  25. 25. ブラウザからTuple writeできる システム全体が完成してなくても部品を動かせる
  26. 26. Node, Socket.IO, Linda, BlendMicro, ble-firmata 使うと、完成してなくても 動かせるし、安定して動く し、壊れても気づきやすい
  27. 27. おわり
  28. 28. 連載はじまったので 買ってください 実世界コンピューティング、ただし回路図とか出てこない

×