iOS×BLE Core Bluetoothプログラミング
iOS×BLE Core Bluetoothプログラミング
hr />
ソシム
目次
まえがき
本書の読み方
Part1. BLE編
1. はじめに
1-1.BLEとは何か
1-1-1 従来のBluetoothとBLE
1-1-2 BLEを活用したサービス
1-1-3 iOSエンジニアにとってのBLEの魅力(そして難しさ)
1-1-4 Part1「BLE編」で目指すもの
2. BLEをとりあえず体験する
2-1. konashiでBLEを体験する
2-2. 初級編:konashiをとりあえず体験する
2-2-1 用意するもの
2-2-2 konashiとiOS端末をBLEで接続する
2-2-3 デジタル入出力を体験する
2-2-4 受信信号強度(RSSI)を計算する
2-2-5 Webサービスと連動させる
2-3. 中級編:konashiをiOS-SDKを利用して制御する
2-3-1 周辺のkonashiを検索する
2-3-2 接続完了時にLEDを点灯させてみる
2-3-3 受信信号強度(RSSI)を計測する
3. BLEを理解する
3-1. BLEの概要
3-2. BLEの構造
3-2-1 BLEのプロトコルスタック(アーキテクチャ)
3-2-2 ATT(Attribute Protocol)
3-2-3 GAP(Generic Access Profile)
3-2-4 GATT(Generic Attribute Profile)
3-3. BLEのネットワークトポロジー
3-3-1 ブロードキャスト型トポロジー
3-3-2 接続型トポロジー
3-4. BLEでのネットワークと通信の制御
3-4-1 Bluetoothの無線仕様とPHY層(LE Physical)
3-4-2 LL層(Link Layer)
3-4-3 LL層における注意点
3-4-4 Bluetooth Device Address
3-4-5 AdvertisingとScanning
3-4-6 Connection
3-5. L2CAP(Logical Link Control and Adaption Protocol)によるパケットの制御
3-5-1 L2CAP層(Logical Link Control and Adaption Protocol)
3-6. BLEのパケットフォーマット
3-6-1 Basic Packet Format
3-6-2 Advertising Channel PDU
3-6-3 Advertising PDU
3-6-4 Scanning PDU
3-6-5 Initiating PDU
3-6-6 Data Channel PDU
3-6-7 CRC(Cyclic Redundancy Check)
3-6-8 L2CAP層でのパケットフォーマット
3-7. LL層における通信のやり取り
3-7-1 Bluetooth Device Addressによるフィルタリング
3-7-2 Advertising Channelにおける通信
3-7-3 Data Channelにおける通信
3-8. GAP(Generic Access Profile)の詳細を知る
3-8-1 GAPとは何か
3-8-2 GAPによる「役割」の管理
3-8-3 ModeとProcedure
3-8-4 GAPによる「動作」の管理
3-8-5 GAPによる「セキュリティ」の管理
3-9. ATT(Attribute Protocol)とGATT(Generic Attribute Profile)の詳細を知る
3-9-1 ATTとは何か
3-9-2 Attributeの構造
3-9-3 ATTサーバ/クライアントの対応するメソッドとPDU
3-10. GATTとService
3-10-1 Serviceの構造
3-10-2 Characteristicの定義
3-10-3 GATTによるService Change、Characteristic
3-10-4 GAPによるService、Characteristic
3-10-5 GATTプロファイルのAttribute Typeの一覧
3-10-6 GATTプロファイルで利用できる機能
3-11. iOSエンジニアのBLEあんちょこ
3-11-1 Bluetooth Accessory Design Guidelines for Apple Products
3–11-2 BLEはなぜ低消費電力なのか
3-11-3 Core Bluetoothにおける20octetが何を示すのか
Part2. iOSプログラミング編
4. Core Bluetooth入門
4-1. 周辺のBLEデバイスを検索する
4-2. BLEデバイスに接続する
4-3. 接続したBLEデバイスのサービス・キャラクタリスティックを検索する
4-4. 接続したBLEデバイスからデータを読み出す(Read)
4-5. 接続したBLEデバイスへデータを書き込む(Write)
4-6. 接続したBLEデバイスからデータの更新通知を受け取る(Notify)
5. ペリフェラルの実装
5-1. セントラルから発見されるようにする(アドバタイズの開始)
5-2. サービスを追加する
5-3. サービスをアドバタイズする
5-4. セントラルからのReadリクエストに応答する
5-5. セントラルからのWriteリクエストに応答する
5-6. セントラルへデータの更新を通知する(Notify)
6. 電力消費量、パフォーマンスの改善
6-1. スキャンの最適化
6-1-1 スキャンを明示的に停止する
6-1-2 特定のサービスを指定してスキャンする
6-1-3 できるだけスキャンの検出イベントをまとめる
6-2. ペリフェラルとの通信の最適化
6-2-1 必要なサービスのみ探索する
6-2-2 必要なキャラクタリスティックのみ探索する
6-3. ペリフェラルとの接続の最適化
6-3-1 接続の必要がなくなり次第すぐに切断する/ペンディングされている接続要求をキャンセルする
6-3-2 ペリフェラルに再接続する
6-4. イベントディスパッチ用のキューを変更する(セントラル)
6-5. アドバタイズの最適化
6-6. イベントディスパッチ用のキューを変更する(ペリフェラル)
7. バックグラウンド実行モード
7-1. バックグラウンド実行モードへの対応方法
7-1-1 対応方法1:Capalitiesパネルを利用
7-1-2 対応方法2:info.plistを直接編集
7-2. バックグラウンド実行モードの挙動
7-2-1 バックグラウンド実行モードでできること
7-2-2 バックグラウンドにおける制約(ペリフェラル・セントラル共通)
7-2-3 バックグラウンドにおける制約(セントラル)
7-2-4 バックグラウンドにおける制約(ペリフェラル)
7-3. アプリが停止しても、代わりにタスクを実行するようシステムに要求する(状態の保存と復元)
7-3-1 バックグラウンド実行モードだけでは問題となるケース
7-3-2 「状態の保存と復元」機能でできること
7-3-3 実装にあたっての注意点
7-3-4 セントラルにおける「状態の保存と復元」機能の実装方法
7-3-5 ペリフェラルにおける「状態の保存と復元」機能の実装方法
7-4. バックグラウンド実行モードを使用せず、バックグラウンドでのイベント発生をアラート表示する
8. Core Bluetoothその他の機能
8-1. ペリフェラルに再接続する
8-1-1 既知のペリフェラルへの再接続
8-1-2 接続済みのペリフェラルに再接続する
8-1-3 再接続処理フロー
8-2. Bluetoothがオフの場合にユーザーにアラートを表示する
8-3. UUID詳解
8-3-1 CBUUIDの生成
8-3-2 16ビット短縮表現
8-3-3 CBUUIDの比較
8-3-4 ペリフェラルのUUIDについて
8-4. アドバタイズメントデータ詳解
8-4-1 アドバタイズメント・データの辞書で使用されるキー
8-4-2 アドバタイズメントデータの制約
8-5. CBPeripheralのnameが示す「デバイス名」について
8-6. 静的な値を持つキャラクタリスティック
8-7. サービスに他のサービスを組み込む~「プライマリサービス」と「セカンダリサービス」
8-7-1 セカンダリサービスとは?
8-8. サービスの変更を検知する
9. Core Bluetooth以外のBLE関連機能
9-1. iOSの電話着信やメール受信の通知を外部デバイスから取得する(ANCS)
9-1-1 ANCSとは?
9-1-2 ANCSのGATT
9-1-3 ANCSの実装方法
9-2. iBeaconとBLE
9-2-1 ビーコン=アドバタイズ専用デバイス
9-2-2 iBeaconのアドバタイズメントパケット
9-2-3 Core Bluetoothに対するiBeaconのアドバンテージ
9-2-4 BLEの知見をiBeacon利用アプリの開発に活かす
9-3. MIDI 信号をBLEで送受信する(MIDI over Bluetooth LE)
9-3-1 CoreAudioKit
9-4. BLEが利用可能なiOSデバイスのみインストールできるようにする
9-4-1 Required device capabilities
9-4-2 これまでに販売されたiOSデバイスのBLE対応状況一覧
10. 開発ツール・ユーティリティ
10-1. 128ビットUUIDを生成するコマンド「uuidgen」
10-2. 開発に便利なiOSアプリ「LightBlue」
10-3. Apple 製開発用ツール「Bluetooth Explorer」
10-4. 「PacketLogger」でBLEのパケットを見る
11. ハマりどころ逆引き辞典
トラブル1:スキャンに失敗する
トラブル2:接続に失敗する
トラブル3:サービスまたはキャラクタリスティックが見つからない
トラブル4:Writeで失敗する
トラブル5:キャラクタリスティックの値がおかしい
トラブル6:バックグラウンドでのスキャンが動作しない
トラブル7:バックグラウンドのペリフェラルが見つからない
トラブル8:セントラルの「状態の保存と復元」に失敗する
トラブル9:ペリフェラルの「状態の保存と復元」に失敗する
トラブル10:iBeaconが見つからない
12. BLEを使用するiOSアプリ レシピ集
レシピ1:心拍数モニタアプリ
レシピ2:活動量計デバイスとアプリ
レシピ3:ジェスチャ認識ウェアラブルデバイス&アプリ
レシピ4:すれちがい通信アプリ
Appendix. BLEを使ったサービスを開発するということ
索引