배너
닫기

산업동향

배너

스마트폰을 품은 하드웨어...블루투스 연결장치 개발과 프로그래밍

  • 등록 2015.05.28 11:44:30
URL복사

안드로이드 운영체제-블루투스 연결장치 개발과 프로그래밍 (3)



안드로이드 운영체제 4.3 버전부터는 BLE(Bluetooth Low Energy)에 대한 지원을 하고 있어 쉽게 안드로이드와 아이폰에 호환되는 앱세서리 장치를 개발할 수 있게 되었다. 아이폰에서와 마찬가지로 BLE에 관련된 프로파일 및 연결 방식은 동일하게 다루어지나 그 차이에 대해서는 좀 더 살펴볼 필요가 있다. 지금부터 안드로이드 운영체제에서 어떠한 방식으로 BLE 장치에 대한 프로파일을 관리하고 운영하는지에 대해 살펴보도록 하겠다.


윈도우폰 관련 스마트폰 앱 개발과 윈도우 임베디드CE 관련 장치를 개발했었고 이제는 앱 및 MEMS 센서 및 임베디드 시스템을 개발하는 전문 업체를 운영하고 있다. 개인 블로그( www.embeddedce.com)를 통해 임베디드 시스템 개발에 대한 다양한 생각과 방법론을 함께 생각해 보고자 노력 중이고 오픈 하드웨어, 오픈소스를 이용한 새로운 프로젝트를 기획 중이다.


지난호에서 BLE의 구성 및 내용에 대해서 살펴봤다. BLE 장치와의 통신은 다음과 같은 순서를 통해 연결이 되고 필요한 정보를 전달받게 된다. 여기서 GATT는 BLE 장치에 내장되어 있는 장치가 어떠한 데이터를 전달해 줄 것인가, 데이터는 어떠한 형식인가를 정의해 주는 프로파일 역할을 하게 된다.


따라서 GATT를 이용하여 장치의 세부 속성을 정의하고 통신에 사용하게 된다. 그림 1은 하나의 GATT(Generic Attribue)프로파일에 포함되어 있는 세부 속성 및 내용을 보여주는 그림이다.


그림 1. BLE 장치에서 GATT의 역할


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


오늘은 실제적으로 어떻게 이 GATT를 통하여 장치와 연결을 하고 구성하는지에 대해 살펴보도록 하겠다. 하지만 그에 앞서 BLE 장치가 어떠한 기술적인 배경에 있는지 다시 한 번 살펴보도록 하겠다. BLE 장치의 특성을 제대로 파악해야지만 BLE에 관련된 개발을 더 잘할 수 있기 때문이다.


BLE 장치는 매우 단순한 상태 구조를 가지고 있다. 그림 2는 BLE 장치의 상태 변이 과정을 보여준다.


그림 2. BLE 장치의 상태변이 다이어그램


■ ‌대기상태(Standby) - BLE 장치는 초기화 이후 대기 상태와 탐색(Scanning)를 반복하게 된다.


■ ‌광고상태(Advertising) -BLE 장치는 스마트폰과 연결하기 위해서 주기적으로 장치에 대한 정보를 전송한다. 애플의 아이비콘은 1초에 한 번씩 광고 패킷을 전송, 다른 장치들 역시 비슷한 주기로 장치에 대한 정보를 전송하게 된다.


■ ‌연결상태(Connection) - BLE 장치는 장치의 역할에 따라 클라이언트/서버로써 역할을 할 수 있다. 일반적인 앱세서리 장치는 클라이언트로 역할을 하고 스마트폰은 서버로써의 역할을 하며 연결이 이루어지게 된다. 내부에 있는 장치에 따라, 앱세서리 장치의 역할에 따라 서버로써 혹은 클라이언트로써 역할을 준비하고 연결 및 통신하게 된다.


BLE의 장점은 빠른 연결 및 저전류 소비에 있다. 기존의 블루투스에 비해 적은 용량을 가지고 있는 작은 코인 형태의 배터리를 장착하고도 오랜 시간(2~3년) 사용할 수 있는 것이다. 그 특성을 보면 다음과 같이 확인할 수 있다.


- 20mA이하의 최대 소비 전류
- 5uA의 평균 소비 전류
- 1uA의 대기 전류


또한 BLE 장치는 기존의 블루투스 장치처럼 많은 양의 데이터나 음성을 전달할 수 있도록 구성하는 것이 아니라 작은 크기의 송수신 패킷을 사용하여 통신을 하기 때문에 효율적으로 전류를 소비할 수 있도록 구성하는 것이다.


단순한 계산이지만 BLE는 다음과 같은 정책을 사용하고 있다.


- 작은 크기의 송신 데이터는 전송에 필요한 최대 전류 소비를 줄일 수 있다.
- 작은 크기의 수신 데이터는 수신에 필요한 전류 소비를 줄일 수 있다.
- 통신 채널의 크기를 줄여서 통신 탐색과 연결에 필요한 시간을 줄인다.
- 상태를 변이를 단순화 하고, 하나의 프로토콜을 사용하여 동작을 단순화한다.
- 최대 전송 속도는 1Mbps이나 파일 전송과 같은 형태의 통신은 지원하지 않음


그림 3은 BLE에서 사용하는 통신 채널 및 주파수의 할당 상태를 보여준다. BLE의 경우 총 37개의 데이터 통신을 위한 주파수와 3개의 광고 채널을 통해 운영이 된다.


그림 3. BLE의 통신 채널


 BLE 장치 프로그래밍


지금부터는 BLE 장치의 하나인 TI(Texas Instrument)사의 센서태그(SensorTag)라는 장치를 사용하여 어떻게 안드로이드에서 프로그래밍 하는지에 대해 살펴보도록 하겠다. 센서태그 장치는 개발용 장치로 저렴한 가격에 구매하여 테스트 할 수 있도록 기능을 제공하고 있다. 우선 내부에 각종 센서를 내장하고 있으며 케이스까지 있는 형태이기 때문에 초보자들이 BLE에 관련된 프로그래밍을 시작하기 위해 좋은 시작점이 될 수 있다.


그림 4. 센서태그 그림


그림 5. 센서태그의 내부 그림




센서태그는 CC2541이라는 블루투스 컨트롤러를 내장하고 있으며 가속도 센서, 지자기 센서, 압력 센서, 자이로 센서, 온도 센서등 다양한 센서를 내장하고 있다.


그럼 지금부터 어떻게 안드로이드 앱을 통하여 센서태그 장치와 통신을 하는지 살펴보도록 하겠다.


리스트1-블루투스 관리자 초기화


리스트2-각 장치에 대한 UUID


우선 지난호에 설명한 것처럼 블루투스 장치에 대한 초기화 작업을 프로그램 초기에 시작하게 된다. 안드로이드 불루투스 통신을 위해서는 먼저 장치에 대한 탐색이 이루어지고 연결을 통해 통신이 이루어 저야 한다. 안드로이드 4.3 버전 이전에는 BluetoothAdapter.getInstance() 매소드에 의해 바로 접근이 가능했지만 현재는 BluetoothManager를 통해서 접근해야 한다는 차이점이 있다.


리스트3-장치 검색 및 연결


리스트4-센서태그 장치 내 센서 활성화 코드


센서태그 장치에는 여러 센서들이 있고 이 센서들을 접근하기 위해서는 앞에서 설명한 것처럼 GATT에 의해 접근을 해야 한다. 각 장치에 대한 정보는 UUID 형태로 정의되어 있으며 자세한 내용은 리스트 2와 같다.


다음은 안드로이드 앱에서 센서태그 장치를 검색하여 연결하는 것이다. 센서태그에 대한 장치에 대한 검색이 마무리되면 콜백 형태로 연결 처리를 하게 되며, 센서태그 내부에 있는 센서에 대한 세부 GATT 정보를 읽어 들여 통신을 하게 된다.


리스트5-센서 노티피케이션 설정



리스트6-연결 처리 소스


센서태그에 내장된 센서를 이용하기 위해서는 각 센서에 대한 활성화를 시켜야 한다. 다 소스는 GATT내부에 정의된 정보에 따라 센서를 활성화 시키는 역할을 하다. 각 센서는 현재 센서의 값과 센서를 설정할 수 있는 설정 값을 가지고 있다. 센서는 기본적으로 꺼진 상태로 구성되어 있으며 아래 소스에 의에 동작하도록 구성할 수 있다. 이렇게 구성하는 이유는 전원 절약을 위해 센서는 끄고/켜는 작업을 자유롭게 하기 위해서다. 


또한 센서태그와의 프로그래밍에서 중요한 요소는 노티피케이션(Notification)이다. 이 기능은 자동으로 일정 시간마다 센서태그에서 스마트폰으로 센서의 정보를 전달해 주는 기능이다. 따라서 주기적으로 읽어올 필요 없이 자동적으로 센서의 정보를 받아 처리할 수 있도록 기능을 제공하고 있다. 앱에서 ENABLE_NOTIFICATON_VALUE 속성을 설정하는 것에 의해 사용할 수 있다.


노티피케이션에 대한 처리는 두 단계로 이루어진다. 첫번째는 안드로이드 API를 사용하여 앱에서 장치에서 전달받은 노티피케이션 정보를 받을 수 있는 상태로 만드는 것이고, 두번째는 센서태그 장치에서 노티피케이션을 통해 센서 정보를 주기적으로 전달하도록 설정하는 것이다. 원격 노티피케이션 활성화를 통해 센서테크 장치에서 노티피케이션을 처리하도록 구성하는 것이다.


리스트7-데이터 레코드 업데이트 소스


리스트8-온도 데이터 처리


다음 소스는 센서태그와 연결을 위해 사용하는 OnLeScan이라는 메소드의 소스다. BLE 장치를 검색하고 검색된 정보를 adRecord라는 매소드를 통해 List에 저장하게 된다. 저장된 정보는 연결을 위해 사용하게 된다.


- 정보를 저장하기 위해 사용하는 AdRecord의 소스
- 센서태그에서 온도센서로부터 전달받은 데이터를 처리하는 소스

.
지금까지 안드로이드에서 어떠한 형태로 BLE 장치와 통신하는지에 대해 살펴봤다. 다음에는 실제 어떠한 정보가 전달되고 사용되는지에 대해 좀 더 살펴보도록 하겠다.


라영호 _ 테뷸라 대표









배너










주요파트너/추천기업