Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RとIoT

 RとIoT

2015年度統計数理研究所共同研究集会「データ解析環境Rの整備と利用」での発表資料です。
関連リポジトリ: https://github.com/mokjpn/R_IoT
デモムービー: https://www.youtube.com/watch?v=DXHfFZz9q1M

Masafumi Okada

December 05, 2015
Tweet

More Decks by Masafumi Okada

Other Decks in Technology

Transcript

  1. Contents • ॳڃ - mongodbʹஷΊͨσʔλΛಡΜͰΈΔ • தڃ - MQTTϓϩτίϧͰPublish͞ΕͨσʔλΛ Subscribeͯ͠औಘͯ͠ΈΔ

    • ্ڃ - R on Raspberry PiͰɺ௚઀γϦΞϧ௨৴Ͱσʔ λΛड͚ͯΈΔ(ະ׬) • ൪֎ฤ - Shiny͔ΒIoTΨδΣοτΛૢ࡞͢Δ
  2. Internet Of Things • IoT: Internet of Things, ϞϊͷΠϯλʔωοτ •

    ϚΠίϯ͕෇͍͍ͯͨ΋ͷʹɺWi-Fi΍Bluetooth, 3G௨৴νο ϓ͕෇͘Α͏ʹͳΓɺωοτͱ৘ใͷૹड৴͕Ͱ͖ΔΑ͏ʹͳͬ ͨ • ༷ʑͳػثʹ౥ࡌ͞Ε͍ͯΔηϯαʔͷσʔλΛ༰қʹूΊΒ ΕΔΑ͏ʹͳΓɺར༻Ͱ͖Δσʔλ͕രൃతʹ૿େͨ͠ • RͷػೳͳΒɺ͜ΕΒηϯαʔ͔ΒͷҰ࣍৘ใΛ௚઀ϦΞϧλ ΠϜʹऩू෼ੳͰ͖Δ͔΋͠Εͳ͍
  3. IoTػث͸ͲͷΑ͏ʹ௨৴Λ͢Δ͔ • ϚΠίϯ͕ඇྗͰిྗ΋અ໿͍ͨ͠ͷͰɺʮ͍ܰʯॲཧͰ͋Δ͜ͱ͕ॏཁ • ϚΠίϯͱηϯαؒͷ௨৴͸ԼهͷΑ͏ͳ΋ͷ͕࢖ΘΕΔ • γϦΞϧ௨৴ UART: Universal Asynchronous

    Receiver Transmitter ػ ೳΛ࣋ͬͨϚΠίϯ • I2C(Inter-Integrated Circuit), SPI(Serial Peripheral Interface) : ICؒͰͷ γϦΞϧ௨৴ن֨ • GPIO(General Purpose I/O): ൚༻ೖग़ྗϐϯɻͦͷ··1Ϗοτͷঢ়ଶ Λද͢ͷʹ࢖ͬͯ΋ྑ͍͠ɺγϦΞϧ௨৴ͷϥΠϯͱͯ͠༻͍ͯ΋ྑ͍
  4. IoTػث͸ͲͷΑ͏ʹΠϯλʔωοτ ʹ৘ใΛૹ৴͢Δ͔ • Ұ୴ϚΠίϯͰσʔλΛड͚͔ͯΒɺ • Bluetooth, BLE(Bluetooth Low Energy) +

    εϚʔτϑΥϯ • Wi-Fi • 3G௨৴ • ͳͲͷ௨৴Ϟδϡʔϧܦ༝ͰσʔλΛΠϯλʔωοτ্ʹૹ ৴͢ΔɻWi-Fi, 3GϞδϡʔϧ͸௚઀IPΞυϨεΛ࣋ͯΔ͕ɺ BLEػث͸εϚʔτϑΥϯͷΞϓϦܦ༝Ͱ௨৴͢Δ
  5. ௨৴ϓϩτίϧ • REST APIͰHTTPͰ௨৴͢Δ΋ͷ΋͋Δ͕ɺHTTP͸ϔομ ͷॲཧͳͲ͕൥ࡶʹͳΓɺϚΠίϯͰ͸ѻ͍ʹ͍͘ • MQTT(MQ Telemetry Transport)͸Publish/Subscribeܕͱݺ ͹ΕΔɺ͋ΔPublisherΫϥΠΞϯτ͕,

    αʔό(MQTT Brokerͱݺ͹ΕΔ)ʹ৘ใΛૹ৴͢Δͱɺಉ࣌ʹ઀ଓ͍ͯ͠ ΔSubscriberΫϥΠΞϯτ͕ͦͷ৘ใΛड͚औΔ͜ͱ͕Ͱ͖ Δɺͱ͍͏ϓϩτίϧͰɺϔομ΋খ͍͞ͷͰIoTػثͰΑ ͔ͭ͘ΘΕ͍ͯΔ
  6. R͔Β௚઀MQTT Brokerʹsubscribe ͯ͠ɺૹΒΕ͖ͯͨσʔλΛಡΉ • RMQTT Έ͍ͨͳύοέʔδ͕͋Δ͔ͳͱࢥ͏ͱɺ·ͩແ͍Α ͏ͩ • ޾͍ɺponte ͱ͍͏

    node.js ʹΑΔMQTT Broker࣮૷͸ɺ MQTTϝοηʔδΛHTTP RESTʹϒϦοδͯ͘͠ΕΔػೳΛ಺ แ͍ͯͨ͠ͷͰɺͦΕΛ࢖͑͹R͸HTTP͚ͩ͠Ό΂Ε͹ྑ͍: curl ύοέʔδ • JSONσʔλ͸ jsonlite ύοέʔδͰϦετ/σʔλϑϨʔϜԽ
  7. RΛಈ͔͢ϚγϯͱηϯαʔΛ௚઀઀ଓ ͠ɺγϦΞϧ௨৴, GPIO౳ͰσʔλΛಡΉ • R tty connection patch ͳΔ΋ͷ͕R 2.12͋ͨΓ޲

    ͚ʹެ։͞Ε͍ͯΔɻͦΕͰγϦΞϧ௨৴͸Մೳͬ Ά͍͕… • Raspberry Pi / BeagleBone / PCduino / Galileo / Edison / DragonBoard ͋ͨΓ޲͚ʹRΛϏϧυ͢Δ ؀ڥΛ੔͑Δ͕࣌ؒͳ͘ະ׬ • ଓ͖͸͍ͣΕϒϩάͰ
  8. ࢖༻ͨ͠IoTػث • Espruino + ESP8266 + BME280 • Թ౓ɾ࣪౓ɾؾѹηϯανοϓͷBME280 •

    γϦΞϧ௨৴Ͱ੍ޚͰ͖ΔWi-FiϞδϡʔϧ ESP8266 • JavaScriptͰϓϩάϥϜ͕ॻ͚ΔϚΠίϯ Espruino • ͜ΕΒΛͭͳ͗ɺBME280͔ΒI2CͰಡΈऔͬͨσʔλΛWi-FiͰ MQTT Brokerʹඈ͹ࣗ͢࡞γεςϜ
  9. 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()) })
  10. ࢀߟจݙ • 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/