1. 程式人生 > >藍芽beacon入門教程

藍芽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將部署在各種環境中,在物聯網時代,開發者通過了解它們的工作原理以及學習如何利用它們,將會受益良多!