72
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Swift3】CoreBluetoothサンプル集

Last updated at Posted at 2016-10-23

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!")
}
72
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?