Hello, Real-World
Physical Web開発
ハンズーオン
株式会社リクルートテクノロジーズ
アドバンスドテクノロジーラボ
加藤 亮
Web先端技術味見部#28
1. UriBeaconから
データを拾ってみよう
UriBeacon
• 今回はUriBeaconを用意しました
• 配置しておくのでここからURIを拾ってみます
• 興味のある人はConfigで値を変えてみてください
• https://itunes.apple.com/us/app/physical-
web/id927653608?mt=8 (公式アプリ)
UriBeacon
• 自分で用意する場合
• https://github.com/google/uribeacon/tree/
master/beacons (iOSはNG, Androidは5以降
でデバイスが対応してるものなら)
• 購入する場合(技適マーク注意)
• https://www.blesh.com/product/blesh-
pack-3-beacons/
URIBeacon
• BLEのアドバタイズパケットだけを使うという点で
iBeaconとほぼ同じ性能要件
• ただし投げるパケットのデータはiBeaconとは別物
Bluetooth LE
(YAPC::Asia2014使い回し資料)
Bluetooth Classic
• 旧来のよく知られているBluetooth
• LEとの差別化のためにClassicと呼ばれる
• 2000年くらいから流行
• ユビキタスネットワーク -> 最近でいうところのIoT
• 高速化を追求
• 他の無線技術とあまり差別化できなくなってきていた
Bluetooth Low Energy (BTLE)
• LE = Low Energy (省エネ)
• Bluetooth 4.0から
• それまで(Bluetooth Classic)は高速化を追求
• 別物と考えるくらいで
• 4.0=LEではなく、4.0の中にLEの他にHS(HightSpeed)なども
Paring
• 旧来のBluetoothでは基本的にデバイスのペアリング必要。2.1以上ではSecure Simple Paring
• Just Works
• Out of Band (NFCとか)
• Passkey Entry
• Numeric Comparison
• iBeaconなどに見られるようにLEではペアリングの無いユースケースがほとんど
• LEも似たようなモデルがあり、PassKeyEntryも一応存在するし、逆に、上に上げたように、
ClassicにもJust Worksがあり、確認なしで使える仕様も存在はする。
• とはいえ、LE用のSDK/チップではJust Worksしか採用されてなかったりする
Bluetoothのネットワークトポロジ
ピコネット
ClassicではMaster/Slaveという言い方をして、
Central/Peripheralとは言わない
Central
Peripheral
例: PC
例: キーボード
マウス
Peripheral
例: 室温系
Peripheral
例: 体重系
ペリフェラルがサービスの主体になるデータを提供するケース
(ペリフェラルがサーバー、セントラルがクライアント)
が多い
複数のデバイスとやりとりする中心になるのがセントラル
ペリフェラルにデータをWriteするケースもある 
サーモスタットの温度とか(設定系)
Bluetoothのネットワークトポロジ
スキャタネット
Master
Slave
例: PC
例: キーボード
マウス
Slave
例: 室温系
Slave
例: 体重系
Master
例: ヘッドホン
Slave
ヘッドホンなどは主体となるデータ(音声データ)の置き場はPC側になり、データの流れが逆になる
Masterは同時にSlaveとなり、他のピコネットに参加することができる
ネットワークへの参加
• Classic: Service Discovery(今回は省略)
• LE: Advertising
Advertising Packet
• サービスのUUID
• LocalName
• その他
ネットワークへの参加
Observer Broadcaster
(Peripheral)(Central)
ペリフェラルは周期的にアドバタイジングパケットを発信
「こんなサービスを提供していますよ」という情報
Advertising Packet
• サービスのUUID
• LocalName
• その他
ネットワークへの参加
Observer Broadcaster
(Peripheral)(Central)
セントラルは周期的にスキャンを行い、
周囲からアドバタイジングパケットを探す。
Scan Request
ネットワークへの参加
Observer Broadcaster
(Peripheral)(Central)
必要であれば、もう少し詳しい情報を相手に要求できる
Scan Response
ネットワークへの参加
Observer Broadcaster
(Peripheral)(Central)
ペリフェラルは、Scan Requestを受け取った場合はScan Responseを返す。
アドバタイジングパケットに乗り切らない情報をここに載せることが出来る
最初のアドバタイジングパケットが大きすぎると省エネ的にも良くない。
Advertising Packet
• サービスのUUID
• LocalName
• その他
接続要求
ネットワークへの参加
Central Peripheral
セントラルは受け取った情報から
UUIDなどを見て、つなぎたいサービスかどうか判断。
サービスを受けたい場合は接続要求を
ペリフェラルに投げて接続を開始
接続が完了するとBroadcaster/Observerとしての役目は終わり、
Peripheral/Centralとなる
ポーリング
CentralとPeripheralのやりとり
Central Peripheral
接続が完了するとセントラルは定期的に、空パケットで
ポーリングを行い接続を維持する。要はPing。
必要だったらポーリングのレスポンスにデータを載せたり。
CentralとPeripheralのやりとり
Central Peripheral
周波数チャンネル
混線によるノイズを避けるために
周波数ホッピングを行い、
チャンネルを切り替えながら通信する
ClassicでもLEでも周波数ホッピングは
あるが、LEではホッピングの回数が
少なくなるよう工夫されている。
CentralとPeripheralのやりとり
Central Peripheral
前述のような接続維持を行いつつ、
セントラルは、接続先のペリフェラルが提供しているサービスを利用できる
サービス
Profile
Host
Controller
Profiles (Application)
HCI - Host Controller Interface
物理層
あらかじめ用意された
アプリケーション仕様(Profile)
ヘッドセット、キーボードなどの入力、オーディオなど
Bluetoothでの利用されるような機能は
Profile仕様が最初から用意されている
• HSP(HeadSetProfile)
• HIDP(HumanInterfaceDeviceProfile)
• …
Profile
Host
あらかじめ用意されたものでなくて、自由にサービスを設計したいときは?
Classicの場合はSPP(Serial Port Profile)
LEの場合はGATT(General Attribute Profile)
GATT
Central
Peripheral
サービス
Peripheralが提供するサービスとはどんなもの?
室温計の例
現在の室温: 28度
READ
センサーから取得できる変動値
サービスが提供する値を
読み取ることができる
GATT
Central
Peripheral
サービス
Peripheralが提供するサービスとはどんなもの?
サーモスタットの例
設定温度: 28度
WRITE
機械の内部のconfig値
スイッチ: off
コントロールポイント
一つのサービスは
複数の値をもてる
サービスが提供する値に
書き込むことができる
GATT
Peripheral
サービス
設定温度: 28度
機械の内部のconfig値
スイッチ: off
コントロールポイント
characteristic
characteristic
Centralから読み書きさせることが出来る
これらの値のことをcharacteristicと呼ぶ
一つのサービスは複数のcharacteristicを持てる
読み書き以外に、値が変化したときの通知依頼も
GATT
Peripheral
サービス
設定温度: 28度
機械の内部のconfig値
スイッチ: off
コントロールポイント
一つのPeripheralは複数のサービスを持つことが出来る
サービス
現在の室温: 28度
センサーから取得できる変動値
Bluetooth LEのサービス利用手順まとめ
• Peripheralとして振る舞うデバイスがアドバタイズ
• Centralとして振る舞うデバイスがスキャンしてアドバタイジングパケッ
トを発見
• CentralやPeripheralに接続して、目的のサービスを検索
• サービスの中から目的のCharacteristicを発見し、読み書き等
iOS/Androidでのsupport状況
• iOSは5.0からBTLEがSDK(CoreBluetooth)に、まずはセントラルのみ。
6以降でペリフェラルとしても動作可能。なのでほぼ普及済と考えられ
る。
• Androidは4.3からBTLE(セントラル)搭載。Preview Lからペリフェラ
ルとしても動作可能。Preview Lからはle用にパッケージが別になった
ので、4.3のときに使えたセントラル用のAPIも刷新されてる。
iOS/AndroidでのBluetooth Classic
• LEサポート前からClassicのほうは利用できた
• LEのようにGATTがないので、既存のプロファイルにない自由なサービ
スを使おうとするとSPP(serial port profile)を使う必要がある
• iOSではAppleからMFi (Made for iPhone)を取得する必要
iOS/Androidでのsupport状況
iOSではLEが簡単でClassic&SPPがMFiのため面倒
AndroidではSPPは簡単、LEは普及に時間かかりそう
iOSとAndroidで通信したい場合は悩ましい
iBeacon
• CoreLocation
• 屋内位置情報
• Ranging/Monitoring
位置情報サービス
GPS
iBeacon
比較的大きな領域での位置や移動
地図と組み合わせたサービス
屋内での細かい位置情報や短距離移動
などに基づくサービス
iBeacon
Advertising Packet
• サービスのUUID
• LocalName
• その他
Broadcaster
(Peripheral)
Broadcasterとしてのみ
振る舞うBTLEデバイス
パケットの送信距離が10m程度なのを利用して
データ転送よりも近接検知に利用
用語の注意
• iBeaconが近接検知技術と言われるが
• NFCなどのスマートカード界隈では近接(proximity)は10cm以内、
70cm以内だと近傍(vicinity)とか
iBeaconの近接 = BTLEのパケット送信可能距離
ICカードの近接 = カード/リーダで電磁誘導が発生する距離
iBeacon
Advertising Packet
ビーコン
Advertising
Packet
電波が届く距離までビーコンに近寄ったことがわかる
電波強度(RSSI)からアバウトに距離の推測
ノイズの問題もあり正確には分からない。ビーコンの方位もわからない。
iBeacon
ビーコン
Advertising
Packet
ビーコンが飛ばすパケットにはUUIDと二つの16bit整数値(major/minor)がある
UUIDを指定して監視しておいて、対応するアプリでアクションを実行したり、
PassKitでクーポンを表示したり。
UUID
major/minor
iBeacon
ビーコンA
二つの数値を利用して、どのビーコンに近接したかの判断
施設内での移動の検知
ビーコンB
Advertising
Packet
UUID
major: 1
minor: 1
Advertising
Packet
UUID
major: 1
minor: 2
iBeaconでのBTLEまとめ
• Bluetooth LE の Broadcasterである
• Peripheral/Central間で接続確立&データ転送はしない
• Advertising Packetの中に収まるデータしか使えない
• major/minorという16bit整数値二つ入れる
Bluetooth LEの利用の仕方自体はものすごくシンプル
UriBeacon
• iBeaconと同じようにBLEのアドバタイズのみ使う
• パケットデザインを工夫して、URIを詰め込めるように
Hands-on
実装してみる
• https://github.com/google/uribeacon/tree/
master/ios-uribeacon
• ライブラリ使えば超簡単!
UBUriBeaconScanner
UBUriBeacon
Swiftでも
そのまま直訳するだけ
実装
• UBUriBeaconのヘッダを見て他の値を調べてみましょう
• Viewにボタンを置いて、スキャンの開始、停止をできるようにしてみましょう
• 拾ったURLをViewに表示してみましょう
Android
• https://github.com/google/uribeacon/blob/
master/android-uribeacon/uribeacon-sample/
src/main/java/org/uribeacon/sample/
UriBeaconScanActivity.java
• https://github.com/google/physical-web/blob/
master/android/PhysicalWeb/app/src/main/
java/org/physical_web/physicalweb/
UriBeaconDiscoveryService.java
UriBeaconリポジトリのサンプル
Physical Webリポジトリの公式アプリコード
(Serviceなどちゃんと使ってるのでしっかり作るならこっちを参考に)
BLEのAPI自体はOSのものをそのまま使い、パケットのパースなどはライブラリを使う
2. Resolverを使って
Metadataを取得してみよう
一般的には
URLは短縮サービスのもの
• 短縮サービスだった場合に元のURLを取得する必
要がある
URLのような機械のためのものではなく
ユーザーが見てわかりやすいデータに
OGPの例
(PhyWebではOGP以外のデータも利用)
title, thumbnail, descriptionなど
APIを自分で用意するには?
• https://github.com/google/physical-web/tree/
master/web-service
• handlers.pyのResolveScanが主役
公式にpythonで書かれたサンプルがあります
Request例
JSONをPOST
(注: 最新ではRSSI, txPowerも受け取るようになるなど
アップデートがあります)
Response例
(注: 最新ではdisplayUrl, distanceを渡すようになるなど
アップデートがあります)
今回はAPIを用意してあるので
それを叩いてみましょう
http://atl-phyweb.net/resolve-scan
前ページで注釈したように
少し古いバージョンになっています
やってることは
• JSONのencode/decode
• 圧縮URLの展開
• 目的のURLをHTTP GETして取得したHTMLをパー
スしてデータを取得
• キャッシュ
そこまで大したことはしてないので自作も難しくはない
このAPIを叩いて
1. ログに流してみましょう
2. 画面に表示してみましょう
WebAPI叩くだけなので好きなように
今回はAFNetworkingを使ってます
実装例
Swiftでも
直訳するだけ
さらに
• UITableViewでリストとして表示してみましょう
• タップするとopenURLでブラウザ上で開くとか、
あるいはWebViewで開くようにしてみましょう
• 同じURLに対して毎回解決しないようにキャッシュ
機構を用意してみましょう
おわりに
• どんなところにフックを仕掛けると面白いか
• どんなURIと連動すると面白いか
是非考えてみてください

More Related Content

PDF
Eddystoneで始まるPhysical Webの世界
PDF
node.js 版 GotAPI 実装 - node-gotapi
PDF
デバイス WebAPI設計の進め方
PDF
IoTの規格標準化動向とデバイスWebAPI
PPTX
デバイスWeb apiコンソーシアム 第四回資料(RemoteRelay with Thermal camera)
PDF
ビーコンを使うサービス事業
PDF
デバイスコネクト活用事例紹介
PDF
2015/7/2、デバイスWebAPI(GotAPI)コンソーシアム 第一回技術WG 発表資料
Eddystoneで始まるPhysical Webの世界
node.js 版 GotAPI 実装 - node-gotapi
デバイス WebAPI設計の進め方
IoTの規格標準化動向とデバイスWebAPI
デバイスWeb apiコンソーシアム 第四回資料(RemoteRelay with Thermal camera)
ビーコンを使うサービス事業
デバイスコネクト活用事例紹介
2015/7/2、デバイスWebAPI(GotAPI)コンソーシアム 第一回技術WG 発表資料

What's hot (20)

PDF
GotAPIの概要と技術解説
PDF
指紋認証と「FIDO」について
PDF
DeviceConnect向けCordovaプラグインを作ってみた
PDF
デバイスコネクトWebAPIの開発状況について
PDF
ビーコンを使うo2oクラウドサービス
PDF
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
PDF
デバイスWebAPI/Symphonyを軸としたIoTの展開について
PDF
音声によるデバイスWebAPIの操作
PDF
WebRTCプラグインで広がるWi-Fiカメラのアプリケーション
PDF
デバイス WebAPIによるスマートフォン周辺デバイスの活用
PDF
クラウド連携版デバイスWebAPI
PDF
デバイスWebAPIを用いた各種ソリューション適用事例の紹介
PDF
IoTに最適なセキュアなVPN通信のご紹介
PDF
OMA GotAPI 標準化作業状況アップデート
PDF
201606 DeviceWebAPI 第4回技術WG会合
PDF
デバイスWebAPI実装のアップデートと利用事例について
PDF
LinkingとデバイスWebAPI
PDF
最近の活動について(娯楽編)
PDF
最近の活動について
(not ruby)
PDF
インターネットの仕組みとISPの構造
GotAPIの概要と技術解説
指紋認証と「FIDO」について
DeviceConnect向けCordovaプラグインを作ってみた
デバイスコネクトWebAPIの開発状況について
ビーコンを使うo2oクラウドサービス
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
デバイスWebAPI/Symphonyを軸としたIoTの展開について
音声によるデバイスWebAPIの操作
WebRTCプラグインで広がるWi-Fiカメラのアプリケーション
デバイス WebAPIによるスマートフォン周辺デバイスの活用
クラウド連携版デバイスWebAPI
デバイスWebAPIを用いた各種ソリューション適用事例の紹介
IoTに最適なセキュアなVPN通信のご紹介
OMA GotAPI 標準化作業状況アップデート
201606 DeviceWebAPI 第4回技術WG会合
デバイスWebAPI実装のアップデートと利用事例について
LinkingとデバイスWebAPI
最近の活動について(娯楽編)
最近の活動について
(not ruby)
インターネットの仕組みとISPの構造
Ad

Viewers also liked (7)

PDF
カヤックを退職すべきではない3つの理由
PPT
HTML5でサイネージは作れる!!
PDF
Introduction to bluetooth low energy - JFokus IoT 2015
PDF
20140922 ble bootcamp
PDF
やはりお前らのiOS7対応は間違っている
PDF
Eddystoneで始まるPhysical Webの世界
PDF
H2O x mrubyで人はどれだけ幸せになれるのか
カヤックを退職すべきではない3つの理由
HTML5でサイネージは作れる!!
Introduction to bluetooth low energy - JFokus IoT 2015
20140922 ble bootcamp
やはりお前らのiOS7対応は間違っている
Eddystoneで始まるPhysical Webの世界
H2O x mrubyで人はどれだけ幸せになれるのか
Ad

Similar to Web先端技術味見部#28 Physical Webハンズーオン開発補助資料 (13)

PDF
Bluetoothl-Low-Energy入門講座-part1
PDF
Bluetooth LE +スマートフォン勉強会@関西(2013年11月2日)
PDF
iOSアプリ開発者のための Bluetooth Low Energy体験講座
PDF
Bluetooth Low Energy入門講座 -part2
PDF
ifLink[改善版].pdf
ODP
Bluetooth le for FreeBSD
PDF
Mac から Python で BLE ペリフェラルを操作する
PDF
Bluetooth LEとiBeaconを使った、すれ違い通信
PDF
Bluetooth LEとiBeaconを使った、すれ違い通信
PDF
Nordic-Semi (Japan) ~ Next Step for IoT & Bluetooth Smart @ Wireless Japan 20...
PDF
20131026 i beaconワークショップ
PDF
Beenos creators'night#201307今井
PPTX
iBeacon を利用したサービス開発のポイント
Bluetoothl-Low-Energy入門講座-part1
Bluetooth LE +スマートフォン勉強会@関西(2013年11月2日)
iOSアプリ開発者のための Bluetooth Low Energy体験講座
Bluetooth Low Energy入門講座 -part2
ifLink[改善版].pdf
Bluetooth le for FreeBSD
Mac から Python で BLE ペリフェラルを操作する
Bluetooth LEとiBeaconを使った、すれ違い通信
Bluetooth LEとiBeaconを使った、すれ違い通信
Nordic-Semi (Japan) ~ Next Step for IoT & Bluetooth Smart @ Wireless Japan 20...
20131026 i beaconワークショップ
Beenos creators'night#201307今井
iBeacon を利用したサービス開発のポイント

More from Recruit Technologies (20)

PDF
新卒2年目が鍛えられたコードレビュー道場
PDF
カーセンサーで深層学習を使ってUX改善を行った事例とそこからの学び
PDF
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
PDF
Tableau活用4年の軌跡
PDF
HadoopをBQにマイグレしようとしてる話
PDF
LT(自由)
PDF
リクルートグループの現場事例から見る AI/ディープラーニング ビジネス活用の勘所
PDF
Company Recommendation for New Graduates via Implicit Feedback Multiple Matri...
PDF
リクルート式AIの活用法
PDF
銀行ロビーアシスタント
PDF
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
PDF
ユーザー企業内製CSIRTにおける対応のポイント
PDF
ユーザーからみたre:Inventのこれまでと今後
PDF
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
PDF
EMRでスポットインスタンスの自動入札ツールを作成する
PDF
RANCHERを使ったDev(Ops)
PDF
リクルートにおけるセキュリティ施策方針とCSIRT組織運営のポイント
PDF
ユーザー企業内製CSIRTにおける対応のポイント
PDF
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
PDF
「リクルートデータセット」 ~公開までの道のりとこれから~
新卒2年目が鍛えられたコードレビュー道場
カーセンサーで深層学習を使ってUX改善を行った事例とそこからの学び
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Tableau活用4年の軌跡
HadoopをBQにマイグレしようとしてる話
LT(自由)
リクルートグループの現場事例から見る AI/ディープラーニング ビジネス活用の勘所
Company Recommendation for New Graduates via Implicit Feedback Multiple Matri...
リクルート式AIの活用法
銀行ロビーアシスタント
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
ユーザー企業内製CSIRTにおける対応のポイント
ユーザーからみたre:Inventのこれまでと今後
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
EMRでスポットインスタンスの自動入札ツールを作成する
RANCHERを使ったDev(Ops)
リクルートにおけるセキュリティ施策方針とCSIRT組織運営のポイント
ユーザー企業内製CSIRTにおける対応のポイント
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
「リクルートデータセット」 ~公開までの道のりとこれから~

Web先端技術味見部#28 Physical Webハンズーオン開発補助資料