SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
RとIoT
2015年12月5日 R研究集会
岡田 昌史
Contents
• 初級 - mongodbに貯めたデータを読んでみる
• 中級 - MQTTプロトコルでPublishされたデータを
Subscribeして取得してみる
• 上級 - R on Raspberry Piで、直接シリアル通信でデー
タを受けてみる(未完)
• 番外編 - ShinyからIoTガジェットを操作する
RとIoT
 ー 目的
Internet Of Things
• IoT: Internet of Things, モノのインターネット
• マイコンが付いていたものに、Wi-FiやBluetooth, 3G通信チッ
プが付くようになり、ネットと情報の送受信ができるようになっ
た
• 様々な機器に搭載されているセンサーのデータを容易に集めら
れるようになり、利用できるデータが爆発的に増大した
• Rの機能なら、これらセンサーからの一次情報を直接リアルタ
イムに収集分析できるかもしれない
IoTとR
• Rはシングルスレッドなので、基本的にリアルタイム処理は
苦手
• ネットワーク経由でデータが少しずつ入ってくるのも苦手
• 一度他の方法でデータベースにデータを蓄積してから解析す
る方が、、、
• でもやっぱりShinyを使いたい、とか、何でもRで完結しない
と気がすまない、とか、ただ面白そうだからやってみたい、
という方の参考になれば。
RとIoT
 ー 方法
IoT機器はどのように通信をするか
• マイコンが非力で電力も節約したいので、「軽い」処理であることが重要
• マイコンとセンサ間の通信は下記のようなものが使われる
• シリアル通信 UART: Universal Asynchronous Receiver Transmitter 機
能を持ったマイコン
• I2C(Inter-Integrated Circuit), SPI(Serial Peripheral Interface) : IC間での
シリアル通信規格
• GPIO(General Purpose I/O): 汎用入出力ピン。そのまま1ビットの状態
を表すのに使っても良いし、シリアル通信のラインとして用いても良い
IoT機器はどのようにインターネット
に情報を送信するか
• 一旦マイコンでデータを受けてから、
• Bluetooth, BLE(Bluetooth Low Energy) + スマートフォン
• Wi-Fi
• 3G通信
• などの通信モジュール経由でデータをインターネット上に送
信する。Wi-Fi, 3Gモジュールは直接IPアドレスを持てるが、
BLE機器はスマートフォンのアプリ経由で通信する
通信プロトコル
• REST APIでHTTPで通信するものもあるが、HTTPはヘッダ
の処理などが煩雑になり、マイコンでは扱いにくい
• MQTT(MQ Telemetry Transport)はPublish/Subscribe型と呼
ばれる、あるPublisherクライアントが, サーバ(MQTT
Brokerと呼ばれる)に情報を送信すると、同時に接続してい
るSubscriberクライアントがその情報を受け取ることができ
る、というプロトコルで、ヘッダも小さいのでIoT機器でよ
くつかわれている
データフォーマット
• シリアル通信などでは固定長データもまだまだ現役だが、
インターネット上のサーバに送信するときには、JSONが
よく使われているようだ
• マイコンには荷が重いためか、XMLはほとんど見かけな
い
• ファイル単位ではなく、行単位での情報送信となる場合
がほとんどであるためか、カンマ区切りのようなフォー
マットもあまり見かけない
ストレージ
• MQTT Broker自体はストレージとしての機能を持た
ない(データを蓄積しない)
• MQTTに載せて運ばれてきたJSONデータを
MongoDB, RedisなどのKey-Valueストアにそのまま
格納するプログラムはいくつも存在する。
Rからのアプローチ
1. MQTT-mongoDBゲートウェイにより, mongoDB
に蓄積したデータをRから読む
2. Rから直接MQTT Brokerにsubscribeして、送られ
てきたデータを読む
3. Rを動かすマシンとセンサーを直接接続し、シリア
ル通信, GPIO等でデータを読む
MQTT-MongoDB ゲートウェイ経由で
IoT機器が送信するデータを読む
• mongolite パッケージ
• mongoDBの情報更新に伴って自動的に処理を呼び出し
てくれるわけではないので、定期的にDBに最新X件の
データを取りに行かなければならないが、mongoDBの
クエリ sort={"$natural":-1 } を使うと最新X件
のデータだけを取り出せるので楽
• データフレームへの変換も自動
Rから直接MQTT Brokerにsubscribe
して、送られてきたデータを読む
• RMQTT みたいなパッケージがあるかなと思うと、まだ無いよ
うだ
• 幸い、ponte という node.js によるMQTT Broker実装は、
MQTTメッセージをHTTP RESTにブリッジしてくれる機能を内
包していたので、それを使えばRはHTTPだけしゃべれば良い:
curl パッケージ
• JSONデータは jsonlite パッケージでリスト/データフレーム化
Rを動かすマシンとセンサーを直接接続
し、シリアル通信, GPIO等でデータを読む
• R tty connection patch なるものがR 2.12あたり向
けに公開されている。それでシリアル通信は可能っ
ぽいが…
• Raspberry Pi / BeagleBone / PCduino / Galileo /
Edison / DragonBoard あたり向けにRをビルドする
環境を整える時間がなく未完
• 続きはいずれブログで
使用したIoT機器
• ownTracks (Android/iOS
アプリ)
• 自分の場所(緯度経度)を
MQTT Brokerに定期的
にPublishするアプリ
使用したIoT機器
• Espruino + ESP8266 + BME280
• 温度・湿度・気圧センサチップのBME280
• シリアル通信で制御できるWi-Fiモジュール ESP8266
• JavaScriptでプログラムが書けるマイコン Espruino
• これらをつなぎ、BME280からI2Cで読み取ったデータをWi-Fiで
MQTT Brokerに飛ばす自作システム
使用したIoT機器
• Hackey
• Wi-Fi接続機能を持った 穴
• をかける/開けるとREST APIをコールできる
• 先ほどのponte を経由するとMQTT BrokerにメッセージをPublishできる
RとIoT
結果
デモ
Shinyで表示するときのTips
# reactiveValues()でReactive variableを宣言
myReact <- reactiveValues(wdf=data.frame())
# reactivePoll() で1000msごとのポーリングを設定。
# checkWeather()がponte からHTTPで最新の温度湿度気圧情報を取
得する関数
wdata <- reactivePoll(1000, session, checkWeather,
checkWeather)
# データが来ていたら、今までのデータにrbindで追加する
observe({
myReact$wdf <- rbind(isolate(myReact$wdf), wdata())
})
RとIoT
まとめ
Summary
• IoT機器からMQTTで送信されるデータをRに取り込み、Shiny
Webアプリ上で1秒程度の遅れで表示した。
• mongoDBゲートウェイ、HTTPゲートウェイを使うことでRから
の直接のデータ取得が可能であったが、MQTTを直接Subscribe
できるパッケージは現在のところないので、登場が待たれる
• R単独でシリアル通信ができるようになると, TWE-Liteとか通信
経路をさらに広げられるはずだが、R 3.0以降へのパッチが出て
いないので、こちらも欲しいところ
参考文献
• ponte - HTTPゲートウェイ、mongoDBストレージ接続を備えた
MQTT Broker
• http://www.eclipse.org/ponte/
• tty patch for R 2.13 - Rから直接シリアル通信を行う機能を付加する
パッチ
• https://biostatmatt.com/code
• がじぇろぐ - 製作日記的なもの
• http://b.okadajp.org/

Contenu connexe

En vedette

第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
Yusuke Yamamoto
 

En vedette (10)

Node red hands on - public
Node red hands on - publicNode red hands on - public
Node red hands on - public
 
RとCDISC
RとCDISCRとCDISC
RとCDISC
 
Node redでソーシャルデータ分析
Node redでソーシャルデータ分析Node redでソーシャルデータ分析
Node redでソーシャルデータ分析
 
部屋と◯◯と私
部屋と◯◯と私部屋と◯◯と私
部屋と◯◯と私
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析
 
とりあえずTwitterで日本語を集めてみよう
とりあえずTwitterで日本語を集めてみようとりあえずTwitterで日本語を集めてみよう
とりあえずTwitterで日本語を集めてみよう
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう
 
IBM Bluemix Node-REDを使って簡単アプリ作成を体験する
IBM Bluemix Node-REDを使って簡単アプリ作成を体験するIBM Bluemix Node-REDを使って簡単アプリ作成を体験する
IBM Bluemix Node-REDを使って簡単アプリ作成を体験する
 
Low Latency Mobile Messaging using MQTT
Low Latency Mobile Messaging using MQTTLow Latency Mobile Messaging using MQTT
Low Latency Mobile Messaging using MQTT
 
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
 

Similaire à RとIoT

Similaire à RとIoT (20)

Jumpwire.io @ Maker Faire Tokyo 2015
Jumpwire.io @ Maker Faire Tokyo 2015Jumpwire.io @ Maker Faire Tokyo 2015
Jumpwire.io @ Maker Faire Tokyo 2015
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか
IoTで何をやったか
 
SS2019 エッジデバイス開発の難しさ
SS2019 エッジデバイス開発の難しさSS2019 エッジデバイス開発の難しさ
SS2019 エッジデバイス開発の難しさ
 
ラズパイでネット対応 学習リモコンをつくろう!
ラズパイでネット対応 学習リモコンをつくろう!ラズパイでネット対応 学習リモコンをつくろう!
ラズパイでネット対応 学習リモコンをつくろう!
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
IoTのIを考えてみる話
IoTのIを考えてみる話IoTのIを考えてみる話
IoTのIを考えてみる話
 
IoT案件を70件やってみて分かった事
IoT案件を70件やってみて分かった事IoT案件を70件やってみて分かった事
IoT案件を70件やってみて分かった事
 
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテックrosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
 
みなみテック第0回 明日から役立つ(?)IoTと電波と通信
みなみテック第0回 明日から役立つ(?)IoTと電波と通信みなみテック第0回 明日から役立つ(?)IoTと電波と通信
みなみテック第0回 明日から役立つ(?)IoTと電波と通信
 
Manabiya session
Manabiya sessionManabiya session
Manabiya session
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM
 
iot.ymyzk.com の紹介
iot.ymyzk.com の紹介iot.ymyzk.com の紹介
iot.ymyzk.com の紹介
 
1107 node学園祭スポンサーズトーク
1107 node学園祭スポンサーズトーク1107 node学園祭スポンサーズトーク
1107 node学園祭スポンサーズトーク
 
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
 
第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"
第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"
第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"
 
これからはじめるIoTデバイス mbed入門編
これからはじめるIoTデバイス mbed入門編これからはじめるIoTデバイス mbed入門編
これからはじめるIoTデバイス mbed入門編
 
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
 
Homekit 20140730
Homekit 20140730Homekit 20140730
Homekit 20140730
 
3ヶ月間 IoT をやって感じたこと
3ヶ月間 IoT をやって感じたこと3ヶ月間 IoT をやって感じたこと
3ヶ月間 IoT をやって感じたこと
 
IoT Technologies
IoT TechnologiesIoT Technologies
IoT Technologies
 

Plus de Masafumi Okada (6)

Rとkerasを使った臨床試験登録情報のテキスト分類
Rとkerasを使った臨床試験登録情報のテキスト分類Rとkerasを使った臨床試験登録情報のテキスト分類
Rとkerasを使った臨床試験登録情報のテキスト分類
 
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
 
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
 
R新機能抄出
R新機能抄出R新機能抄出
R新機能抄出
 
Rmpiとsnowで 並列処理
Rmpiとsnowで 並列処理Rmpiとsnowで 並列処理
Rmpiとsnowで 並列処理
 
FOSS4G 2009 Tokyo (R and Geo) in Japanese
FOSS4G 2009 Tokyo (R and Geo) in JapaneseFOSS4G 2009 Tokyo (R and Geo) in Japanese
FOSS4G 2009 Tokyo (R and Geo) in Japanese
 

RとIoT