Upload
masahiko-kubara
View
4.221
Download
5
Embed Size (px)
Citation preview
リレーションズ株式会社
久原政彦
Masahiko KUBARA
自己紹介
久原政彦(Masahiko KUBARA)リレーションズ株式会社→この会場です!
組み込みエンジニアフロントエンジニア
ステータス:明日引っ越し。
背景
以前は、組み込みエンジニア
ARMとBTと足裏圧力センサを使ってリハビリ支援
RasPiで廃棄物計量監視
最近は、webフロントエンジニア
JavaScript/SPA
bower, browserify, vue, gulp,,, 覚えることたくさん
。○(電子工作をもっと楽しみたい…)
_人人人人人人人人人人人人_> JavaScriptで電子工作 < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
JavaScriptで電子工作…
Tesselとかもあるけど…
高いねん… 10000円とか…
RasPiが安くて気軽!
3,240円なら、まぁ壊しても安心
GPIO直接叩ける
通信もWi-FiドングルでOK
「センサデータとか、処理結果とか、うまく投げたいな。」
_人人人人人人人人人人人人人人人_> いまMQTTが流行りだってよ! < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
MQTTって何?
メッセージングプロトコル。
IoT、とくにセンサネットワーク向き ヘッダが軽い
重要度管理ができる (QoS)
最後のメッセージはいつでも取り出せる (Retain)
遺言も残せる (Will)
pub/subモデル データを好きなだけ投げて良い
それを聞きたい人だけに、配送する
プロトコルが軽いので、中継役が低スペでもOK
つくってみた
玄関に人が来たら知らせるシステム
センサで人を検知して、アラームを鳴らす。 つい先日、5Fを増床しました。
誰かが来てもわからない。
「お客さんキタヨ!!」→すぐ対応!
「うろついてる人イルヨ」→すぐ対応!
システム概要
ハードウェア Raspberry Pi
アラーム:LED
センサ :焦電センサ(SB412A @\500)
ソフトウェア Node.js
mqtt.js MQTTが簡単に使える
wiring-pi GPIOが簡単に使える
構成
RasPi焦電センサ
Wi-Fi
test.mosquitto.orgRasPi
Wi-Fi
publisher subscriberbroker
RasPi焦電センサ
Wi-Fi
mkubara/ir/9F
mkubara/ir/5F
mkubara/ir/9F
mkubara/ir/5F
publisher(センサ)
初期設定 RasPiのWi-Fiを設定
Node.jsを入れておく
センサ出力をGPIO11に繋ぐ
npm i mqtt wiring-pi
sudo node pub.js
// MQTTクライアントのセットアップvar mqtt = require('mqtt');
, client = mqtt.connect('mqtt://test.mosquitto.org');
// センサ入力の設定var wpi = require('wiring-pi')
, sensor = 11;wpi.setup('wpi');wpi.pinMode(sensor, wpi.INPUT);
// 100msごとにセンサをチェック// 反応があればpublishするvar state = 0;setInterval(function(){var detected = wpi.digitalRead(sensor);
if (state != detected){client.publish('mkubara@github/ir/5F‘
, ''+detected);state = detected;
}}, 100);
subscriber(LED)
初期設定 RasPiのWi-Fiを設定
Node.jsを入れておく
LEDをGPIO10に繋げておく
npm i mqtt wiring-pi
sudo node sub.js
// MQTTクライアントのセットアップvar mqtt = require('mqtt');
, client = mqtt.connect('mqtt://test.mosquitto.org');
// センサ入力の設定var wpi = require('wiring-pi')
, led = 10;wpi.setup('wpi');wpi.pinMode(led, wpi.OUTPUT);
// 焦電センサからの通知を購読するvar detected = 0;client.subscribe('mkubara@github/ir/5F'); client.on('message', function(topic, message){ detected = (message!='0' ? 1 :0);
});
// 定期的に表示を更新するsetInterval(function(){ wpi.digitalWrite(led, detected);
}, 100);
brokerはどうする?
test.mosquitto.org テスト用。コネクションを定期的にリセット
MQTT as a Service
Sango(時雨堂) :メッセージ数で制限
CloudMQTT(heroku):帯域幅で制限
自前で立てる mosquitto
クラウドサーバ、RasPiでもいい!
Demo…はライブ実行中ですね
やってみて
すごい、楽。 クライアントはTopicを指定してpub/subするだけでいい
○ 再送管理とか気にしない
○ APIとかいらない
意外とJavaScript-OnlyでもOKだった webプログラマ側からどんどんアプローチできるかも
webとgadgetが、簡単に繋がる! 興味のある人、ぜひお友達になりましょう!
これからやりたいこと
MQTT-SN
センサネットワーク ZigBee系を想定? XBee、TWE-Lite
BLEとかでもイケるとは思う
TWE-Liteで超省電力ノード TWE-EH Solar
○ 無電源!: 環境発電で賄える
○ 鋭意製作中。
ブラウザからでもpub/subできる!
mows.js
WebsocketでMQTTできる
クライアントもNode.jsで作る browserify
angular, react, vue …
gulp
mows
いろいろなモノと連携…
Slack
チャットでpublish
hubot
センサをsubscribeしておいて、反応する
MicroService
センサデータを、意味のあるデータへ変換
Google App Script
カレンダーを見て、会議の終了アラートとか
MQTTでオフィスハック
おわり
補足用
MQTTってなんぞや? [MQTT 1/3]
軽量プロトコル
IoT向けM2M用に作られたメッセージングプロトコル
2バイトヘッダサイズ。 → 組み込み環境向き(HTTPの1/10のデータ量で済む例も)
トピックベースで pub/sub [MQTT 2/3]
トピックでまとめる
pub/subモデル 投げたいだけ投げる
聞きたいだけ聴く 認証はTLSとかで
Brokerが仲介
センサネットワーク向き [MQTT 3/3]
Will
接続が切れたら発行されるメッセージ。これで電池が切れてもわかる!
Retain
最後のメッセージは取っておける。いつ購読開始してもデータが受け取れる!
QoS
メッセージの重要度を決められる。大事なデータだけは、絶対送る!