본문 바로가기

Miscellaneous

iOS와 블루투스 프로그래밍

iOS에서 다른 애플 디바이스나 외부 장치 등과 인터페이싱하기 위해 블루투스를 사용한다.
블루투스는 비교적 근거리에 있는 장치들을 선 없이 연결해 명령이나 메시지 등을 주고
받거나 서로를 모니터링하도록 할 수 있는 기술이다. 최초의 아이폰에서는 전화를 걸거나
받을 수 있는 용도로만 제공됐지만(v2.0) 아이폰4에서는 데이터 교환도 가능한 블루투스
v2.1 A2DP라는 규격으로 배포되고 있다.

 

블루투스는 1994년에 에릭슨이라는 회사에서 최초로 발표한 근거리 무선통신 규약이다.
다른 표준 규약들이 발전하는 방식과 유사하게 블루투스 SIG(Special Interest Group)가
정식으로 발족했으며, 1999년 5월 20일에 공식적으로 배포됐다(IEEE 802.15.1) 블루투스 SIG에는
소니에릭슨, IBM, 노키아, 도시바 등의 전자제품 회사들이 참여하고 있다.

블루투스는 2.45Ghz의 대역폭을 사용해 통신을 하고 있으며, 현재 3.0 버전까지 나와 있다.
각 버전이 올라갈 때마다 속ㄷ조의 향상과 데이터 통신을 할 수 있게 되는 등 기능의 변화가 있었다.
1.0 버전은 각각의 회사별로 호환성에 문제가 있는 경우가 많이 있었으며, 속도를 논의할 단계가
아니었다. 2002년에 정식으로 배포된 1.1버전 부터 723.1kbps에 달하는 속도를 내게 됐고,
버전 2.0부터는 2.1Mbps라는 속도를 낼 수 있어서 음성이나 간단한 command 뿐 아니라 각 장치가
서로 데이터를 주고받을 수 있는 수준이 됬다.

iOS에서 사용되는 블루투스 프로파일
블루투스는 장치에 따라 지원하는 프로파일들이 따로 있다. 이 프로파일 들에 따라 지원하는 방식도
달라진다. <표 1은> iOS4에서 지원되는 블루투스의 프로파일 이다.

<표 1> iOS4에서 지원되는 블루투스 프로파일

각각의 프로파일은 다음과 같은 의미를 갖는다.

HFP(Hands-Free Profile)

일반적으로 핸즈프리를 지원하는 기기에서 사용되는 프로파일이다. 오직 음성만을 지원하며, 주로 자동차에 사용되는 블루투스 기기에서 사용된다. 현재 최신 버전은 1.5이며, iOS4에서 지원하고 있다.

PBAP(Phone Book Access Profile)

전화번호부에 접근하기 위한 프로파일이다. 아이폰에서 <홈> 버튼을 계속 누르고 있으면 시작되는 '음성명령'
애플리케이션 등이 PBAP를 지원하는 프로그램이다.

<화면 2> 아이폰 음성명령 애플리케이션

A2DP (Advanced Audio Distribution Profile)

헤드셋이나 스피커로 음악을 전송할 때 사용하는 프로파일이다. 아이폰3G와 iOS3 버전부터
이 방식이 지원되기 시작했다. 아이폰으로 음악을 들으려면 직접 화면을 보고 조절할 수 있다.

AVRCP(Audio / Video Remote Control Profile)

오디오 뿐만 아니라 비디오까지 컨트롤 할 수 있따. 아이폰 3G, iOS4.1 버전부터 지원 가능.

PAN (Personal Area Network Profile)

piconet이라고 불리기도 하는데, 최대 8개의 장치와 마스터-슬레이브로 연결될 수 있는 연결방식이다.
(IEEE 802.15에 정의 되어 있다). 일반ㅇ적으로 지원영역은 10m 정도이며, 기기간에 최대 100m까지
사용할 수 있다. 데이터 교환을 위해 필수적으로 지원돼야 하며, 초기 아이폰을 제외하고는 모두 지원된다.

HID (Human Interface Device Profile)

각종 키보드, 마우스, 게이밍 디바이스, 태블릿 등을 지원하는 프로파일이다. 아이폰 3GS 이상, IOS4
이상부터 지원되기 시작했다. 이 프로파일을 이용하면 블루투스 기보드를 아이폰이나 아이패드와 연결할
수 있다.

<화면 3> 일반적인 HID 연결 방식 (출처 : www.blutooth.com)

블루투스 프로그램 만들기

이제 블루투스의 특징을 이용해 Xcode 상에서 블루투스 프로그램을 만드는 방법을 알아보자.

블루투스의 특징을 활용한 아이폰 프로그램 중에 'Bump' 라는 앱이 있다. 이 앱은 아이폰끼리 서로
부딪힐 때 지정된 정보들을(명함, 연락처, 사진, 켈린더) 진동과 함께 전달한다. 우리도 이렇게
아이폰끼리 서로 부딪혔을 때 교환할 수 있는 프로그램을 만들어보자.

GameKit에 대해

아이폰으로 블루투스 프로그램을 하려면 여러가지 프레임워크 중에서 GameKit이라는 것을 사용해야 한다.
이름에 Game Kit라는 단어가 들어가 있어서 게임과 관련된 것이라고 생각할 수 있는데, 사실상 네트워크와
인터넷과 관련된 여러 가지 기능들을 모아둔 프레임워크라고 생각하면 된다.

<화면 4> GameKit

GameKit는 Game Center, Game Voice controller 와 Pear-to-peer Connectivity등을 담당하는 API를
제공해주는데, P2P 연결에 블루투스를 사용하게 된다.

GKSession 클래스가 ad-hoc 블루투스 또는 로컬 무선 네트워크를 관리해준다. 블루투스를 위해
GKPeerPickerController 객체를 사용해 다른 장치와의 연결 등을 담당한다.

세션의 연결

블루투스 장치들간의 연결은 <그림 1>과 같은 형태로 이뤄진다. 장치들은 Peer ID라는 정보를 갖고
있어 상대방과 연결하게 된다. 연결시에는 GKSession이라는 클래스를 사용한다.

<그림 1> 블루투스 장치들간의 연결

다른 블루투스 장치 탐색

장치를 서로 찾을 경우에도 session mode라는 초기화 방법을 이용한다.
만들게 될 프로그램이 서버로 동작할 수도 있고 클라이언트로 동작할 수 도 있다. 서로를 찾게 하는 동작은
동시에 발생시킬 수도 있고 차례대로 발생시킬 수도 있다. 서버 역할을 하게 되는 앱은 세션의 이름을
string이나 sessionID 형태로 다른 장치에게 알릴 수 있다. 이 때 클라이언트로 동작할 장치는 서버의
sessionID를 찾아서 페어링 한다.

<그림 2> 다른 장치를 찾을 경우의 동작

GameKit을 사용하면 각각의 장치를 16대까지 지원할 수 있지만 최소한으로 줄이는 것이 탐색기간을 줄이는
방법이다.

내부적으로 장치를 서버로 동작시키려면 GKSessionMode Server나 GKSessionModePeer의
initWithSessionID: displayName:sessionMode:를 사용한다. avaiable 속성을 YES/NO로 설정해
사용할 수 있다.

클라이언트가 연결하겠다는 신호를 보내면 ㅏ

 

반응형

'Miscellaneous' 카테고리의 다른 글

What is UPnP ???  (0) 2013.04.24
What is CIFS...  (0) 2013.04.23
UART란 무엇인가?  (0) 2013.01.14
DLNA에 대한 정리  (0) 2013.01.09
Router(라우터)란 ?  (0) 2013.01.08