Beacon淺析


作者:hongbosun    

 

一、Beacon簡介   

  Beacon是基於BLE技術實現的物理設備。BLE(全稱Bluetooth Low Energy)是藍牙4.0技術規范的一部分。它起源於Nokia的Wibree技術,但最終被整合進了藍牙。這是一組與傳統藍牙不同的協議,被稱之為BLE低功耗協議。BLE以超低功耗的特點被熟知,具有很大的應用價值。目前在較新的智能終端同時支持傳統藍牙和BLE模式的設備。由於BLE的低功耗特點,Beacon只靠一顆紐扣電池就能運行很長時間。(當然一般情況下這種電池是不可拆卸的,耗盡電量之后就需要更換新的Beacon了。)

 二、Beacon工作原理

Beacon的工作原理是怎樣的呢?

  官方:Beacon設備使用BLE技術向周圍發送自己“特有的ID”,接收到該ID的應用軟件會根據接收到的ID和信號源產生互動。不同功率的BLE設備的信號范圍在10m~100m不等,當手機進入信號范圍時,能接收到信號源廣播的ID(UUID+Major+Minor), App通過解析接收到的ID向用戶推送通知或者其它資訊。

 

“特有的ID”是什么?

  先介紹下 BLE發送的信號結構:

  在BLE規范下,有兩種類型的信號波,我們分別叫做廣播報文和數據報文(網絡中交換傳輸數據的單元,我們一般稱之為報文)。

數據報文只能被連接中的兩個主、從設備所理解,廣播報文則可以廣播給多個偵聽設備或者只發送給某個特定的設備。廣播報文是間斷性發射信號的,這個時間間隔可以配置。

  Beacon使用的就是廣播報文。

               

                      圖1 廣播報文

               

                      圖2 傳輸實際信息數據格式

  在Beacon的廣播報文里,是以iBeacon+UUID+Major+Minor+TX power格式傳輸實際信息數據,如上圖。(UUID+Major+Minor) 組合作為唯一標識來區分beacon,也就是上文所說的“特有ID”的組成。舉個例子,海底撈連鎖部署beacon,那么所有門店將使用同一個UUID,各門店通過不同的Major值區分,店內的beacon如果位置不同則Minor 不同。

  Beacon的廣播報文里的TX power字段,用於確定你和beacon之間距離有多近。根據這個值不但可以獲得粗略的信息(比如靠近/遠離/不在范圍內等),也可以獲取精確到米的距離(當然你也可以轉換為以步為單位的距離)。實現方法如下:

  TX power(比如為0xC5=197,根據2的補碼測得256-197=-59dBm)是距離設備1米測得的信號強度值(RSSI接收到的信號強弱指標)。假如接收到的信號強度減弱了,那么我們可能在遠離。只要知道1米距離的RSSI,以及當前的RSSI(我們可以從接收到的信號中一塊獲取到這些信息),那么計算出當前的距離是可能的。IOS已經實現了個這個功能,對於其它平台需要自己手動編碼計算。這也解釋了使用Beacon定位功能的原理。

  蘋果家的i系列iBeacon正是Beacon的一種,iBeacon只能發送(UUID+Major+Minor)組合類型的廣播報文。

  Google推出的Eddystone也是Beacon的一種,不過Eddystone相較iBeacon的優勢在於它是開源並且還支持發送其他組合類型的廣播報文。有更豐富的利用價值。

  由於較新智能終端一般都支持BLE模式,所以iPhone/Android/MacBook/其它筆記本/樹莓派等設備都可以轉換成Beacon模擬器。

三、BLE協議棧

  協議棧是協議的具體實現形式,通俗的理解為用代碼實現的函數庫,以便於開發人員調用。

  Beacon是基於BLE技術實現的物理設備,那么Beacon開發主要是學習BLE開發。而BLE開發的重點就是學習BLE協議棧。整個BLE協議棧以lib庫的形式提供,BLE協議棧中的重點則是與具體藍牙應用相關的GAP和GATT,這兩層直接與應用程序打交道。

  BLE協議棧簡單了解,后面重點說一下GAP和GATT(以Android設備與BLE設備交互為例)。

             

                       圖3 BLE協議棧

  

  3.1、Physical Layer:任何一個通信系統,首先要確定的就是通信介質,BLE也不例外。在BLE協議中,“通信介質”的定義是由物理層Physical Layer(其它通信協議也類似)負責。

  3.2、Link Layer:負責在這些物理介質上收發數據,與此同時,控制物理介質收發相關的參數。可在兩個設備之間建立用於點對點通信的Logical Channel。

  3.3、HCI:定義Host和Controller之間的通信協議.

  3.4、L2CAP:一個介於應用程序(Profile、Application等)和Link Layer之間的協議。可以將Logical Channel換分為一個個的L2CAP Channel,以便提供應用程序級別的通道復用。

  3.5、ATT

  3.5.1、了解ATT前先了解下物聯網

  物聯網中傳輸的數據和傳統的互聯網有什么區別呢?拋開其它不談,物聯網中最重要、最廣泛的一類應用是:信息的采集。

  這些信息往往都很簡單,如溫度、濕度、速度、位置信息、電量、水壓、等等。

  3.5.2、ATT協議將這些“信息”以“Attribute”的形式抽象出來,並提供一些方法,供遠端設備讀取、修改這些屬性的值(Attribute value)。

  3.6、GAP:GAP定義了藍牙設備如何發現和建立與其他設備的安全或不安全的連接,其中具體包括:設備發現,創建連接,終止連接,安全結構的初始化和設備連接參數配置等。

 

        

                   圖4 android中BLE設備的連接流程

  在Android中對BLE設備操作實際上是對BluetoothGatt的操作,所以我們首先要想辦法獲取到BluetoothGatt。

  如圖經歷以下步驟獲取到BluetoothGatt。

  掃描設備->建立連接

  通過BluetoothManager的getAdapter()方法獲得BluetoothAdapter,然后再通過BluetoothAdapter的startSacn( LeScanCallback)的方法開始掃描設備。我們還需要實現LeScanCallback的回調方法。

  在其回調方法中會有這樣一個函數,onLeScan(BluetoothDevice, rssi, byte[])。當中的bluetoothDevice就是我們掃描的設備;rssi是int類型,代表設備的信號強度,是負的,數值越大代表信號強度越大;byte[]這個byte數組就是設備廣播的相關數據。

  3.7、GATT是一個在藍牙連接之上的發送和接收數據的通用規范。

             

                       圖5 GATT(Generic Attribute Profile)

  GATT是一個profile(更准確的說是profile framework)。 

  “Profile”是基於GATT所派生出的真正的Profile,位於GATT Profile hierarchy的最頂層,由一個或者多個和某一應用場景有關的Service組成。

  一個Service包含一個或者多個Characteristic(特征),也可以通過Include的方式,包含其它Service。

  Characteristic則是GATT profile中最基本的數據單位,由一個Properties、一個Value、一個或者多個Descriptor組成。

  Characteristic Properties定義了characteristic的Value如何被使用,以及characteristic的Descriptor如何被訪問。

  Characteristic Value是特征的實際值,例如一個溫度特征,其Characteristic Value就是溫度值就。

  Characteristic Descriptor則保存了一些和Characteristic Value相關的信息(比較抽象,后續文章會根據實例做進一步的理解)。

  以上除“Profile”外的每一個定義,Service、Characteristic、Characteristic Properties、Characteristic Value、Characteristic Descriptor等等,都是作為一個Attribute存在的。

  四、總結

  Beacon作為一種新型的位置感知技術,前景巨大。我們期盼着新技術未來的發展。

最后,分享一個 個人覺得較好的文章:微信搖一搖和Beacon  http://www.jianshu.com/p/df31b81280ad

  

   

 參考鏈接:

https://developers.google.com/beacons/

https://github.com/Estimote/Android-SDK

https://github.com/AltBeacon/android-beacon-library

http://estimote.github.io/Android-SDK/JavaDocs/com/estimote/sdk/eddystone/Eddystone.html

http://www.seekcy.com/wd5.html

http://www.tuicool.com/articles/JJbMZf

http://www.voidcn.com/blog/cwcwj3069/article/p-5775010.html

http://blog.csdn.net/zzfenglin/article/details/51706290

http://www.cnblogs.com/tracy-e/p/3495227.html

http://www.prnasia.com/story/147109-1.shtml

http://www.jianshu.com/p/13e55d2517b5

http://bupojung.github.io/blog/2015/12/04/ibeaconyuan-li-he-ying-yong/

https://www.zhihu.com/question/37290469

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM