Part 2. What is BLE (Bluetooth Low Energy)
1. Overview
※ Bluetooth Classic (BR/EDR)과 Bluetooth HS(High Speed)에 대한 설명은 Part 1. What is Bluetooth 글을 참고하세요.
Part 1 에서 Bluetooth Classic과 HS(High Speed)에 대해 살펴보았습니다. 이번 포스트에서는 BLE(Bluetooth Low Energy) 에 대하여 언급합니다. Bluetooth Classic과 BLE는 무선통신을 이용한다는 점에서 같으나, 전혀 다른 프로토콜이라고 할 수 있습니다.
2. What is BLE ?
2.1 Feature
BLE는 Bluetooth Low Energy의 약자로, 블루투스 저전력 무선 통신기술을 의미합니다. 저전력 IoT 및 어플리케이션에 탑재되며, 기존 Bluetooth Classic 및 HS 보다 비교적 적은 전력을 사용해 통신이 가능하기 때문에, 전력 자원이 한정된 환경에서 사용하기 용이합합니다.
기존의 Bluetooth Classic, HS가 Piconet과 Scatternet 네트워크를 사용한다면, BLE는 GATT 프로파일을 이용하여 네트워크를 구성합니다. 따라서 프로토콜 스택도 기존의 Bluetooth Classic, HS 와는 다른 별개의 구조를 갖게 됩니다.
2.2 BLE Protocol Stack
BLE 프로토콜 스택은 아래 그림과 같이 ATT(ATTribute protocol)와 GATT(Generic ATTribute profile) 두 가지 요소로 구성됩니다.
ATT는 서버 클라이언트 사이의 데이터 교환에 대한 규칙을 정의합니다. 즉 BLE에서 데이터를 구조화하고 관리하기 위한 프로토콜이라고 할 수 있습니다.
속성(Attribute) 단위로 데이터를 표현하며, 각 속성은 고유한 식별자인 UUID(Universal Unique IDentifier)를 가집니다.
ATT 프로토콜은 데이터 읽기, 쓰기 및 알림 / 인디케이션 등의 동작을 지원하며, 데이터의 효율적인 전송을 위해 데이터 패킷 분할 및 재조립, 에러체크 등의 기능을 지원합니다.
GATT는 ATT를 기반으로 한 상위 프로토콜로, BLE 장치 간 데이터 교환을 정의하고 관리합니다. ATT의 데이터 구조와 동작을 특정 응용 프로그램 또는 장치 유형에 대한 프로파일로 정의합니다. GATT 프로파일은 서비스와 특성의 집합으로 구성되며, 각각의 프로파일은 특정 기능이나 데이터 유형을 나타냅니다.
2.3 GATT Data Structure
GATT에 의해 정의되는 BLE 시스템의 데이터 구조는 Service와 Characteristic으로 표현됩니다.
출처 : 그림 출처 링크
서비스(Service)는 연관된 특성 그룹을 나타냅니다.
예를 들어 스마트 워치의 GATT 서비스의 예시로 배터리 서비스, 건강 데이터 서비스, 알림 서비스 등이 있다. 각 서비스는 고유한 UUID를 가지며, 해당 서비스의 특성을 식별합니다.
특성(Characteristic)은 서비스 내에서 실제 데이터 값을 나타낸다. 각 특성은 고유한 UUID를 가지며, 값을 읽거나 쓸 수 있는 속성을 가질 수 있습니다. 예를 들어 배터리 서비스의 특성으로는 현재 배터리 수준을 읽을 수 있는 특성이 포함될 수 있습니다.
서비스와 특성의 관계를 정리하자면, 서비스는 특정 어플리케이션을 구현하기 위해 필요한 데이터의 집합이라고 할 수 있으며, 각각의 데이터는 특성에 의해 정의됩니다. 예를 들어 심박수 측정 데이터를 관리하기 위한 service를 정의할 경우, 해당 service는 실제 심박 수치를 저장하는 특성을 비롯하여, 센서의 단위나 모델 번호, 보안 관련 파라미터 등의 정보를 관리하는 다수의 특성을 포함할 수 있습니다.
이러한 서비스와 특성에 대한 정보는 attribute라는 최소 데이터 유닛에 의해 정의되고, BLE 디바이스 내의 attribute에 대한 정보는 최종적으로 attribute table 내에 저장됩니다. attribute는 type(UUID) handle, permission 세 가지 정보를 포함하는데, Attribute table 예시는 아래의 그림과 같습니다.
Handle은 attribute의 주소 값에 해당되고, permission에는 서비스 혹은 특성의 접근 권한에 대한 정보 등이 저장됩니다.
UUID는 GATT 데이터 성분을 구분하기 위한 고유 식별자로 사용됩니다.
서비스 정의 순서를 살펴봅시다. 먼저 위의 표에서 UUID 0x2800은 서비스 선언에 대한 attribute UUID를 의미합니다. 위의 예시에서 0x2800은 HRS(Heart Rate Service), 심박 측정 서비스에 대한 UUID 0x180D이 저장되어 있는 것을 확인할 수 있다. 프로파일에 대한 설명은 추후 언급하도록 하겠습니다.
Bluetooth SIG에는 자주 사용되는 서비스에 대한 UUID를 사전에 정의해두고 있으며, 이러한 서비스의 경우 16bit 사이즈의 UUID 값을 갖습니다. 사전에 정의된 GATT 서비스에 대한 UUID 값은 Bluetooth Specification Document 에서 확인할 수 있습니다.
BLE 디바이스는 하나 이상의 service를 포함할 수 있으며, 각각의 service 또한 하나 이상의 characteristic을 포함할 수 있습니다.
아래 그림은 BLE 디바이스 내부의 데이터 구조의 예시를 보여줍니다.
2.4 GATT Server / Client
GATT 는 서버-클라이언트 모델을 기반으로 동작하는 프로토콜입니다. 무선 연결된 BLE 디바이스 중 데이터를 가지고 있는 디바이스가 GATT 서버가 되고, 데이터를 요청하는 디바이스가 GATT 클라이언트가 됩니다.
예를 들어, 스마트폰 APP을 이용해서 BLE 센서 노드의 데이터를 수신하고자 할 때, BLE 통신을 시작하는 디바이스는 스마트폰 이기 때문에, 스마트폰이 GAP central이 되고, 센서 노드는 GAP peripheral이 됩니다. 그리고 실질적인 데이터를 가지고 있는 BLE 센서 노드는 GATT 서버가 되고, 데이터를 요청하는 스마트폰은 GATT 클라이언트가 됩니다.