Firefox OS for Embedded System

31
関東 Firefox OS 勉強会 9th 組み込み向けの Firefox OS Web API

Transcript of Firefox OS for Embedded System

関東 Firefox OS 勉強会 9th

組み込み向けの Firefox OS と Web API

2/31

自己紹介

Twitter: @masap 職業: 組み込みプログラマ(主に Wi-Fi)

3/31

目次

WoTとは WoT における Firefox OS のポジション Fireox OS に Web API を追加する Web API の標準化

4/31

WoT とは

5/31

おさらい

今日のタイトルは「攻めるぞ WoT!」 まず、そもそも WoT って何?を、おさらい。

6/31

IoT (Internet of Things)

様々なモノをインターネットに接続 クラウド上のコンピュータで

情報を集計 デバイスの制御

クラウド

モノ

新宿区で交通事故発生信号、ディジタル標識

の制御

7/31

WoT (Web of Things)

Web = HTTP ? IoT = IP、Web = HTTP → 大差ない

アプリ

HTTP

IP

モノ

アプリ

モノ

IP

IoT WoT

8/31

WoT (Web of Things)

Web = ブラウザ? 全て JavaScript で書けるようになる

ブラウザ

HTTP

IP

モノ

WoT

アプリアプリ

IP

モノ

IoT

CC/Java

JavaScript

9/31

プラットフォームとしてのブラウザ

Web = ブラウザの方がしっくりくる モノへのアクセスやネットワーク接続もブラウザ経由で

行う モノの制御もHTTPもJavaScriptでできる IoTの場合はモノの制御はC言語等で行う必要がある

⇒ブラウザ自体がプラットフォームになる これが WoT ではないか

10/31

WoT における Firefox OS のポジション

11/31

全てのモノにブラウザが必要?

Smart Endpoint vs Dumb Endpoint IoTにおいて議論になる問題

クラウドにつながる「モノ」は優秀であるべきか?

Smart と Dumb の両極で考えるのではなく中間層を設 けてはどうか ⇒ フォグコンピューティング

Smart Endpoint Dumb Endpoint

単純な動作しかできない - 取得したデータを上に伝える - 指示された動作を行う

複雑な動作ができる - データの集計/分析結果を上に伝える - 自律動作ができる

12/31

フォグコンピューティングとは

クラウド層とモノ層の間にフォグ層を置く

クラウド

モノ

クラウド

モノ

フォグ

データ受信サーバ、データベース、統計分析サーバ等

温度、加速度、放射線等各種センサークラウド

コンピューティングフォグ

コンピューティング

データの集計、フォーマット変換等

13/31

フォグ層の例

クラウド

モノ

フォグ

AI により最適な都市計画を提案

フォグ

モノ

新宿区で交通事故発生信号、ディジタル標識

の制御

近隣地区への通知事故統計情報

14/31

フォグコンピューティング製品

Cisco フォグコンピューティングはそもそも Cisco が提唱 Cisco IOx というフォグ開発プラットフォームがある 高価なため世界的な大企業以外は導入が困難

15/31

Firefox OS でフォグ

Firefox OS Firefox OS でフォグという手もあるのでは?

Chrome、Safari、IE と比較してハードウェアにアクセスするWeb API が最も充実しているため

16/31

フォグのために必要なもの

Firefox OS からのハードウェア制御が必要 Firefox OS は全てが Web

Android の NDK のような仕組みは無い ネイティブ言語は使用できない

JavaScript でハードウェアを制御しなければならない

17/31

Web からモノを制御する方法 その1

ネットワーク経由で制御 HTTP, nodejs, WebSocket, WebRTC こちらは既にできている

センサーFirefox OS

ネットワーク

18/31

Web からモノを制御する方法 その2

ローカルで制御 ネットワークを介さず制御 この方法はまだできない ⇒ 無いなら作る

⇒Web API 新設

センサー

直接接続Firefox OS

19/31

Fireox OS に Web API を追加する

20/31

Web API とは

二種類のWeb API Web 上のサービスとして提供

Twitter API、Youtube API、... ブラウザ上のJavaScript API (今日扱うのはこちら)

navigator.getUserMedia, navigator.geolocation, ...

21/31

ハードウェアを制御するWeb API

何を作るのか navigator.getusermedia のように

navigator.hardwareaccessxxx のような API を作る

どうやって新しい Web API を作るのか Firefox を修正する

22/31

Firefox を修正する

Firefox では Gecko が Web API を実装している なので Gecko にコードを追加することで新しい Web API を作

ることができる gecko/dom/geolocation 等

Gecko

Web アプリ

Web API

23/31

必要な Web API は

IoTでよく使うハードウェア 入力側: センサー 出力側: モーター どちらもインターフェイスは GPIO や I2C が多い GPIO 及び I2C を扱う Web API を作れば良い

24/31

GPIO とは

GPIOとは General Purpose Input/Output(汎用入出力)の略。 コンピュータと周辺機器を接続するためのピン。 ピン番号を指定して、 on/off を設定したり、 on/off を読み取ったりできる。

LED やモーターの on/off を制御できる。

25/31

I2C とは

I2Cバスとは シリアル通信のためのバス GPIO では on/off しか制御できないのに対し、値を読

み書きする等、細かく制御できる センサーやモーター等、このバスで接続するモノは多い

26/31

Web GPIO API

Web GPIO API (抜粋) navigator.requestGPIOAccess()

GPIO アクセスオブジェクトを取得する

gpio.ports.get(GPIOピン番号) GPIO ポートオブジェクトを取得する

port.write(value) ポートへの書き込み

port.read() ポートからの値の読み出し

27/31

Web I2C API

Web I2C API (検討中) navigator.requestI2CAccess(デバイス名,アドレス)

I2c デバイスの取得

i2c_device.write/read(レジスタアドレス, 値); レジスタへの書き込み、レジスタの読み取り

例 DRV8830 を用いたモーター制御

var i2c_device =

navigator.requestI2CAccess("/dev/i2c-1", 0x64);

i2c_device.write(0x00, 0xfd);

28/31

Web API の標準化

29/31

標準化

WoT=Gecko だけとは限らない V8 や Trident でも WoT

標準化が必要 Web GPIO は W3C Browsers and Robotics

Community Groupにて標準化検討中

http://www.w3.org/community/browserobo/

30/31

議論の例

Promise vs 戻り値 Promise

長所: 非同期処理ができる 短所: ネストが深くなる

戻り値 長所: ネスト無く書ける 短所: 非同期処理ができない

31/31

以上