Bluetooth for iOSプログラミング

iOSのBLE通信アプリケーションを作ろうと思います。

Swiftで、セントラル側を実装します。

AppleのBLEプログラミングガイドを参考にしていきます。

Bluetooth Core プログラミングガイド

 

【手順】

  1. セントラルマネージャー起動
  2. アドバタイズしているペリフェラルを検出
  3. 検出したペリフェラルに接続
  4. 接続したペリフェラルのサービス検出
  5. サービス特性(キャラクタリスティック)を検出
  6. キャラクタリスティックの値を検出
  7. キャラクタリスティックの読み取り
  8. キャラクタリスティックの変更通知
  9. キャラクタリスティックに書き込み

 

【1.セントラルマネージャー起動】

CoreBluetoothという公式ライブラリがあるので、importします。

BluetoothManagerのデリゲートを継承します。

Managerの変数宣言します。

Managerを初期化します


import CoreBluetooth

class ViewController: UIViewController, CBCentralManagerDelegate{
    //Bluetoothマネージャの宣言
    var myCentralManager: CBCentralManager!
    override fun viewDidLoad(){
        //マネージャの初期化
        self.myCentralManager = CBCentralManager.init(delegate: self, queue: nil)
        //周辺ペリフェラルのスキャン開始
        myCentralManager.scanFor PeripheralsWithServices(nil, option: nil)
        ・・・・・・
    }
        ・・・・・・
}

 

【2.アドバタイズしているペリフェラルを検出】

ペリフェラルを検出した時に呼ばれるデリゲートを実装します。


//ペリフェラルが見つかった時呼ばれるデリゲート

fun centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String: AnyObject], RSSI: NSNumber){

    //peripheral.nameでペリフェラルの名前を取得
    print("peripheral name : \(peripheral,name!)")

    //ペリフェラルが見つかったら検索をやめる
    myCentralManager.stopScan()
}

 

【3.検出したペリフェラルに接続する】
目的のペリフェラルに接続します。
接続が成功したかどうかは、デリゲートで判断します。

//ペリフェラルに接続
self.myCentralManager.connectPerpheral(peripheral, option: nil)


//デリゲートの実装
fun centralManager(central: CBCentralManager. didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber){
    print("Connect")
}

 

【4.接続してたペリフェラルのサービス検出】

ペリフェラルと接続前にペリフェラルが提供するサービスを知ることができる。

ペリフェラルに接続する前に知ることができる情報は、以下のみ?

  • ペリフェラルの名前
  • ペリフェラルが提供する特定のサービス
  • ペリフェラルのUUID
  • ペリフェラルとの接続状態(接続/非接続)

サービスのキャラクタリスティックにはペリフェラルと接続した後にアクセスできる。


private func peripheral(peripheral: CBPeripheral!, didDiscoverServices error: Error!){
  if(error != nil){
  print("error: \(error)")
  }
  print("SERVICE : \(self.myPerifral!.services!.count)")
  for service in peripheral.services!{
    print("Discovered service : \(peripheral.services!)")
  
    // キャラクタリスティック探索開始
    peripheral.discoverCharacteristics(nil, for: service)
  }
}

※discoverCharacteristicsの引数で、CoreBluetoothプログラミングガイドだとふたつめの引数が

“forService:service as CBService”となっているがエラーになる。

ここで詰まった。ちゃんと調べてないが、swift3だとそうなるみたい。

 

 

【5.接続してたペリフェラルのサービス検出】

サービスが見つかったらキャラクタリスティックにアクセスする。


private func peripheral(peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!, error: Error!){
  if(error != nil){
    print("error: \(error)")
  }
  print("CHARACTA : \(service.characteristics!.count)")
  for charact in service.characteristics!{
    print("Discovered charact : \(service.characteristics!)")
   print("charact UUID : \(service.uuid)")
  }
}

コメントを残す

メールアドレスが公開されることはありません。