iPhoneをアドバタイズさせる

coreBluetoothを使って遊びたい際に身近にIOT機器があることは稀です。あったとしてもAPIが公開されていなかったりするので、なかなかお手軽に遊ぶことができないと思います。

そこで、今回はiPhoneをペリフェラルにしてアドバタイズさせてみます。

コード一覧

このコードをコピペして実機に入れればiphoneやipadがアドバタイズしてくれます。

ちなみにXcodeはVersion 10.1、Swiftはversion 4.2.1です。

import UIKit
import CoreBluetooth

class ViewController: UIViewController {
    
    var peripheralManager: CBPeripheralManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
    }
}

extension ViewController: CBPeripheralManagerDelegate {
    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        let advertisementData: Dictionary = [CBAdvertisementDataLocalNameKey: "自作ペリフェラル!!!!"]
        self.peripheralManager.startAdvertising(advertisementData)
    }
    func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?) {
        print("アドバタイズ成功")
    }
}

解説

まずviewDidLoadの中でCBPeripheralManagerを初期化しています。第一引数でselfを渡してiPhoneをペリフェラルにしています。

var peripheralManager: CBPeripheralManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
    }

実際に処理を行なっているのはextensionの中です。CBPeripheralManagerが初期化されているとperipheralManagerDidUpdateStateが呼ばれます。

startAdvertisingに特定の辞書型を渡していますが、辞書のvalueがスキャンした際に表示される名前になります。

    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        let advertisementData: Dictionary = [CBAdvertisementDataLocalNameKey: "自作ペリフェラル!!!!"]
        self.peripheralManager.startAdvertising(advertisementData)
    }

スキャンについて

過去にCoreBluetooth、RxBluetoothでスキャンを行う記事を書いたのでアドバタイズの確認ように使ってください。

BLEでデバイスをスキャンする

RxBluetoothKitでスキャンする

Note

LightBlue® Explorerというアプリを落とせばお手軽にスキャンができます。

スキャン以外にも色々できるのでiosでBluetoothを使った開発をするのであれば落としておいて損はないと思います。

デザインパターン

前の記事

Bridge
デザインパターン

次の記事

Command