70
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

【Swift3】CoreBluetoothサンプル集

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!")
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
70
Help us understand the problem. What are the problem?