BLE 기능을 사용하는 앱을 설계하며 블루투스와 BLE는 이름만 비슷한 다른 방식이라는 것을 알게 되었다.
블루투스(Bluetooth)
우선 블루투스(Bluetooth)는 버전별로 아래와 같은 차이가 있다.
BT 1.x 버전은 가장 초기에 나온 1.0부터 2002년에 등장한 1.1을 거쳐 1.2까지 개선하였다.
1.0 버전에는 블루투스 기기에서 볼륨 조절 등을 가능하게 해주는 AVRCP 기능 포함하여 출시되었다. 하지만 1.0 버전은 초창기 규격으로 속도나 안정성의 문제가 있었다. 대표적으로 2.4Ghz의 주파수를 사용하고 무선 랜(802.11b/g)도 2.4Ghz대의 주파수를 같이 사용하므로 동시 사용에 따른 충돌 관련 문제 등이 있다.
이후 1.1 버전~1.2 버전 업데이트를 통해 안정성과 보안 그리고 호환성 문제를 해결하였고 1.2 버전은 2005년 802.15.1 IEEE 표준으로 승인되었다.
BT 2.x (+ EDR) 버전은 3.0Mbit/s의 향상된 데이터 속도(Enhanced Data Rate, EDR)를 지원하게 되었다. Duty Cycle감소에 의한 저 전력 동작 및 multi-link scenarios의 단순화로 사용할 수 있는 대역폭이 늘어났다. (이론상의 전송 속도는 3.0Mbit/s이고, 실제 data전송 속도는 2.1Mbit/s)
또한 질의 과정 동안 장치의 이름, 장치가 지원하는 서비스 목록, 날짜나 시간, 공유 정보 등 더 많은 정보를 제공하고, 스니프 서브레이팅(Sniff subrating) 기술이 추가되어 휴먼 인터페이스 장치들의 배터리 수명을 3배에서 최대 10배까지 증가하였다. 부호화 일시 중지/재개(Encryption Pause Resume) 기능이 추가되어 암호를 다시 설정했을 경우, 장치 간에 더욱 강력한 암호화로 최소 23.3시간 이상의 연결을 유지할 수 있도록 변경되었다.
2.1 버전에는 NFC 코퍼레이션 (NFC Corporation) 기능이 추가되었고 이를 통해 NFC 라디오 인터페이스를 사용하여 Bluetooth을 자동으로 연결하는 기능이 추가되었다.
BT 3.x (+ HS) 버전에는 802.11 PAL(Protocol Adaptation Layer)를 채용해서 속도를 최대 24Mbps로 향상되었고, 만약 3.0에 +HS(High Speed)가 붙어있지 않은 제품에서는 High Speed 연결을 지원하지 않으며 3.0에서 추가된 기능만을 지원한다. 주요 기능으로는 블루투스 기기간에 대용량 그림, 동영상, 파일을 주고받게 된 것이 있다.
BT 4.x 버전에서 배터리 소비를 급격하게 줄일 수 있게 되었다.
4.0 버전에는 아래와 같이 3가지 모드를 지원하는데,
- 저 전력 블루투스(Low Energy) - 전력 소모를 최소화, 배터리 수명을 연장
- 클래식 블루투스(Classic Bluetooth) - 1.0부터 2.1로 이어져온 기존 블루투스 기술
- 하이 스피드 블루투스 (High Speed) - 와이파이를 활용한 HS 고속 전송 기술
4.0 버전은 싱글모드와 듀얼모드가 분리되어 싱글모드는 비콘, 센서 등과 같은 독립형 제품에 사용되고, 듀얼모드는 기존 블루투스와 저전력 기술이 적용, 주로 휴대폰에 사용하게 되었다. 4.0 버전에는 스코프 커버리지(Scope of Coverage)라는 기술이 적용되어 건물 등 장애물에 따라 약 10m~100m의 일정 범위에서만 사용 가능하게 되었다. 또한 AES 128비트, CCM 암호화 알고리즘 적용으로 보안 기능 강화되었다.
4.1 버전은 더 나은 연결(Better Connections) 기능이 추가되었는데, 이는 블루투스 연결 장치끼리의 거리가 멀어지면 연결이 잠시 끊어졌다가 다시 일정 거리 내로 장치가 돌아오면 자동으로 재연결되는 기능이다. 또한 데이터 전송 개선(Improved Data Transfer) 기능 추가되고, 사물 인터넷(The Internet of Things)을 위한 새로운 IPv6 사용 표준이 포함되었다.
2014년 12월 4일에 4.2 버전이 발표되었고 4.2 버전에는 기존 4.0 규격 대비 전송 속도가 2.5배 증가하여 한번에 보낼 수 있는 패킷 용량이 10배로 늘어나 전송 오류와 배터리 소비를 최적화할 수 있게 되었다.
4.2 버전은 사물인터넷을 위해 연결성 강화되어 IPv6나 6LoWPAN을 통해 인터넷에 직접 접속하고, 개인정보 보호 기능이 강화되어 사용자의 허락 없이 블루투스 기기 위치를 추적 불가하게 설계되었다. 기존 블루투스 기기에 대한 펌웨어 업데이트만으로도 가능하다.
BLE(Bluetooth Low Energy)
BLE(Bluetooth Low Energy)는 BLE는 Bluetooth Smart 로도 불리며 Classic bluetooth와 겹치는 부분이 존재한다. 하지만 BLE는 완전히 다른 표준으로 블루투스 표준화 그룹인 Bluetooth SIG에 의해서 개발되기 전까지 Nokia의 사내 프로젝트(Wibree)로 시작되었다.
BLE는 기존 Bluetooth(Bluetooth Classic)보다 저전력으로 동작한다. Bluetooth 4.0 스펙으로 채택이 되어 기존의 배터리 소모를 더 줄여 스마트 밴드, 워치, 비콘(Beacon) 등 장치에 사용되고 있다. 배터리 소모량은 대략 Coin Cell 배터리로 1년 정도 작동한다고 한다. 이렇게 오랜 배터리 소모량이 가능한 만큼 단점 또한 존재하는데, 기존의 Bluetooth Classic에 비해 고속 통신이나 A2DP(Advanced Audio Distribution Profile)의 스테레오 헤드폰은 지원이 되지 않는다는 점이다.
BLE 사용 시 GATT, ATT, Characteristic, Descriptor, Service 등의 용어가 나오는데 의미는 아래와 같다.
- GATT (Generic Attribute Profile) : GATT는 두 BLE 장치 간에 Service, Characteristic을 이용해서 데이터를 주고받는 방법을 정의한 것
- Attribute Protocol (ATT) : GATT는 ATT의 최상위 구현체이며 GATT/ATT로 참조되기도 합니다. 각각의 속성(Attribute)은 UUID를 가지며 128비트로 구성됩니다. ATT에 의해 부여된 속성은 특성(characteristic)과 서비스(Service)를 결정
- Characteristic : 하나의 특성(characteristic)은 하나의 값과 n개의 디스크립터를 포함
- Descriptor : 디스크립터는 특성의 값을 기술
- Service : 하나의 서비스는 특성들의 집합 => e.g. "CO2 Monitor"라는 서비스에서 "CO2 농도"와 같은 특성을 포함
- Profile : 기기가 서로 교환하는 데이터 전체를 의미. Profile 교환 시 문자열로 교환하는 것이 아니라 UUID라는 숫자로 교환하고, BLE 응용 규격 이름 또는 사용자 정의 Profile로도 표현 가능
특히 각 Service는 UUID라 불리는 16bit(for officially adopted BLE Services) 혹은 128bit(for custom services) 구분자를 가지고 있다. 이 부분이 추후 개발을 하며 read, write 등을 수행할 때 자주 사용되는 부분이다. 현재 BLE 사이트에서 공적으로 제공되는 서비스의 UUID를 확인할 수 있다. 물론 커스터마이징 할 수도 있다.
프로파일(Profile), 서비스(Service), 특성(Characteristic)에 의해 구성된 GATT 기반 동작 구조는 아래와 같은 수직 구조이다.
GATT 기반 동작 구조에서 가장 하위 단위는 특성(Characteristic)이다. 특성은 단 하나의 데이터만을 포함한다. 가속도 센서처럼 X, Y, Z 축 값이 한 쌍을 이루는 경우 배열도 하나의 데이터로 간주한다.
BLE로 연결되기 위해 각 기기는 서로의 역할을 구분하게 되는데 Central은 scan과 게시 검색(looking for advertisement)을 담당하고, Peripheral은 게시(advertisement)를 만든다.
- Central (Master) : Advertising 장치를 Scan 후 연결 동작을 시작하는 장치로 연결 시 연결 간격과 Hopping 규칙을 정하는 장치
- Peripheral (Slave) : Advertising 하는 장치로 Central과 연결 후 Central 장치의 설정에 따라 동작
예를 들어, 핸드폰과 센서장치를 BLE로 연결할 때 핸드폰은 센서장치를 scan하고 central이 되고 센서장치는 센서 값을 게시하기 때문에 peripheral이 된다.
BT와 BLE은 내부적으로 많은 차이는 있지만, 공통적으로 device scan -> device connect -> commnunication(write, read) 3가지 단계를 거쳐 통신을 수행한다.
추가
BLE를 사용하며 송수신 길이 제한 관련 문제를 만나게 되었다.
BLE는 최대 전송 길이가 20 bytes로 제한되어있다. write 할 때 데이터를 여러 번 split해서 보내거나 callback을 사용하면 이 문제에 대해 어느 정도 해결할 수 있다. 더 자세한 내용은 아래 링크를 참조하면 된다.
https://stackoverflow.com/questions/24135682/android-sending-data-20-bytes-by-ble
참고 자료
https://m.blog.naver.com/windi97/220602227089
https://velog.io/@zhemdrawer/BLE-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=geniusus&logNo=221761337501