使用C++Builder Berlin Update 2開發BeaconFence 應用程式

BeaconFence在數個C++Builder/Delphi版本中就推出了, 我記得也在數年前的產品發表會中介紹過,當時Beaconfence身價不菲, 我也沒機會用. 但從Seattle版本後Embarcadero大幅降低 Beaconfence的價格, 而且提供開發人員版,所以才有機會試用它.

 

日前一位使用C++Builder的朋友向我抱怨Beaconfence只有Delphi的範例, 沒有C++Builder的範例, 他問我到底能不能用C++Builder開發Beaconfence? 能不能幫忙用C++Builder做一個Beaconfence的POC? 因此筆者特別商借了3個Beacon, 一個是插電式, 2個使用電池的Beacon:

upload1

upload2

upload3

藉由TBeaconMapFencing元件載入POC地點的佈建架構圖, ,再分別把3個Beacon設置在書房, 客廳和玄關處:

upload4

Berlin Update 2版Beaconfence我最喜歡的一點就是為TBeaconMapFencing元件加入了Extended Mode, 這個模式可以同時掃瞄iBeacon,AltBeacon和Eddystone 3種不同型式的Beacon, 又方便而且又穩定:

upload5

之後我們就可以藉由下面的C++程式碼根據使用者的喜好設定TBeaconMapFencing元件的地圖設定值:

void TfmMainForm::ChangeOption(TFencingMapOption AOption, bool ShouldInclude)

{

  TFencingMapOptions LOp = BeaconMapFencing1->MapOptions;

  if (ShouldInclude)

  {

  LOp << AOption;

  }

  else

  {

  LOp >> AOption;

  }

 

  BeaconMapFencing1->MapOptions = LOp;

}

最後實作TBeaconMapFencing元件的On PositionEstimated事件處理函式:

void __fastcall TfmMainForm::BeaconMapFencing1PositionEstimated(TPointF &AEstimatedPoint, TPointF &APointToPath)

{

  ShowStatus(AEstimatedPoint, APointToPath);

}

 

void TfmMainForm::ShowStatus(TPointF AEstimatedPoint, TPointF APathPoint)

{

  String LMapsInfo = “";

 

  for (int I = 0; I <  BeaconMapFencing1->ProjectInformation.Maps.Length; I++)

  {

  LMapsInfo = LMapsInfo + " Map:" + IntToStr(I) + " Act:" + IntToStr(BeaconMapFencing1->ProjectInformation.Maps[I].GetActiveBeaconsCount() );

  if (BeaconMapFencing1->ProjectInformation.Maps[I].NearestBeacon().BTBeacon != NULL)

    LMapsInfo = LMapsInfo + " dis:" + FormatFloat(“0.00″, BeaconMapFencing1->ProjectInformation.Maps[I].NearestBeacon().BTBeacon->Distance);

  }

 

  LbStatus->Text = IntToStr(GTimes) + " at " +

  FormatFloat(“0.00″, AEstimatedPoint.X) + " , " + FormatFloat(“0.00″, AEstimatedPoint.Y) +

    " (" + FormatFloat(“0.00″, APathPoint.X) + " , " + FormatFloat(“0.00″, APathPoint.Y) + “)" +

  " " + LMapsInfo;

  GTimes++;

}

把此範例App部署到筆者的HTC手機中執行並且在POC地點中行走時就可以看到此App能精確的在室入定位筆者的位置, 例如下圖是筆者在客廳中移動, 在接近設置在客廳的Beacon設備時BeaconFence的Beacon便變成綠色, 代表筆者就在此Beacon設備附近0.5公尺之內:

upload6

下圖則顯示筆者移動到書房時也能立刻且精準的定位筆者:

upload7

本文說明了使用C++Builder不但能完全沒問題的開發BeaconFence的應用, 而且充滿了樂趣.

廣告
  1. #1 by james on 2016 年 12 月 23 日 - 05:49:29

    只學到一件事,老大的家粉大…

  2. #2 by gordonliwei on 2016 年 12 月 23 日 - 10:34:08

    因為我住郊區, 不住大安區啊.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: