• GATT 트랜잭션 Profiles라 불리는 상위 레벨의 중첩된 오브젝트를 기반으로 이루어진다.

    제목 없는 그림.png

  • Profile, Service, Characteristic은 데이터를 정의하고 전송하는 구조를 설명한다.
    • (이들은 ATT 프로토콜을 사용하여 데이터를 구조적으로 조직하는 테이블인 Attribute Table로 관리된다.)
      • Service와 Characteristic을 하나의 테이블로 관리하며, 각 항목은 UUID를 기반으로 고유하게 식별한다.
    • Profiles
      • Bluetooth SIG 또는 다른 표준화된 기관에서 정의한, 특정 기능을 수행하는 데 필요한 서비스의 집합
        • Bluetooth SIG: Bluetooth 기술의 표준을 정의하는 공식적인 기구로, Bluetooth 프로토콜 스택, 서비스, 프로파일 등을 규정한다.
      • Profile은 어떤 장치가 제공해야 할 서비스와 그 서비스 내에서의 데이터 포맷 및 동작 방식 등을 규정한다.
        • 예를 들어 The Heart Rate Profile의 경우, 해당 profile은 Heart Rate Service와 Device Information Service로 구성되어 있다.
      • 공식적으로 채택된 GATT 기반의 profile을 보고 싶다면 다음 링크 참조
        • https://www.bluetooth.com/specifications/gatt
    • Services
      • 데이터를 논리적인 entity로 나누기 위해 사용
      • characteristic이라 불리는 특정한 데이터 청크를 포함한다.
      • Service는 하나 혹은 그 이상의 characteristic을 가질 수 있다.
      • 각 service는 고유의 ID 값(UUID)으로 구분되어진다.
      • 이 값은 공식적으로 채택된 BLE 서비스의 경우 16-bit, 커스텀 서비스일 경우 128-bit로 구성된다.
      • Heart Rate Service 예시
        • UUID는 0x180D
        • 3개의 characteristic(Heart Rate Measurement, Body Sensor Location, Heart Rate Control Point)을 포함하며 첫번째 characteristic은 필수값
    • Characteristics
      • GATT 트랜잭션의 개념에서 가장 낮은 레벨에 위치해있는 것으로, 하나의 데이터 포인트를 캡슐화하는 역할을 한다.
      • 데이터 형식은 Characteristic의 목적에 따라 다르다.
        • X/Y/Z 좌표와 같이 어레이로 구성된 데이터가 될 수도 있고, 온도를 표현하기 위한 부동 소수점 형식을 취할 수도 있다.
      • BLE peripheral 과 상호작용 할 때 필요한 메인 포인트의 역할을 하기에 필히 익혀야 할 개념이다.
        • 예를 들어, peripheral 디바이스에 데이터를 전송하기 위해서는 이 characteristic에 write를 한다.
        • BLE를 통해 무선 UART(Universal Asynchronous Receiver/Transmitter)를 구현하는 예시
          • UART 직렬 통신 방식 중 하나로, 두 장치 간 데이터를 비동기적으로 송수신하기 위해 사용되는 하드웨어 모듈 또는 프로토콜이다.
          • UART Service와 두 개의 characteristics를 지닌 UART-type 인터페이스를 구현할 수 있다.
          • 이때 하나의 characteristic은 TX 채널을, 나머지 하나는 RX 채널을 위해 쓰이며, 이는 각각 읽기 전용, 쓰기 전용으로 쓰이게 된다.
      • Service와 비슷하게 characteristics의 UUID 또한 공식적으로 사전에 정의된 16-bit(4byte), 혹은 128-bit(32byte)로 구성된다.
        • 마찬가지로 Bluetooth SIG에 의해 정의된 characteristic을 사용해도 좋고, 자신만의 peripheral 디바이스 및 소프트웨어가 이해하기 쉬운 방향으로 제작된 커스텀 characteristic을 사용해도 좋다.
        • https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.heart_rate_measurement.xml
      • 예시
        • 위에서 언급한 것처럼 공식적으로 채택된 Heart Rate Service의 경우, 반드시 Heart Rate Measurment characteristic을 포함해야 한다.
        • 이는 0x2A37 의 UUID를 가지며, 데이터의 경우, 처음 8-bit는 HRM(Heart Rate Measurement) data format(이 데이터는 UINT8, 혹은 UINT16일 수도 있다)을 describe하고, 그 뒤에는 config byte에 매칭되는 심박수 데이터가 붙는다.