magazine.gif iOS×BLE Core Bluetoothプログラミング

まえがき
本書の読み方

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を使ったサービスを開発するということ
索引