이 글에서는 다음 내용이 포함됩니다.

  • 비콘에 대해 소개합니다.
  • TBeacon 컴포넌트를 소개합니다.
  • 비콘에 대해 더 알아볼 수 있는 데모와 참고자료를 소개합니다.

 

이제 비콘 컴포넌트를 이용해 근거리 위치기반 서비스를 개발할 수 있습니다.

비콘(Beacon)은?

비콘은 일정 주기로 작은 데이터(일명 광고 데이터)를 주변으로 송출하는 장비입니다. 비콘이 제공하는 광고 데이터에는 "Manufacturer Specific Data(기업 고유 데이터)"를 포함합니다. 이 정보를 통해 주변의 블루투스 LE 장비는 페어링 및 접속 없이 비콘을 식별하고 거리를 계산할 수 있습니다.

 

이제 여러분은 비콘을 이용해 다음의 예시에서 볼 수 있는 근거리 위치기반 서비스를 개발할 수 있습니다.

  • 환자가 병원 방문 시 환자의 모바일기기가 비콘을 인식하고 접수대에 자동으로 방문을 알려줍니다.
  • 공장내의 위험지역에 작업자가 들어오면 작업자의 모바일기기에 위험을 통지하는 알람을 울리고, 방문로그를 남겨 시설관리자가 작업동선을 조정할 수 있어 사고를 사전에 방지할 수 있습니다.
  • 진열상품 근처에 고객이 다가오면 고객의 모바일 기기에 상품정보 또는 할인쿠폰 등을 전달하는 앱을 만들 수 있습니다.
비콘(iBeacon)에 대해서는 아래 링크에서 잘 설명하고 있습니다. 비콘을 좀 더 이해할 수 있는 자료여서 공유합니다.

비콘 컴포넌트(TBeacon)

 

RAD Studio에서 비콘을 인식하기 위해서 TBeacon 컴포넌트를 이용합니다.

❑ 비콘타입

비콘은 iBeacon과 AltBeacon 2종류의 표준(신호 형식)이 있습니다.

  • iBeacon : 애플 사에서 주도하는 비콘 표준입니다. iBeacon은 표준 모드로 간주됩니다.
  • AltBeacon : 대체 비콘이라고도 하는 오픈 표준입니다. 사양은 http://altbeacon.org에 공개되어 있습니다.
TBeacon에서는 Mode 속성을 통해 Standard(iBeacon), Alternative(AltBeacon)을 선택할 수 있습니다.

(참고로 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

YesC + 11Feature.png

iOS

YesC + 11Feature.png

Android

YesC + 11Feature.png

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)

BeaconDiscoveryDemo


?
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

한번에 윈도우, 맥, iOS, 안드로이드, 사물인터넷(IoT)을 개발할 수 있는

 

관련 글

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14387
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
» [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기 [1] Humphery 2015.04.15 3930
14 [XE8] 대화형 지도 컴포넌트로 구글맵과 애플 맵킷 한번에 사용하기 Humphery 2015.04.17 1647
13 [XE8] 모바일 튜토리얼 무료 다운로드(영문), 총 364페이지 관리자 2015.07.09 1530
12 [XE8] iOS 64bit 앱개발과 유니버설(armv7 + arm64) 앱개발 [1] Humphery 2015.04.13 1383
11 [XE8] 버전 컨트롤 시스템 IDE 통합(Mercurial 지원) [1] Humphery 2015.04.15 1373
10 [XE8] Getit(패키지 관리자) - 번거로운 컴포넌트 검색과 설치를 손쉽게 할 수 있습니다. Humphery 2015.05.28 1288
9 [XE8] 애플리케이션 외관을 멋지고 일관되게 적용할 수 있는 프리미엄 스타일(Radiant, Vapor 추가) Humphery 2015.05.19 1210
8 [XE8] 멀티-디바이스 미리보기: 다양한 디바이스 화면을 미리보며 최적화된 화면 개발하기 Humphery 2015.04.17 1128
7 [업데이트][XE8] RAD Studio XE8 업데이트1 [1] file Humphery 2015.06.23 993
6 [XE8] 오프라인에서 도움말을 볼 수 있습니다.(CHM 형식) Humphery 2015.04.17 923
5 [XE8] 번거로운 수작업을 줄여 핵심기능 개발에 집중할 수 있는 개발 생산성 향상도구 Humphery 2015.04.28 894
4 [업데이트][핫픽스][XE8] iOS 8 시뮬레이터 변경사항 대응 file Humphery 2015.05.11 877
3 [XE8] 네이티브 iOS 컨트롤 지원 Humphery 2015.04.13 813
2 [XE8] TAppAnalytics 컴포넌트로 앱의 사용량 수집, 분석해 사용성을 이해할 수 있습니다. file Humphery 2015.04.27 798
1 [XE8] IDE 설정값을 내보내고 불러올 수 있어, 일관된 IDE 설정을 유지할 수 있습니다. file Humphery 2015.07.28 564