【Swift3】CoreBluetoothサンプル集

  • 45
    いいね
  • 0
    コメント

CoreBluetooth with Swift3の基本コード集です。
Swift2からちょっと変わってたので覚え書きも兼ねてまとめ。

参考にさせて頂いた書籍

iOS×BLE Core Bluetoothプログラミング
Bluetooth、iOSといえばもはや鉄板のこの書籍を参考にさせて頂きました。

そしてこちらも。
Core Bluetooth with Swift

今回作ったもの

今回はiOS端末×iOS端末のBLE接続を想定し、
セントラルにもペリフェラルにもなれるよう作りました。
アドバタイズ〜キャラクタリスティックの取得までです。

完成品は一応GitHubにあげてあります。
(サンプルコードなので色々雑ですがあしからず)

サンプル集

インポート

import UIKit
import CoreBluetooth

セントラル側

1.プロトコルとプロパティ定義
class ViewController: UIViewController, CBCentralManagerDelegate{
    var centralManager: CBCentralManager!
2.初期化
centralManager = CBCentralManager(delegate: self, queue: nil)
3. 状態変化を取得する(必須)
func centralManagerDidUpdateState(_ central: CBCentralManager) {
        print ("state: \(central.state)")
}
4.スキャン開始
centralManager.scanForPeripherals(withServices: nil, options: nil)
5.スキャン結果取得
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
       print("peripheral: \(peripheral)")
}
6.スキャン終了
centralManager.stopScan()
7. 見つけたペリフェラルへの接続開始
self.centralManager.connect(self.peripheral, options: nil)
8.ペリフェラルとの接続結果を取得
//  成功時
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        print("Connect success!")
}

//  失敗時
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
        print("Connect failed...")
}

サービス検索とキャラクタリスティック検索

1. プロトコルとプロパティ
class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate{
2. サービス検索開始
peripheral.delegate = self
peripheral.discoverServices(nil)
3. サービス検索結果の取得
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
        guard let services = peripheral.services else{
            print("error")
            return
        }
        print("\(services.count)個のサービスを発見。\(services)")
}
4. キャラクタリスティックの検索
peripheral.discoverCharacteristics(nil, for: obj)
5. キャラクタリスティック検索結果の取得
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        if let characteristics = service.characteristics {
            print("\(characteristics.count)個のキャラクタリスティックを発見。\(characteristics)")
        }
}

ペリフェラル側

1. プロトコルとプロパティ
class ViewController: UIViewController, CBPeripheralManagerDelegate{
        var peripheralManager: CBPeripheralManager!
2. 初期化
peripheralManager = CBPeripheralManager(delegate: self, queue: nil)
3. 状態変化を取得
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        print("periState\(peripheral.state)")
}
4. アドバタイズ開始
let advertisementData = [CBAdvertisementDataLocalNameKey: "Test Device"]
peripheralManager.startAdvertising(advertisementData)
5. アドバタイズ結果を取得
func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?) {
        if let error = error {
            print("***Advertising ERROR")
            return
        }
        print("Advertising success")    
}
6. アドバタイズ終了
peripheralManager.stopAdvertising()

サービス追加

1. サービス作成
let serviceUUID = CBUUID(string: "0000")
let service = CBMutableService(type: serviceUUID, primary: true)
2. キャラクタリスティック作成
let charactericUUID = CBUUID(string: "0001")
let characteristic = CBMutableCharacteristic(type: charactericUUID, properties: CBCharacteristicProperties.read, value: nil, permissions: CBAttributePermissions.readable)
3. サービスにキャラクタリスティックを追加
service.characteristics = [characteristic]
4. ペリフェラルにサービスを追加
self.peripheralManager.add(service)
5. サービス追加結果を取得
func peripheralManager(_ peripheral: CBPeripheralManager, didAdd service: CBService, error: Error?) {
        if error != nil {
            print("Service Add Failed...")
            return
        }
        print("Service Add Success!")
}