안드로이드 운영체제에서의 블루투스 4.0

2015.04.03 09:45:16

안드로이드 운영체제에서는 비교적 쉽게 블루투스 통신 방식을 지원해 다양한 용도로 사용했다. 특히 SPP(시리얼 통신 프로파일)는 아이폰 운영체제와 달리 자유롭게 사용할 수 있다. 하지만 현재 다루고 있는 블루투스에 관해서는 상황이 좀 복잡했다.


안드로이드 운영체제 4.3 버전부터는 BLE(Bluetooth Low Energy)에 대한 지원을 하고 있어 쉽게 안드로이드와 아이폰에 호환되는 앱세서리 장치를 개발할 수 있게 되었다. 


아이폰에서와 마찬가지로 BLE에 관련된 프로파일 및 연결 방식은 동일하게 다루어지나 그 차이에 대해서는 좀 더 살펴볼 필요가 있다.


그림 1. 블루투스의 내부 구조


그림 2. 온도계의 정보를 다루는 프로파일



지금부터 안드로이드 운영체제에서 어떠한 방식으로 BLE 장치에 대한 프로파일을 관리하고 운영하는지에 대해 살펴보도록 하겠다.


최근 여러 칩 업체들에서 블루투스 관련 솔루션들이 많이 나오고 있다. 핏빗(FitBit)과 같은 업체에서 만든 스포트 액티비티 트랙커가 성공적으로 시장에 출시되고 있고 재고가 없을 정도로 인기라는 소문도 들린다. 


아이폰에서 블루투스 4.0이 채택되면서 통신 방식 및 개발에 대한 일종의 표준이 되었고 이러한 이유로 블루투스를 사용한 앱세서리 제품들이 본격적으로 나오게 된 계기가 되었지만, 안드로이드 운영체제에서 내부에 BLE관련 내용을 정식으로 지원함으로써 이제 본격적으로 블루투스 4.0 시대가 열린다고 하겠다. 물론 블루투스 4.1이 최근에 또 발표가 되었고, 4.1 스펙을 지원하는 장치들이 곧 나오게 될 것이다. 


블루투스는 저렴한 가격으로 연결할 수 있는 기술의 하나이다. 하지만 웨어러블 컴퓨팅을 위한 통신 방식으로써 중요한 역할을 하고 있다. 스마트폰이 웨어러블 컴퓨팅의 핵심이라고 하면 블루투스는 여러 웨어러블 장치들을 연결하는 가교라고 볼 수 있을 것이다. 하지만 아직까지는 이 웨어러블 장치들을 연결하고 운용하는데 있어 매끄럽지 않은 건 사실이다. 배터리의 한계로 인한 사용시간, 소프트웨어나 하드웨어가 기대에 못 미치는 점 등이 있다. 하지만 이제 시작이기 때문에 이러한 점은 점차 해결될 것이다.


이러한 중요한 역할을 하는 블루투스 4.0에 대해 안드로이드 운영체제에서는 어떻게 다루어지는지 좀 더 살펴보도록 하겠다.


블루투스는 <그림 1>와 같은 내부 소프트웨어 구조로 구성된다. 물리적인 연결 영역(Physical Layer), 연결 영역(Link Layer), 프로토콜의 보안을 담당하는 보완 매니저(Security Manager), 속성 프로파일(Generic Attribute Profile), 접근 프로파일(Generic Access Profile) 등이 있다. 그 중에서도 속성 프로파일과 접근 프로파일이 블루투스 4.0의 중요한 역할을 담당한다. 


이전의 블루투스 스펙에서는 L2CAP, RFCOMM, SCO 같은 프로파일 바탕 위에 통신을 하기 위한 프로파일들이 특정하게 정의된 구조를 취했다. 하지만 블루투스 4.0은 다양한 장치를 지원하기 위해 새로운 프로파일을 정의하고 사용할 수 있게 하는 유연한 구조를 가지고 있다. <그림 2>은 온도계의 정보를 다루는 프로파일의 예이다.
온도계에서 필요한 정보는 온도/시간 정보다. 스마트폰에서는 온도에 대한 정보를 블루투스를 통해 온도계에 요청하고 측정된 온도/시간 정보를 전달받는다. 이것은 마치 클라이언트/서버 구조에서 요청하고 정보를 받는 구조와 유사한 구조로 동작한다.


온도계와 같은 장치는 종류나 사양이 다양하기 때문에 하나의 프로파일로 정의하기가 어렵다. 따라서 블루투스 4.0에서는 온도계와 같은 다양한 장치를 정의하기 위해 사용자가 프로파일을 정의하고 사용할 수 있게 하는 사용자 정의 프로파일을 만들 수 있는 구조를 제공한다. 다양한 장치에 대한 프로파일을 정의하고 구현할 수 있는 기능을 제공한다. 사용자 정의 프로파일을 이용해 다양한 장치를 지원하는 기능은 대단히 유용하게 사용된다.


그림 3. 온도계에 대한 정보 속성



우선 사용자 정의 프로파일은 속성 프로토콜(ATT, Attribute Protocol)을 통해 어떤 정보를 전달할 것인지에 대한 정보를 교환한다. <그림 3>은 온도계 정보에 대한 정의로, 온도계 정보를 정의하기 위한 UUID(universally unique identifier), 배터리의 잔량을 알려주는 배터리 상태, 그리고 온도에 대한 정보 등으로 구성됐다.


블루투스 4.0에서는 프로파일에 대한 고유성을 확보하기 위해 UUID를 많이 사용하는데, 이는 온도계에 관한 정보를 지정하는 프로파일이다. 온도계나 심박계와 같은 일부 장치의 경우에는 사전 스펙에 정의된 프로파일을 통해 사용할 수도 있다.


그림 4. 온도계 프로파일의 세부 정의


앞서 설명한 온도계 프로파일은 속성 정의 프로파일(Generic Attribute Profile)의 세부 정의에 의해 구현된다. 이 프로파일을 통해 초기에 스마트폰과 장치가 통신할 때 어떤 정보가 전달될 것인지 확인되며, 정보 또한 전송/수신된다.


속성 정의 프로파일은 장치에 대한 정보, 센서, 세부 속성 정보 등을 제공하며 스마트폰에서 실제 데이터를 전달받아 처리할 수 있도록 구성돼 있다.


그림 5. 블루투스 프로파일의 구조


<그림5>는 블루투스 프로파일의 내부 구성을 보여주는 그림이다. 앞에서 설명한 것처럼 L2CAP, ATT, GATT와 같은 프로파일의 내부 구조가 중요한 역할을 하게 된다.


•L2CAP- 블루투스 관련 내부 패킷을 합치거나 나누어 분석할 수 있는 레이어
•ATT- 정의한 프로파일에 대한 속성 값을 관리하는 레이어, 앞에서 설명한 것처럼 BLE 프로파일은 세부 내용을 정의하는 구성하고 이 속성의 조합하여 하나의 프로파일이 만들어지게 된다.
•GATT- 위의 속성들을 하나로 모은 레이어. BLE 장치는 여러 개의 속성(ATT)가 있고, 이것을 모아서 하나의 프로파일처럼 관리할 수 있다. 따라서 블루투스 장치에 대한 제어는 이 장치에 대한 제어로부터 시작된다고 하겠다.

다음 소스는 안드로이드 운영체제에서 GATT에 대한 접속을 처리하는 것이다.



 
BLE 장치와 연결하는 안드로이드 앱에서 장치에 어떠한 속성 및 프로파일이 있는지 확인하기 위해서는 먼저 장치에 있는 GATT 서버와 연결을 통해 정보를 가져오는 첫 번째 작업이 이뤄져야 한다. GATT 서버는 BLE 장치 내부에 구현되어 있으며 안드로이드 앱과 통신을 통해 정보를 전달하게 된다. connectGatt라는 매소드를 사용하며 Context 객제, 자동 재접속을 설정하는 autoConnect parameter, BluetoothGattCallback에 대한 참조를 인자로 전달하게 된다.

다음 소스는 GATT에 대한 연결 처리 소스이다.
 


 


onCharacteristicRead 매소드는 GATT로 연결된 장치에 대한 세부 속성(ATT)를 읽어 들이는데 사용된다. 즉,
(1) BLE 장치와 안드로이드 폰과 연결됨
(2) 안드로이드 폰에 있는 앱에서 블루투스 GATT 연결
(3) GATT내에 어떠한 속성이 있는지 확인, 즉 세부 속성(ATT) 확인을 통해 세부 프로파일 확인
(4) 세부 속성에 대한 처리 루틴 확인 및 지정

과 같은 순서로 BLE 장치에 대한 기본 연결을 처리하게 된다.

다음 소스인 broadcastUpdate 매소드는 GATT 연결 후 세부적으로 어떠한 속성을 가진 장치인지 확인하는 내용이다.




BLE 장치에서 사용하는 ATT 프로파일의 종류 및 내용은 다음 URL에서 좀 더 자세하게 살펴볼 수 있다. 기본적으로 많이 사용되는 장치에 대한 프로파일은 대부분 정의되어 있는 것을 볼 수 있다.
https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicsHome.aspx

다음 소스는 GATT를 처리하는 내용에 관련된 소스다.





다음 소스는 BLE 장치 내부 속성을 읽는 방법에 대한 소스이다.





setCharacteristicNotification 매소드는 BLE 장치로부터 특정한 정보가 업데이트 됐을 때 처리할 수 있도록 하기 위해서 사용한다. 이 방법을 사용하는 이유는 BLE 장치에는 여러 가지 속성들이 있고, 이 속성들을 읽어서 처리하게 된다. 하지만 전원 소모 및 앱의 효율성을 위해서 필요에 따라서는 특정한 속성을 사용하거나 안하는 기능을 추가할 수도 있다. 이러한 경우에 특정 속성이 전달되면 앱 내에서 처리할 수 있도록 관리하기 위해 사용되는 기능이다.





앞에 setCharacteristicNotification 매소드로 설정한 값이 변경되어 전달됐을 때 실제 처리하는 매소드가 되겠다. 이 부분에서 변경된 값에 대한 처리를 하게 된다.



연결된 장치에 대한 해제를 통해 장치 사용을 마무리 한다.





지금까지 안드로이드 운영체제에서 BLE 장치와 연결하기 위한 기본적인 방법에 대해 살펴봤다. 다음에서 세부적으로 어떻게 동작하는지 살펴보도록 하겠다.


라영호 _ 테뷸라 대표



Copyright ⓒ 첨단 & automationasia.net



상호명(명칭) : ㈜첨단 | 등록번호 : 서울,아54000 | 등록일자 : 2021년 11월 1일 | 제호 : 오토메이션월드 | 발행인 : 이종춘 | 편집인 : 임근난 | 본점 : 서울시 마포구 양화로 127, 3층, 지점 : 경기도 파주시 심학산로 10, 3층 | 발행일자 : 2021년 00월00일 | 청소년보호책임자 : 김유활 | 대표이사 : 이준원 | 사업자등록번호 : 118-81-03520 | 전화 : 02-3142-4151 | 팩스 : 02-338-3453 | 통신판매번호 : 제 2013-서울마포-1032호 copyright(c)오토메이션월드 all right reserved