공통 [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기
2015.04.15 01:22
이 글에서는 다음 내용이 포함됩니다.
- 비콘에 대해 소개합니다.
- TBeacon 컴포넌트를 소개합니다.
- 비콘에 대해 더 알아볼 수 있는 데모와 참고자료를 소개합니다.
이제 비콘 컴포넌트를 이용해 근거리 위치기반 서비스를 개발할 수 있습니다.
비콘(Beacon)은?
비콘은 일정 주기로 작은 데이터(일명 광고 데이터)를 주변으로 송출하는 장비입니다. 비콘이 제공하는 광고 데이터에는 "Manufacturer Specific Data(기업 고유 데이터)"를 포함합니다. 이 정보를 통해 주변의 블루투스 LE 장비는 페어링 및 접속 없이 비콘을 식별하고 거리를 계산할 수 있습니다.
이제 여러분은 비콘을 이용해 다음의 예시에서 볼 수 있는 근거리 위치기반 서비스를 개발할 수 있습니다.
- 환자가 병원 방문 시 환자의 모바일기기가 비콘을 인식하고 접수대에 자동으로 방문을 알려줍니다.
- 공장내의 위험지역에 작업자가 들어오면 작업자의 모바일기기에 위험을 통지하는 알람을 울리고, 방문로그를 남겨 시설관리자가 작업동선을 조정할 수 있어 사고를 사전에 방지할 수 있습니다.
- 진열상품 근처에 고객이 다가오면 고객의 모바일 기기에 상품정보 또는 할인쿠폰 등을 전달하는 앱을 만들 수 있습니다.
비콘 컴포넌트(TBeacon)
RAD Studio에서 비콘을 인식하기 위해서 TBeacon 컴포넌트를 이용합니다.
❑ 비콘타입
비콘은 iBeacon과 AltBeacon 2종류의 표준(신호 형식)이 있습니다.
- iBeacon : 애플 사에서 주도하는 비콘 표준입니다. iBeacon은 표준 모드로 간주됩니다.
- AltBeacon : 대체 비콘이라고도 하는 오픈 표준입니다. 사양은 http://altbeacon.org에 공개되어 있습니다.
(참고로 iBeacon을 애플에서 주도해 iOS에서만 사용할 수 있다고 생각할 수 있지만 모든 플랫폼에서 지원합니다.)
❑ 비콘 등록
비콘에서 제공하는 광고데이터를 받기위해서는 TBeacon 컴포넌트에 비콘의 정보를 등록해야 합니다.
MonitorizedRegions 속성을 통해 UUID, Major, Minor를 등록합니다.(UUID, Major, Minor 값은 비콘 제조사의 전용앱을 통해 설정할 수 있습니다. 기본 값은 제조사 웹사이트 등을 통해 안내합니다.)
- UUID : 비콘의 그룹을 식별할 수 있는 고유 식별자
- Major, Minor : 개별 비콘을 식별할 수 있는 값. 특정 UUID로 지정되는 지역 내부 영역을 식별합니다. Major는 UUID로 정의되는 지역의 부분영역을 식별합니다. Minor는 Major 영역의 더 작은 부분을 식별합니다.
❑ 비콘 컴포넌트 이벤트
다음 이벤트를 통해 비콘의 동작을 알 수 있습니다.
- OnBeaconEnter : 새로운 신호 영역에 들어갈 때마다 발생합니다.
- OnBeaconExit : 비콘 지역에서 나올 때마다 발생합니다.
- OnBeaconProximity : 근접 ( Proximity )의 값이 변경 될 때마다 발생합니다.
레벨 값 설명 Inmediate
1 0.5 m 미만 Near
2 0.5 m 이상 1.5 m 이하 Far
3 1.5 m보다 먼 Away
4 판정 불능
- OnCalcDistance : 거리 ( Distance )가 계산되기 직전에 발생합니다.
- OnEnterRegion : 등록 된 지역에서 비콘에 처음 도달 가능하게 될 때 발생합니다.
- OnExitRegion : 지역에 등록 된 모든 신호가 도달 불능이되었을 때 발생합니다.
❑ 플랫폼 지원
플랫폼 | 지원 상황 |
---|---|
Windows |
|
Mac OS X |
|
iOS |
|
Android |
|
Windows 플랫폼에서는 광고 데이터에 엑세스 할 수 없기 때문에 비콘 API를 사용할 수 없습니다.
→ 더 자세한 내용은 엠바카데로 기술문서: Using Beacons(한글번역)에서 확인하세요.
* RAD 스튜디오 10.1 베를린 부터 윈도우 10에서 비콘을 지원합니다.
- 자세히 보기: http://docwiki.embarcadero.com/RADStudio/Berlin/en/What%27s_New#Bluetooth_LE_and_Beacon_Support_on_Windows_10
비콘 데모 소개
❑ RAD Studio XE8 기본샘플
RAD Studio XE8 설치 시 제공되는 기본샘플에서 비콘 데모를 확인할 수 있습니다.
Object pascal : C:\Users\Public\Documents\Embarcadero\Studio\16.0\Samples\Object Pascal\Mobile Samples\Device Sensors and Services\Bluetooth\Beacons
CPP : C:\Users\Public\Documents\Embarcadero\Studio\16.0\Samples\CPP\Mobile Samples\Device Sensors and Services\Bluetooth\Beacons
❑ Beacon Proximity Demo(Sarina DuPont)
델파이 시니어 프로젝트 매니저 Sarina DuPont가 제공하는 샘플입니다.(http://community.embarcadero.com/index.php/blogs/entry/building-proximity-aware-application-with-rad-studio-xe8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
unit BeaconForm; interface uses System . SysUtils, System . Types, System . UITypes, System . Classes, System . Variants, FMX . Types, FMX . Controls, FMX . Forms, FMX . Graphics, FMX . Dialogs, System . Beacon, System . Beacon . Components, FMX . StdCtrls, FMX . Controls . Presentation, FMX . ListBox, FMX . Layouts; type TBeaconDiscoverForm = class (TForm) StartDiscoveryBtn: TButton; CancelDiscoveryBtn: TButton; Timer1: TTimer; Label1: TLabel; BeaconDistance: TLabel; ToolBar1: TToolBar; Label5: TLabel; BeaconDiscoveryList: TListBox; ListBoxGroupHeader1: TListBoxGroupHeader; ListBoxItem1: TListBoxItem; ListBoxItem2: TListBoxItem; ToolBar2: TToolBar; Beacon1: TBeacon; procedure StartDiscoveryBtnClick(Sender: TObject); procedure CancelDiscoveryBtnClick(Sender: TObject); procedure Beacon1BeaconProximity( const Sender: TObject; const ABeacon: IBeacon; Proximity: TBeaconProximity); procedure Timer1Timer(Sender: TObject); procedure Beacon1BeaconEnter( const Sender: TObject; const ABeacon: IBeacon; const CurrentBeaconList: TBeaconList); private { Private declarations } FBeacon : IBeacon; public { Public declarations } end ; var BeaconDiscoverForm: TBeaconDiscoverForm; implementation {$R *.fmx} {$R *.LgXhdpiPh.fmx ANDROID} {$R *.iPhone47in.fmx IOS} {$R *.Macintosh.fmx MACOS} procedure TBeaconDiscoverForm . Beacon1BeaconEnter( const Sender: TObject; const ABeacon: IBeacon; const CurrentBeaconList: TBeaconList); begin if ABeacon <> nil then ; end ; procedure TBeaconDiscoverForm . Beacon1BeaconProximity( const Sender: TObject; const ABeacon: IBeacon; Proximity: TBeaconProximity); begin if Proximity = TBeaconProximity . Near then begin FBeacon := ABeacon; Label1 . Text := 'Beacon: ' + FBeacon . GUID . ToString+ ' Major:' +FBeacon . Major . ToString+ ' Minor:' +FBeacon . Minor . ToString; end ; end ; procedure TBeaconDiscoverForm . StartDiscoveryBtnClick(Sender: TObject); begin Beacon1 . StartScan; Timer1 . Enabled := True ; end ; procedure TBeaconDiscoverForm . CancelDiscoveryBtnClick(Sender: TObject); begin Beacon1 . StopScan; Timer1 . Enabled := False ; end ; procedure TBeaconDiscoverForm . Timer1Timer(Sender: TObject); begin if FBeacon <> nil then BeaconDistance . Text := FBeacon . Distance . ToString + 'm' ; end ; end . |
소스 다운로드: http://cc.embarcadero.com/item/30188
관련 글
- [데브기어 기술사이트] RAD Studio XE8 새로운 기능 소개 목록보기
- 엠바카데로 기술문서 : Using Beacons(한글번역)
다음 링크에서 따라하기를 통해 비콘 컴포넌트 사용법을 익힐 수 있습니다.
비콘을 위험지역에 설치 후 비콘신호를 받은 경우 경보음을 울리는 "위험지역 감지앱"을 따라하기로 학습할 수 있습니다.
http://tech.devgear.co.kr/delphi_news/413402