藍牙beacon入門教程

  • 介紹
      2014年,許多組織開始着力開發藍牙beacon試點項目,到2015年,已經有許多公司開始嘗試利用部署好的藍牙beacon探索新的服務模式。據市場研究機構(ABI Research)預測,預計到2019年,beacon將有6千萬的市場佔有量。
      在大多數應用場景中,藍牙beacon主要用於室內定位。不論在商場,機場,辦公室,還是博物館,都可以利用這些位置信息來提供服務。在這些案例中,通過將藍牙beacon安裝在特定位置,然後利用智能手機上的APP與之交互,就可以達到定位的效果。有趣的是,目前市場上還出現了一種新的beacon應用,它們並不需要安裝在固定位置。未來我們還會看到更多涉及移動可穿戴beeacon的解決方案,例如Lighthouse,這是一種可穿戴beacon設備,可以用來定位有特殊需要的學生,並確保他們的安全。
      藍牙beacon使用了藍牙BLE技術,是藍牙BLE的諸多應用之一。

  • 藍牙beacon產品
    在這裏插入圖片描述
      如上圖所示,市面上已經出現了許多藍牙beacon產品,它們具有不同的形狀和大小,但都使用了藍牙BLE技術,並實現同樣的目的。

  • 廣播工作
    在這裏插入圖片描述
      BLE協議棧採用了分層結構,其中有一層稱爲GAP(Generic Access Profile),該層負責設備間的廣播,搜尋以及連接。搜尋過程涉及廣播設備和掃描設備。廣播設備以固定的間隔向外廣播數據包,這些數據包中的信息可以幫助掃描設備確定該設備是否是其感興趣的設備。
      Beacon設備也進行廣播,但是其它設備不需要與其進行連接。我們可以稱其爲廣播者(BLE規範中廣播者只廣播不接受連接請求)。手機應用只需要利用廣播包中的相關信息就可以實現定位的目的,因此不需要與beacon設備進行連接。下面我們將介紹beacon設備發出的廣播包所包含的詳細信息。

  • Beacon幀格式
      廣播數據包最多僅可以包含31字節數據,所以設計者必須慎重選擇需要包含的數據。藍牙SIG組織在Core Specification Supplement (CSS)文件中將這31個字節數據分成多個AD Type結構,每個AD Type都有相同的結構,分別爲長度字節,類型字節以及數據域。
      Beacon設備可以在一個或多個標準廣播數據包中編碼數據,傳遞信息。但是編碼原理可能有所差異,即幀格式不同。目前主流的三種幀格式分別爲蘋果公司的iBeacon,Radius Networks公司的AltBeacon以及谷歌公司的Eddystone。
      因此爲了與不同的beacon設備進行交互,應用開發者在開發beacon應用時需要了解對應設備的幀格式。

  • iBeacon幀格式
      在上述三種幀格式中,最廣爲人知的當屬蘋果公司的iBeacon。iBeacon使用了稱爲廠商數據字段的標準AD Type結構。如下圖所示,爲iBeacon的廣播包,按AD Type結構進行分割如下:
    在這裏插入圖片描述
      廠商數據字段的類型值爲0xFF,應用只要對其包含的信息進行解析,就可獲得需要的信息。
    在這裏插入圖片描述
      廠商數據字段的數據域前2字節爲公司識別碼。由藍牙SIG組織分配給各公司,指示後續數據的解碼方式。在上圖中,0x004C爲蘋果公司的ID。0x02指明該設備爲“proximity beacon”,該值在iBeacon設備中均爲0x02。UUID指明擁有該beacon設備的機構。主次字段用來編碼位置信息,通常主字段指明某個建築,而次字段指明在這棟建築中的特定位置。例如“倫敦中心商場,運動產品區”。發送功率字段幫助應用進行距離估算。有關iBeacon的詳細內容可以參考Getting started with iBeacon

  • AltBeacon幀格式
      AltBeacon幀格式與iBeacon類似,如下圖所示,更多詳細內容可以訪問AltBeacon
    在這裏插入圖片描述

  • Eddystone幀格式
      谷歌公司的Eddystone與iBeacon及AltBeacon有所不同。它沒用使用所謂的廠商數據字段,而是使用16位服務UUID字段以及服務數據字段。Eddystone還定義瞭如下圖所示的子類型,具體內容可以參考eddystone
    在這裏插入圖片描述

  • Beacon應用

    • 專用應用還是通用beacon瀏覽器?
        不同機構部署的beacon設備需要對應的應用與之交互,才能正確獲取需要的信息,爲用戶提供服務。例如在機場裏,當用戶通過某個beacon設備時,應用會向用戶提供航班信息等服務。
        由於不同beacon設備廣播數據的解碼方式不同,就需要特定的應用才能解析對應的beacon設備所發出的信息。谷歌開發的Eddystone可以廣播特定的URL,我們可以利用瀏覽器訪等訪問該URL,因此我們只需設計一個可以訪問URL的通用beacon應用就可以了。
    • API
        開發者在API方面有兩種選擇 。他們可以使用原生BLE API掃描和捕獲beacon設備的廣播包,或者使用beacon製造商提供的更高層的專用beacon API進行數據幀的解析。例如Radius Networks公司就提供了Android 庫進行AltBeacon的操作。開發者可以自由選擇合適的方式,不同方法有不同的優缺點,例如原生BLE API控制更加靈活,而第三方庫開發速度更快。
  • 我在哪裏?
      這個問題的回答有多種方式,確切的說,這個問題應該說成“beacon在哪裏?”我們可以用確切的GPS位置回答,也可以用描述性的語言如“倫敦中心商場運動產品區” 來回答。或者使用“在霸王龍旁邊”之類的語言。
    在這裏插入圖片描述
      iBeacon和AltBeacon不直接向外發送位置信息。應用需要以某種方式將UUID/Major/Minor (iBeacon) 或UUID/Beacon Code (AltBeacon)映射到本地數據。爲此我們可以使用多種方式,最簡單的幾種方式是:

  1. 查找手機本地數據庫;
  2. 查找遠程服務器數據庫;
  3. 參考本地數據庫同時在網絡條件適宜時與遠程數據庫進行同步。
  • 距離估算
    在這裏插入圖片描述
      估算用戶與某個beacon設備距離的標準方法是計算該beacon設備的信號強度,然後進行路徑損耗計算。信號強度稱爲RSSI,即接收信號強度標識。利用RSSI以及廣播包中的Tx功率值進行路徑損耗計算,並給出距離beacon設備一米的信號強度值。維基百科對此計算過程給出了更詳細解釋path loss calculations
      上述方法只能對距離進行粗略的估計,因爲環境條件對距離計算有顯著影響。如果需要更精確的距離計算可以使用射頻指紋技術。這種方法將位置與射頻信號特徵相結合,從而獲取更好的測量結果。國際計算機研究中心對此給出了相關介紹Radio Fingerprinting

  • 掃描
      Beacon應用會進行週期性地掃描並進行過濾,從而獲取感興趣的設備信息。掃描過程功耗較高,因此開發者需要避免進行長時間的掃描。掃描過程主要涉及兩個不同的參數配置。“掃描窗口”指明每次掃描持續時間,“掃描間隔”即爲兩次掃描間的時間。不同的平臺對此提供的API不同,但都可以概括爲這兩種。
      爲了確定以上兩個參數的大小,我們需要考慮beacon設備的廣播間隔。如果beacon設備2000毫秒廣播一次,那麼每100毫秒進行一次持續500毫秒的掃描是沒有意義的。因爲有時beacon設備並沒有發送廣播,此時進行掃描當然就白白浪費了。需要注意的一點是,從藍牙4.2開始,藍牙廣播就不再是確定的了,將會加入隨機延時以避免持續衝撞,因此開發者需要採用合適的方法同步掃描與廣播時序。

  • 消失的Beacon
      每次應用掃描的時候都會檢測到0至多個beacon設備,應用可能會連續多次掃描到同一個設備,因爲用戶要走出某一特定beacon設備的範圍,所花的時間要比廣播間隔長得多,廣播間隔往往只有幾百毫秒。
      當到達某一位置時,某個beacon設備會消失在搜索結果中,此時你的應用需要對此作出響應。應用可以認爲用戶已經走出該beacon設備的覆蓋範圍,但是這樣可能會出錯。因爲掃描不到某個beacon設備可能有多個原因,幾次掃描不到也並不意味着下次也掃描不到。也可能用戶走到某個障礙物後面導致信號衰減較大,從而掃描不到設備。當用戶走出障礙物附近時就可以再次接收到beacon設備信號。簡言之,用戶會一直在beacon設備附近,即使短時間內收不到廣播數據包。
      應用需要維護一個活動beacon列表,保存接近用戶的beacon設備。應用可以選擇在最近一次掃描不到設備時就將其移除活動列表或者在連續多次掃描不到設備時纔將其移除,又或者在掃描不到設備一段時間後將其移除。上述方法可以獲得更好的用戶體驗。

  • 藍牙,Beacon,Action!
      從beacon設備獲取位置信息後該怎麼做?這些都是與特定應用相關的。應用可以與用戶進行信息交互,例如展示附近的博物館展品信息。
    在這裏插入圖片描述
      如果你確實想要與用戶交互,你就需要獲取用戶信息,但是不要經常這樣做。因爲信息很容易激怒用戶,他們知道如何卸載應用程序!
      應用可以在後臺默默地工作,例如在機場追蹤用戶位置,幫助用戶獲取航班信息。我們需要尊重用戶隱私,只在用戶允許的範圍內與之交互。

  • 不要打擾
      用戶想要的東西因人而異。例如當一家人逛商場時,他們可能並不希望手機向其通知什麼商場特殊優惠活動,如果是一個人逛商場那他可能就需要了。應用開發者需要考慮到這一點,允許用戶關閉應用通知,獲得最優的用戶體驗。

  • 穿戴式beacon
      掃一眼穿戴式設備如智能手錶比從口袋裏拿出手機要方便的多。智能手錶可以安裝許多有趣的beacon應用。
    在這裏插入圖片描述

  • 開發自己的beacon
      開發者需要對其應用進行測試,這意味着在他們的測試環境中需要安裝beacon設備。開發者需要使用與其應用相對應的beacon設備,但是在此之前,爲了開發更加方便高效,我們最好使用可編程設備作爲測試beacon。例如使用樹莓派或者Intel Edison,它們可以達到與藍牙芯片商或模塊商所開發的專業藍牙開發板同樣的效果,編程和修改參數都非常方便。例如德州儀器開發的SensorTag可以很容易變成一臺beacon設備,而且不需要做任何複雜編程操作,同時它也提供了豐富的功能用於專業的藍牙開發。

  • 總結
      未來beacon將部署在各種環境中,在物聯網時代,開發者通過了解它們的工作原理以及學習如何利用它們,將會受益良多!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章