Ble GATT 개론

Ble GATT 개론

Ble GATT 개론 포스팅입니다. 

GATT에 앞서서 아래 표 좀 보고 가자.

 프로파일이 있으면 그 밑에 서비스가 있고 Service 밑에 Characteristic이 있고, 거기에 Descriptor가 붙는 식이다.

 그러니까, 프로파일은 그냥 내 프로필이니까 넘어가고 서비스부터 들여다보자.

 서비스는 이 사이트에서 들여다 볼 수 있다.

위 표가 그 사이트에 있는건데, 예를 들어보겠다.

이를테면 스마트 워치를 만든다고 하자.

폰(Client)에게 스마트 워치(Server)의 심박수도 보여주고 싶고, 배터리 %도 보여주고 싶다고 하면, 여기 적힌 두 개의 서비스를 써야한다. 그러니까 ‘Heart Rate’와 ‘Battery Service’를 써야한다. 위의 표를 보면 알 수 있다시피 2개의 서비스를 쓸 수도 있다.

 일단 핵심 기능이라고 생각하는 Heart Rate 서비스부터 들여다보자.

 bluetooth에서 사이트에 명시해놓은 서비스의 UUID는 4자리로 명시되어 있다. 사실 여기에는 숨어있는 낚시가 있는데, UUID는 원래 4자리가 아니다

UUID는 원래 아래처럼 겁-나 길게 명시되어 있다. 그 중에서 앞에 00000000여기에 그 숫자를 메꿔 넣는 식이다.

그러니까

00000000-0000-1000-8000-00805F9B34FB

가 BASE UUID라면 Heart Rate의 Service UUID는 아래와 같아진다

0000180D-0000-1000-8000-00805F9B34FB

 서비스를 정했으면 그 안에 들어있는 특징들(Characteristics)이 있지 않겠는가, 그 특징들은 아래와 같아진다.

 여기서 다룰 수 있는 특징들은 세가지가 있다. 

  1. 심박수 측정 알림 기능
  2. 심박 센서 부착 위치
  3. 심박 센서 컨트롤

 각 특징 오른쪽에는 그 특징에서 지원해야 하는 기능들을 명시하고 있다.

  1.의 기능에는 Notify 기능을 필수적으로 지원해야하는데, 이 기능은 이를테면 심박 수가 변한다면 휴대폰의 요청이 없더라도 값이 변경된 것을 알려주는 기능이다. 그러니까, 휴대폰에서 사용자가 Read 버튼을 누를때만 값이 변하는 것이 아니라, 센서단에서 값이 변한다면 자동으로 휴대폰에게 값이 변한 것을 보여줄 수 있는 기능이라 할 수 있겠다.

  2.의 기능에는 Read 기능을 필수적으로 지원해야한다. 심박센서가 부착된 위치가 실시간으로 변할 일은 없으니, 휴대폰에서 Read를 요청하면 그 부착 위치를 보여주는 식이면 되겠다.

  3.의 기능은 휴대폰에서 심박 센서에게 어떤 설정을 바꾸고 싶을때 쓰는 특성이므로, Write 기능을 필수적으로 지원해야한다. 이건 어찌보면 당연한 일. 

 이 3개의 특성(Characteristics)은 모두 지원할 필요는 없고, 필요하면 한 개만 사용해도 된다. 그리고, 이 특성별로 고유의 주소가 있다. 

그 중 1.의 기능에는 0x2A37의 고유 UUID를 가지고 있다.

여기에는 레지스터 설정하듯이 값을 넣어주는 설정을 해야하는데 자세한건 해당 Characteristic을 참고해주시길 바란다.

참 이 Characteristic에는 필수적으로 삽입해야하는 Descriptor가 있다. 


 오른쪽에 박스 쳐 놓은 곳이 Descriptor인데, Client에게 Characteristic을 설정할 수 있게 값을 보여주는 기능이라 볼 수 있겠다. 필수적으로 삽입해야하는 기능으로 만약 삽입을 하지 않았다면, 휴대폰(Client)에게 Server의 데이터를 볼 수 없는 기적의 미라클(…)을 맛보게 될 것이다.

 참고로 이 descriptor의 UUID는 0X2902인데, 일부 코드에서 BLE2902라고 적혀 있다면 이 기능을 의미한다. 자주 쓰게 될 기능이므로 알아두는 편이 좋겠다.

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d 블로거가 이것을 좋아합니다: