Bluetooth 근접 프로필
근접 프로필은 디바이스가 근접성을 감지할 수 있도록 하는 두 가지 역할을 정의합니다.
두 역할이 호출됩니다.
- 근접 기자
- 근접 모니터
근접 기자
근접 기자는 GATT(일반 ATTribute) 서버여야 합니다.
근접 기자는 다음 GATT 서비스를 지원합니다.
- 링크 손실 서비스(필수)
- 즉시 경고 서비스(선택 사항)
- Tx Power Service(선택 사항)
근접 모니터
근접 모니터는 GATT 클라이언트입니다. 근접 리포터에 대한 연결을 만들고 유지 관리하고 연결의 RSSI(무선 신호 강도 정보)를 모니터링하여 신호의 경로 손실을 계산해야 합니다. 선택적 Tx Power Service를 근접 기자에서 사용할 수 있는 경우 이 추가 정보를 사용하여 Tx 전원 수준에서 RSSI를 빼서 RSSI 값을 정규화할 수도 있습니다.
Windows에서 GATT 지원
GATT 디바이스가 Windows와 페어링되면 디바이스가 시스템의 일부가 됩니다. Windows는 디바이스에서 보고한 디바이스와 기본 서비스를 모두 나타내는 디바이스 개체를 제공합니다.
Windows.Devices.Bluetooth.GenericAttributeProfile 네임스페이스는 개발자가 Windows에서 사용할 수 있는 제네릭 특성 프로필 API를 설명합니다.
디바이스 앱을 개발할 때 첫 번째 단계 중 하나는 사용자가 관심 있는 시나리오를 수행하기 위해 앱에 필요한 Bluetooth 서비스를 식별하는 것입니다. 근접 프로필의 경우 디바이스 앱은 링크 손실 서비스 및 선택적으로 즉시 경고 서비스 및 Tx Power Service를 사용해야 합니다.
디바이스 앱은 Windows.Devices.Enumeration 네임스페이스에서 사용할 수 있는 API를 사용하여 Windows와 쌍을 이루는 디바이스가 링크 손실 서비스를 구현하는지 확인해야 합니다. 특히 DeviceInformation.FindAllAsync 메서드를 사용합니다.
DeviceInformation.FindAllAsync 메서드는 링크 손실 서비스가 포함된 디바이스만 필터링하기 위해 AQS(고급 쿼리 구문) 디바이스 선택기를 매개 변수로 사용합니다. 디바이스 앱 개발자는 GattDeviceService 클래스의 GetDeviceSelectorFromUuid 또는 GetDeviceSelectorFromShortId 메서드를 사용할 수도 있으므로 AQS 필터를 수동으로 생성할 필요가 없습니다.
링크 손실 서비스는 Bluetooth SIG에서 정의한 Bluetooth GATT 서비스이므로 정규화된 UUID 대신 짧은 ID를 사용할 수 있습니다.
근접 프로필 서비스에 할당된 짧은 ID 서비스 ID는 다음과 같습니다.
서비스 이름 | 짧은 ID |
---|---|
링크 손실 | 0x1803 |
즉각적인 경고 | 0x1802 |
Tx 전원 | 0x1804 |
Bluetooth SIG는 할당된 숫자 문서에서 최신 서비스 목록을 유지 관리합니다.
사용할 서비스를 확인한 후 GattDeviceService.FromIdAsync를 호출하여 서비스의 instance 가져옵니다.
유효한 GattDeviceService 개체를 가져온 후에는 Windows.Devices.Bluetooth.GenericAttributeProfile API를 사용하여 디바이스와 통신하는 데 사용합니다.
이러한 API를 사용하면 읽기 및 쓰기 기능뿐만 아니라 특정 서비스 및 해당 개체(예: 포함된 서비스, 특성 및 설명자)에 액세스할 수 있습니다.
Bluetooth 일반 특성 프로필 - 심박수 서비스 샘플은 이러한 기술 중 일부를 보여 줍니다.
효율적으로 전원 사용
Windows의 Bluetooth 저에너지 지원은 전원을 효율적으로 사용하는 데 중점을 두고 있습니다. 이 포커스에는 로컬 Bluetooth 라디오 어댑터의 전력 소비를 줄이고 CPU를 최대한 적게 사용하는 것이 포함됩니다.
따라서 Bluetooth LE 연결을 설정하려면 앱이 GattCharacteristic.ValueChanged 이벤트에 대한 처리기를 등록해야 합니다. 또는 앱은 BluetoothCacheMode.Cached 옵션을 지정하지 않고 GattCharacteristic.ReadValueAsync, GattCharacteristic.WriteValueAsync 또는 GattCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync 메서드를 호출해야 합니다.
참고
전력 소비를 최소화하기 위해 Windows는 로컬 Bluetooth 라디오 컨트롤러를 폴링하여 링크의 RSSI 값을 적극적으로 모니터링하지 않습니다.
전원 고려 사항은 근접 프로필 구현 세부 정보에 설명되어 있습니다.