Your SlideShare is downloading. ×
0
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

iOS7でのBluetooth LE活用 @ MOSA Software Meeting 2013

22,810

Published on

2013年11月29日MOSAでのセミナー資料。

2013年11月29日MOSAでのセミナー資料。

Published in: Technology
0 Comments
33 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
22,810
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
132
Comments
0
Likes
33
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. iOS7におけるBluetooth LEの活用法 ! MOSA Software Meeting 2013 11月29日 ! (合)わふう 上原 昭宏
  • 2. 目次 • Bluetooth Low Energyとは • iOS7でのBluetooth LE利用 • • iBeacon サービスとハードウェアとアプリケーション開発 • ハードウェア、ガジェット • iOSアプリケーション
  • 3. Bluetooth Low Energy • 超低消費電力無線通信 • コイン型電池1つで年単位の無線通信 • 電池交換不要、使い捨て、低コスト • ウェアブル、スマートフォン向き • Bluetooth 3.0とは物理層から異なる技術 • 通信距離 最大 ∼ 50m • 低頻度(1秒に1 10回)、少量のデータ(20バイト)
  • 4. Bluetoothの歴史 2007年 2009年 2010年 Ver2.1 Ver3.0 Ver4.0 Enhanced Data Rate High Speed 3.0とLow Energy の統合 2004年 2006年 Bluetooth
 Low End Extension Wibree
  • 5. 接続の後方互換性 Bluetooth Smart は3.0までの機器とはつながらない Bluetooth 4.0 Ver 3.0 までの技術 デュアルモード・デバイス (iPhoneやPC) Low Energy シングルモード・デバイス (周辺機器)
  • 6. よくある質問 • 略称は? • • 超低消費電力で音声を送りたい • • Bluetooth Low Energy、BLE、Bluetooth Smart Bluetooth3.0を使ってください すれ違い、ファイル交換に使いたい • iOSアプリ間の通信速度は3 10kビット/秒程度 https://itunes.apple.com/sr/app/bluespeed/id579118786?mt=8
  • 7. iOSとBluetooth LE
  • 8. iOSとBLE 2011年 • • 2013年 iPhone4s iOS5 • 2012年 iPhone5 iOS6 iPhone5s iOS7 世界初のBT4 MFiなしに
 一般開発者に解放 ハードとつながる
 アプリが作れる • 周辺機器相当
 • 端末の買い替え周期 (ペリフェラル)
 になれる • 周辺機器サポート • 独自のサービス展開
  • 9. iOS7のBluetooth LE利用 • iOS7から、iOSがBluetooth LEを利用する • 周辺機器のサポート • キーボード: HID Over GATT Profile (HOGP) • ゲームコントローラ:独自、MFiで提供 • iBeacon • Apple Notification Center Service
  • 10. iBeacon
  • 11. iBeaconってなに? • Bluetooth LEを利用した、領域と近接検出 • イメージ的に独自のGPS発信機を設置できる感じ • 128­bitの識別子、16ビットのmajor/minor番号 • 1企業1UUID、店舗、店舗内位置 • ビーコン電波検出、による位置イベントのトリガー • Paypal Beaconは別物の決済用途でしょうが…
  • 12. iOSアプリとiBeacon • CoreLocationフレームワークに統合 • ビーコンを受信するiOSアプリケーション • • • フォアグラウンド: 領域検出とレンジング バックグラウンド: 領域検出 iOSアプリからの、ビーコンの送信 • • フォアグラウンドでのみ 範囲は∼30m程度、送信電力を絞れば∼1mなども
  • 13. PassbookとiBeacon • ロック画面の表示タイミング • • ビーコンに一致したパスがあれば • • ビーコン信号をチェック ロック画面に表示 会員カード、支払いタイミング…
  • 14. Ad ペリフェラル 受信 セントラル • Ad 接続 処理 デバイス発見の仕組み利用 • • Ad • Ad Ad Ad BLE規格に準拠 Androidでの実装もできる 距離推定は受信電波の強さで • • すごく近い、近い、遠い 放射パターンをいじれば • お店の入り口、ショーウイン ドウごとのアクション
  • 15. パケットをスニッフィング http://www.ti.com/tool/cc2540emk-usb http://www.tij.co.jp/tool/jp/packet-sniffer
  • 16. フラグ • 02 01 1A • AD Type 0x01, flag, • General Discoverable Mode, • Simultaneous LE and BR/EDR to Same Device Capable (Controller) • Simultaneous LE and BR/EDR to Same Device Capable (Host)
  • 17. 製造者固有のデータ ! • • 1A FF • UUID, major, minor, RSSIはビッグエンディアン • RSSIはデフォルト値-59dBm (1m離れたところでのRSSI) 4C 00 02 15 AD Type|会社ID | 不明 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EC 4A 17 A5 C5 UUID |major|minior|RSSI
  • 18. iBeacon+iOSアプリ
  • 19. iBeaconの資料 • サンプルソースコード • https://github.com/reinforce-lab/ CoreBluetooth_samples • スライド • http://www.slideshare.net/reinforcelab/ • 解説(ブログ記事) • http://reinforce-lab.github.io/blog/2013/10/21/ibeacon/
  • 20. iOSアプリケーション • CoreLocationフレームワークに統合 • • 動作は実機のみ、シミュレータは使えない アプリができること • 受信、領域監視と距離推定 • 発信、ビーコン
  • 21. リージョン監視のフロー 1. ハードウェアのサポートを調べる 2. 領域監視対象の指定と通知を受け取るタイミング指定 3. 監視の開始/停止と通知の取得 変更
  • 22. リージョン監視のフロー 1. ハードウェアのサポートを調べる [CLLocationManager isMonitoringAvailableForClass: [CLBeaconRegion class]] iOS7対応機種のうち、 iPhone4だけは、Bluetooth LE非対応なので、 ハードウェアサポートされない 変更
  • 23. リージョン監視のフロー 2. 領域監視対象の指定と通知を受け取るタイミング指定 CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:kBeaconUUID] identifier:@ identifier ]; ! CLBeaconRegionクラス BOOL notifyOnEntry : 領域 in, デフォルト YES BOOL notifyOnExit : 領域 exit, デフォルト YES BOOL notifyEntryStateOnDisplay : 画面表示時, デフォルト NO 変更
  • 24. リージョン監視のフロー 3. 監視の開始/停止と通知の取得 locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; ! [locationManager startMonitoringForRegion:region]; [locationManager stopMonitoringForRegion:region]; ! CLBeaconRegionクラス BOOL notifyOnEntry : 領域 in, デフォルト YES BOOL notifyOnExit : 領域 exit, デフォルト YES BOOL notifyEntryStateOnDisplay : 画面表示時, デフォルト NO 変更 CLLocationManagerDelegateプロトコル -(void)locationManager:didEnterRegion: -(void)locationManager:didExitRegion: -(void)locationManager:didDetermineState:forRegion:
  • 25. リージョン監視(1/2) • 監視対象の設定 • • • UUIDを指定、major/minorは任意 1アプリあたり最大20個 (iOS 7.0.2) 領域のin/exit通知のタイミング • notifyOnEntryがYES、ビーコン検出、ただちにin通知 • notifyOnExitがYES、ビーコン領域からでると、exit通知 • • 20秒以上、200m以上のエリア移動 (実際35∼50秒位) 通知は、領域を またいだ時 に発生する • 監視開始時にビーコン範囲内 → in通知がこない • CLLocation Manager, - (void)requestStateForRegion:
  • 26. リージョン監視(2/2) • notifyEntryStateOnDisplayがYES • 領域のチェック・タイミング • メソッドを呼び出した時、画面が表示された時に領域確認 • • デリゲート呼び出しが複数回くる → アプリでチェック バックグラウンド動作 • iOSが、terminated から backgroundに遷移遷移 • ユーザがタスクスイッチャーから削除しない限り
  • 27. バックグラウンド • バックグラウンド・モード • • • 領域に入る/出ると通知 (10秒の処理時間) レンジングはできない 電力消費量 • • • 領域in/exit iPhone4s 1日で50%, iPhone5は電池を消費しない (7.0.2) notifyEntryStateOnDisplayでは、iPhone4sでも電池は減らない 領域監視の起動/停止 • 地理的な領域監視 (最も荒いモードで) • Passbookとのアプリ連携、アプリがフォアグラウンド
  • 28. レンジング • 監視対象 • UUIDを指定、major/minorも指定可能 • 1秒ごとに、検出したビーコンの情報を通知 • 同じビーコンでも、1秒後のインスタンスは別物 • 距離は電波強度で推定 • とても近い、近い、遠いの3種類
  • 29. レンジングのコード DetectorViewController.m
  • 30. start/stopの呼び出し順番 • リージョン監視をONのちレンジングをON (7.0.4) • リージョン監視の開始 → (リージョンに入る) → レン ジングの開始 → リージョン監視の停止 → レンジング の停止 • レンジングの通知が止まらない • リージョン監視の開始 → (リージョンに入る) → レ ンジングの開始 → レンジングの停止 → リージョン 監視の停止
  • 31. ビーコンの送信 • CoreBluetoothフレームワークを使う • パケットのデータは、CLBeaconRegionで生成 • ビーコンの送信は、アプリケーションがフォアグラ ウンドにあるときのみ • OS Xでも、ビーコンの送信ができる
  • 32. PassbookとiBeacon • Passbook Package Format Reference • https://developer.apple.com/library/ios/documentation/UserExperience/ Reference/PassKit_Bundle/Chapters/Introduction.html • iOS7から • 指定項目 • UUID/major/minor • ロック画面表示名 • いくつでも指定可能
  • 33. iBeaconのよくある質問 • AndroidでのiBeaconの検出? • • 決済はどうするのか? • • アプリケーションで各自実装 チート対策は? • • 独自に実装可能(API Level: 18. Android 4.3) 簡単にコピー可能 AppleはiBeaconをクローズしないか? • 公式に仕様を公開してはいない
  • 34. iBeaconの代替手段 • 独自に、iBeacon相当の機能は、実装可能 • • CoreBluetoothフレームワーク Appleにしかできないこと • バックグラウンド動作 • Passbookの連携
  • 35. iBeaconの取り組み • 役割と立場 • • • サービスの企画、運営が権限をもつのがいい アプリケーション、ウェブ開発、ビーコン設置 実施期間 • • まず短期間でテスト、のち常設 本音と建前 • • 要は、ストーキング。プレミアムな顧客来店検出、動線検出 • • クーポン発行、お客様に合わせた…、ネットからリアルに… 個人情報と統計データの扱い、JRの二の舞い… iOS7.1β… 変更
  • 36. ハードウェア http://estimote.com https://www.sticknfind.com
  • 37. Apple Notification Center Service ! ANCS
  • 38. ANCSとは • iOSの通知をBLEデバイスに伝える汎用の仕組み • イベント通知と、詳細情報の読み出しを提供 • 電話やメール着信、位置変化、ファイナンス… • 意味付けは拡張/変更どんどんありそう • あきらかにiWatch自社向け開発…
  • 39. ANCSの情報 • Apple公式 https://developer.apple.com/library/ios/documentation/ CoreBluetooth/Reference/ AppleNotificationCenterServiceSpecification/ • ブログ http://reinforce-lab.github.io/blog/2013/10/28/ancs/ • サンプルコード https://github.com/reinforce-lab/ CoreBluetooth_samples/tree/master/ANCS/
  • 40. ANCSの試作 • 通知を受け取るiOS7アプリケーションは作れない • • ANCS関連の通信はiOSが握る 周辺機器の試作 • いきなりカスタムハードは辛い、iOSで試作 • iOS7はiOSが管轄、アプリはさわれない • iOS6なら触れる、これで試作するのがいい
  • 41. アプセサリ (Appcessory) Application + Accessory
  • 42. http://www.fitbit.com/jp
  • 43. Appcessoryの粗利益 • 販売管理等 粗利益 工場出荷価格 この数値は、根拠のない例です • 販売価格 10,000円 • 50% 30% • 仮に、粗利益20%として • 20% 年2000円のウェブサービス 買い替え動機 • 破損、水没 • 新モデル
  • 44. ハードウェア プロトタイピング
  • 45. http://getpebble.com http://www.lumoback.com http://www.kickstarter.com http://www.wahoofitness.com
  • 46. http://www.haxlr8r.com pronounced Hackccelerator
  • 47. プロトタイピング • iPhoneを利用する • • プロトタイピングに使えるもの • • 加速度、ジャイロ… SensorTag, Konashi, RFduino 一般に見せるときに注意すること • 電波法の技術基準適合証明 • Bluetoothの認証は、試作中は不要
  • 48. http://goo.gl/d3HUL
  • 49. TI Sensor tag http://www.ti.com/tool/ cc2541dk-sensor IR temperature Sensor Humidity Sensor Pressure Sensor Accelerometer Gyroscope Magnetometer
  • 50. Konashi http://konashi.ux-xu.com
  • 51. RFduino http://www.rfduino.com
  • 52. モジュール • RF回路部分を小さな基板にまとめたもの • 各種の認証を取得済 • 電波法 (各国ごとに1万ドルくらい) • Bluetooth 製品登録 (1万ドルくらい) • • • 500円玉に乗るサイズ 内部のマイコンでユーザ・アプリが動く 開発用キット • ∼500ドル http://www.bluegiga.com/ BLE112_Bluetooth_Smart_module
  • 53. オリジナル機器の開発 • 発注者がだれか? • • 企画に権限がよい (iBeaconのように) 担当分野をどこで切るか • • • ハードウェア+ドライバ 挙動 = ハード 通信 iOS(BTserver) トラブルに備える (納品後にiOSの振舞いが変化) • デモアプリ(動作確認、検証)が大事
  • 54. CoreBlutooth フレームワーク • 通信手順を抽象化 • 発見 • 接続 / 切断 • 読み書き, 通知 • バックグラウンド動作 • 実機でのみ動作, シミュレータは使えない
  • 55. ネットワーク・トポロジ • スター型 • • 接続数の上限がない • • 1つのセントラルと多数のペリフェ ラル iPhoneの同時接続は10 パケットの中継機能はない セントラル (Central) ペリフェラル (Peripheral) ✗
  • 56. ペリフェラルの発見 • • Ad Ad 20ミリ秒 1.3秒周期 • Ad パケットを送信 • Ad アドバタイズメント デバイス名などの情報
  • 57. 適応周波数ホッピング
  • 58. 適応周波数ホッピング
  • 59. 適応周波数ホッピング
  • 60. Bluetooth LEの振る舞い • iOSアプリケーションが接続と切断をにぎる • ユーザはゼロ設定、アプリで設定 (WiFiの場合…) • すぐ見つかる(∼20ミリ秒)、すぐつながる(数秒) • ペアリングは、ペリフェラルの設計次第 • • Bluetoothの機器一覧表示 • • 無入力、ユーザのコード入力 共有 を保存した機器のみ表示 目の前のクリスマスツリーが、自分のスマフォで… • すれ違いてきな振る舞いで、展示物が…
  • 61. iOS アプリケーション Centralについて ソースコード: https://github.com/reinforce-lab/CoreBluetooth_samples/tree/master/ BSHSBTPT01_samples
  • 62. 実装の手順 • @import CoreBluetooth • CBCentralManagerDelegate • CBPeripheralDelegate CBCentralManager セントラル (Central) ペリフェラル (Peripheral) CBPeripheral 変更
  • 63. CBCentralManagerのインスタンス • CBCentralManager initWithDelegate:queue:options: • オプション • CBCentralManagerOptionShowPowerAlertKey; • • • Bluetooth OFFのときダイアログ表示? デフォルトNO CBCentralManagerOptionRestoreIdentifierKey; • インスタンスの識別文字列
  • 64. Bluetoothの状態変化 • centralManagerDidUpdateState: • CBCentralManagerStatePoweredOff • CBCentralManagerStatePoweredOn • CBCentralManagerStateUnauthorized • CBCentralManagerStateUnsupported 変更
  • 65. デバイスの発見 • CBCentralManager, scanForPeripheralsWithServices:options: • サービス • • ペリフェラルのサービスを指定 オプション • CBCentralManagerScanOptionAllowDuplicatesKey • ペリフェラルの発見を重複して通知するか • デフォルト、NO 変更
  • 66. // デバイスの発見時処理を行います。 // スキャンで指定したサービスがあるデバイスのみが通知されますが、同じような機能を持った対象外の装置を発見す るかもしれません。 // アドバタイズメント・パケットに含まれる情報は、advertisementDataから得られます。デバイス名などで判別 します。 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)p advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { // 同一機種が周囲に複数あるとき、自分がもっているものだけに接続するには、UUIDが同じかを判定します。 パケット・データ 受信信号強度 // !!注意!! iOS6では、一度も接続したことがない装置のUUIDはnilになります。一度でも接続すればUUIDが 取れます。ここでは、一度は接続したことがある前提でUUIDを比較しています。 /* CBUUID *targetUUID = [CBUUID UUIDWithString:@"00000000-0000-0000-2F0C-F0289947EA35"]; if(peripheral.UUID == nil || ! [[CBUUID UUIDWithCFUUID:peripheral.UUID].data isEqualToData:targetUUID.data]) return; */ NSString *localName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey]; if(localName != nil && [localName isEqualToString:kTargetDeviceName] ) { PeripheralContainer *c = [[PeripheralContainer alloc] init]; c.peripheral = p; c.RSSI = RSSI; [self findPeripheral:c]; } } KeyFobController.m 318行
  • 67. アドバタイズメントで取れる情報 (1/1) • 名前、送信電力 • CBAdvertisementDataLocalNameKey • CBAdvertisementDataTxPowerLevelKey • これらの情報はiPhoneにキャッシュされない • 送信電力とRSSIから距離概算 • iBeaconの情報はフィルタリングされて取れない
  • 68. アドバタイズメントで取れる情報 (2/2) • CBPeripheral インスタンス • • 一度でも接続したことがあれば nil • • identifier : 128-bitの識別番号 (NSUUIDクラス) 同じ機器でもiPhoneごとに異なる RSSI : 受信信号強度 • • 接続してreadRSSI:を呼び出せば nil 切断しても同じidentifierを指定して再接続
  • 69. 接続と切断
  • 70. -(void)connect:(PeripheralContainer *)c { //ターゲットを発見、接続します //この時点でperipheralはcentral managerに保持されていません。 必ずretain //少なくとも接続が完了するまでの間、peripheralをアプリ側で保持します。 //接続処理はタイムアウトしません。接続に失敗すれば centralManager:didFailToConnectPeripheral:error //接続処理を中止するには、peripheralを開放するか、明示的に cancelPeripheralConnection を呼び出します ! self.peripheral = c.peripheral; [_centralManager connectPeripheral:self.peripheral options:nil]; } -(void)disconnect { // 切断処理をします。_peripheralをnilにするなどの、切断完了後処理は、 // centralManager:didDisconnectPeripheral:error: // で行います。 [_centralManager cancelPeripheralConnection:self.peripheral]; } - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)p; - (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral: (CBPeripheral *)peripheral error:(NSError *)error; KeyFobController.m 256行 delegateで通知
  • 71. ! サービスとキャラクタリスティクス
  • 72. プロトコルスタック Applications Applications Applications Core Bluetooth BTserver GATT ATT L2CAP PHY GATT: Generic Attribute Profile • Link Layer • ATT: Attribute Protocol • L2CAP: Logical Link Control and Adaptation Protocol
  • 73. プロトコルスタック サービス = クラス Applications Applications Applications Core Bluetooth キャラクタリスティクス = プロパティ • BTserver キャラクタリスティクス • 制御/動作指定 • センサー値/外界の状態 • (装置の)動作状態/内部状態 GATT ATT L2CAP PHY GATT: Generic Attribute Profile • Link Layer • ATT: Attribute Protocol • L2CAP: Logical Link Control and Adaptation Protocol
  • 74. サービスとプロファイル(振る舞い) ユースケース ハード仕様 デバイス発見 Find ME Profile Proximity Profile 切断時の警告 Immediate Alert Service 振動やブザー を出力 Tx Power Service 送信電力 の値 Link Loss Alert Service 切断時の 振る舞い指定 http://developer.bluetooth.org/gatt/profiles/Pages/ProfileViewer.aspx?u=org.bluetooth.profile.find_me.xml
  • 75. サービスとキャラクタリスティクスを 見てみる
  • 76. http://goo.gl/oYjrc
  • 77. • UUIDで識別 • 16-bit / 128-bit • 読み(read)/書き(write)/通知(notify)
  • 78. ! サービスとキャラクタリスティクス の取得
  • 79. #define kImmediateAlertServiceUUID @"1802" #define kLinkLossServiceUUID @"1803" #define kAlertLevelUUID @"2A06" ... _linkLossServiceUUID = [CBUUID UUIDWithString:kLinkLossServiceUUID]; _immediateAlertServiceUUID = [CBUUID UUIDWithString:kImmediateAlertServiceUUID]; _alertLevelUUID = [CBUUID UUIDWithString:kAlertLevelUUID]; KeyFobController.m 104行 // 接続 - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)p { // サービスを探します self.peripheral.delegate = self; [p discoverServices:[NSArray arrayWithObjects: _linkLossServiceUUID, _immediateAlertServiceUUID, _txPowerServiceUUID, _batteryLevelServiceUUID, nil]]; } KeyFobController.m 343行
  • 80. //発見したサービスに対して、Characteristicsを探します - (void)peripheral:(CBPeripheral *)p didDiscoverServices:(NSError *)error { for (CBService *service in p.services) { if ([service.UUID.data isEqualToData:_linkLossServiceUUID.data]) { [p discoverCharacteristics:[NSArray arrayWithObjects: _alertLevelUUID, nil] forService:service]; } else if ([service.UUID.data isEqualToData:_immediateAlertServiceUUID.data]) { [p discoverCharacteristics:[NSArray arrayWithObjects: _alertLevelUUID, nil] forService:service]; KeyFobController.m 367行 - (void)peripheral:(CBPeripheral *)p didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error { if ([service.UUID.data isEqualToData:_batteryLevelServiceUUID.data]) { _batteryLevelCharacteristics = [self findCharacteristics:service.characteristics uuid:_batteryLevelUUID]; _batteryLevelSwitchCharacteristics = [self findCharacteristics:service.characteristics uuid:_batteryLevelSwitchUUID]; [p setNotifyValue:YES forCharacteristic:_batteryLevelSwitchCharacteristics]; [p readValueForCharacteristic:_batteryLevelCharacteristics]; [p readValueForCharacteristic:_batteryLevelSwitchCharacteristics]; } } KeyFobController.m 396行
  • 81. キャラクタリスティクス の読み書き
  • 82. KeyFobController.m 410行 KeyFobController.m 429行
  • 83. KeyFobController.m 241行 KeyFobController.m 419行
  • 84. バックグラウンド動作 • ペリフェラルのスキャン • • • 頻度が下がる∼12分に1回くらい 他のアプリがスキャンすると、ついでに通知 アプリケーションの呼び出し • ノーティフィケーション/インディケーション
  • 85. WF-BTLE https://www.facebook.com/groups/ 563064710384459/
  • 86. ありがとうございました。
  • 87. 参考情報
  • 88. Appleからの情報 • https://developer.apple.com/videos/wwdc/ 2012/ • Session 703: Core Bluetooth 101 • Session 705 Advanced Core Bluetooth • Apple Bluetooth Mailing list • https://lists.apple.com/mailman/listinfo/ bluetooth-dev
  • 89. 書籍 • • • • AppleのBluetoothアクセサリ設計指針 Bluetooth Low Energy Handbook • http://www.amazon.co.jp/Bluetooth-Low-EnergyDevelopers-ebook/dp/B009XDA1G8/ Building iPhone and iPad Electronic Projects • http://shop.oreilly.com/product/0636920029281.do Bluetooth4 Core Specificaiton (辞書的に)
  • 90. 半導体、モジュール • Texus Instruments社 • • • • • http://www.tij.co.jp/product/jp/cc2540 http://processors.wiki.ti.com/index.php/ Category:BluetoothLE?DCMP=blestack&HQS=ble-wiki フォーラム Nordic Semiconductor社 • https://www.nordicsemi.com BlueGiga • http://www.bluegiga.com
  • 91. サービス、動向 • Facebook BTLEグループ • https://www.facebook.com/groups/ 563064710384459/ • Kickstarter ? • http://www.kickstarter.com/discover/ recently-launched
  • 92. iBeaconアプリのインストール • ソースコード • • • https://db.tt/S0Wp3U8q (Dropbox zip形式) http://goo.gl/8DqaVK (Github) インストール • • iBeacon/simpleBeacon.xcodeproj Xcode5でシミュレータのBLEサポートなくなる
  • 93. メソッド呼び出しのダンプ ビーコン(発信) ビーコンの受信 Bluetooth LE のアドバタイズメント のダンプ
  • 94. • ReginをON • 位置の利用を許可 • RangingをON • どなたか、ビーコン発信? ! ビーコンの受信 • ビーコン:UUID/Major/Minor • Proximity:おおよその距離 • RSSI 受信信号(対数 dBm) • Accuracy:だいたいの精度(m)
  • 95. パスを入手は、パスのリンク先 ビーコンのSWで、ビーコン発信 ビーコン(発信)
  • 96. • Bluetooth LEの生パケットを表示 します。 • ビーコンの情報はiOSにフィルタ されるので、ここには出ません。 • iOSのビーコンは30ミリ秒ごとに 送信されます。すべてのパケット が受信されるわけではありません。 Bluetooth LE のアドバタイズメント のダンプ
  • 97. ログファイルはiTunesのファイル共有で落とします。 バックグラウンド動作のログをとるための機能です。
  • 98. Passbookのデモ
  • 99. Passbookの入手(1/2) パス発行URL https://pass.is/1B7fvaX1VrrZMqn
  • 100. Passbookの入手(2/2)
  • 101. 表示確認 位置アイコンが表示されます

×