BluetoothHeartRate3
작성일
서비스 사용
연결을 하였으니 사용해야하는는데 어떻게 하면 사용할 수 있을까?
/// 심박계가 연결됐는지 확인하기
func centralManager(_: CBCentralManager, didConnect _: CBPeripheral) {
print("연결 성공!")
self.heartRatePeripheral.discoverServices(nil)
}
이렇게 코드를 추가해보면,
API MISUSE: Discovering services for peripheral <CBPeripheral: 0x280c6c000, identifier = 67AA48A4-41A5-8D62-CFCE-E2FAEC5D8475, name = PA_0196508, mtu = 23, state = connected> while delegate is either nil or does not implement peripheral:didDiscoverServices:
이런 에러를 만나볼 수 있는데,
에러에서볼 수 있듯이
extension HRMViewModel: CBPeripheralDelegate {
}
확장시켜준후,
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices _: Error?) {
guard let services = peripheral.services else { return }
for service in services {
print(service)
}
}
함수를 작성해주면,
API MISUSE: Discovering services for peripheral <CBPeripheral: 0x280c6c000, identifier = 67AA48A4-41A5-8D62-CFCE-E2FAEC5D8475, name = PA_0196508, mtu = 23, state = connected> while delegate is either nil or does not implement peripheral:didDiscoverServices:
될줄 알았는데 여전히 같은 에러가 생긴다 그 이유는 뭘까 ??
바로 대리자를 설정 안해주었기 때문이다.
/// 심박계가 연결됐는지 확인하기
func centralManager(_: CBCentralManager, didConnect _: CBPeripheral) {
print("연결 성공!")
self.heartRatePeripheral.discoverServices(nil)
self.heartRatePeripheral.delegate = self
}
그후 실행시키면
<CBService: 0x28188c240, isPrimary = YES, UUID = FD00>
<CBService: 0x28188c100, isPrimary = YES, UUID = Heart Rate>
<CBService: 0x28188dc00, isPrimary = YES, UUID = 181C>
<CBService: 0x28188db80, isPrimary = YES, UUID = Battery>
<CBService: 0x28188db00, isPrimary = YES, UUID = Device Information>
이런식으로 로그가찍힌다.
이중 가져오고싶은걸 선택하면 되는데 나는 심박수만 할거라서 이런식으로 작성하였다.
self.heartRatePeripheral.discoverServices([heartRateServiceCBUUID])
그러면
<CBService: 0x280ae4880, isPrimary = YES, UUID = Heart Rate>
심박수만 가져오게 된다.