적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS] Core Bluetooth 블루투스 연결

hongssup_ 2021. 4. 23. 16:56
반응형

Apple Developer - Core Bluetooth

 

Apple Documentation - Core Bluetooth Programming Guide

 

Core Bluetooth란? 

Apple에서 블루투스 기능을 제공하는 공용 프레임워크. 

Central(중앙장치) ↔ Peripheral(주변장치) 연결

 

코드 작성을 시작하기 전, 앱에서 블루투스를 사용할 수 있도록 허용해주기 위해 Info-plist에 다음 키를 넣어주어야 한다. 

iOS 13 이상일 경우

Key: Privacy – Bluetooth Always Usage Description
Value: User-facing description of why your app uses Bluetooth.
iOS 12 이하일 경우

Key: Privacy – Bluetooth Peripheral Usage Description
Value: User-facing description of why your app uses Bluetooth.

import CoreBluetooth

 

 

centralManagerDidUpdateState() : Bluetooth 주변 장치를 켜거나 끌 때 업데이트됩니다. 앱이 처음 시작될 때 실행되므로 Bluetooth 상태를 알 수 있습니다. 여기서도 스캔을 시작합니다.

avilable State 

poweredOn : Bluetooth가 활성화되고 승인되었으며 앱 사용 준비가되었

powerOff – 사용자가 Bluetooth를 끄고 설정 또는 제어 센터에서 Bluetooth를 다시 켜야합니다. 
.resetting – Bluetooth 서비스와의 연결이 중단되었습니다.
.unauthorized – 사용자가 블루투스 사용에 대한 앱 권한을 거부했습니다. 사용자는 앱의 설정 메뉴에서 다시 활성화해야합니다.
.unsupported – iOS 장치가 Bluetooth를 지원하지 않습니다.
unknown – 관리자의 상태와 앱의 Bluetooth 서비스 연결을 알 수 없습니다.

 

centralManager didDiscover 이벤트는 스캔 결과를받을 때 발생합니다. 이를 사용하여 연결을 시작

centralManager didConnect 장치가 연결되면 이벤트 화재. 여기서 장치 검색을 시작.

참고 : 장치 검색은 사용 가능한 서비스와 특성을 결정하는 방법입니다. 이것은 우리가 어떤 유형의 장치에 연결되어 있는지 확인하는 좋은 방법

peripheral didDiscoverServices이벤트는 먼저 모든 서비스는 발견 된 후. 우리가로 전환 한 것을 공지 centralManager에 peripheral지금 우리가 연결되어 있는지. 여기서 특징적인 발견을 시작

peripheral didDiscoverCharacteristicsFor 이벤트는 제공되는 서비스의 UUID를 사용하는 모든 특성을 제공

 

import UIKit
import CoreBluetooth

class BluetoothSettingViewController: UIViewController {

    private var centralManager: CBCentralManager!
    private var peripheral: CBPeripheral!
    var connectedPeripheral: CBPeripheral?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }


}

extension BluetoothSettingViewController: CBPeripheralDelegate, CBCentralManagerDelegate {
    //블루투스가 켜진 상태인지 확인. 시스템의 Bluetooth 상태가 변경될 때마다 호출.
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central .state {
        case .poweredOn :
            //startScan()
            break
//        case .poweredOff :
//            // 사용자에게 블루투스를 켜도록 경고
//            break
//        case .unknown:
//            // 다음 상태 업데이트를 기다립니다.
//            break
//        case .resetting:
//            // 다음 상태 업데이트를 기다렸다가 Bluetooth 서비스 중단 로깅 고려
//            break
//        case .unsupported:
//            // 사용자에게 기기가 블루투스를 지원하지 않으며 앱이 예상대로 작동하지 않음을 알립니다.
//            break
//        case .unauthorized:
//            // 앱 설정에서 블루투스 권한을 사용하도록 사용자에게 알립니다.
//            break
        default:
            break
        }
    }
    
    //장치를 찾았을 때 실행되는 이벤트
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        
    }
    
    //올바른 장치에 연결되었는지 확인
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        
    }
    
    //
    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
        
    }
    
    
}

 

 

 

 

참고 : www.freecodecamp.org/news/ultimate-how-to-bluetooth-swift-with-hardware-in-20-minutes/

punchthrough.com/core-bluetooth-basics/

apple_developer_bluetooth

728x90
반응형