iBeacon工作原理(How do iBeacon work?)

http://blog.csdn.net/qinxiandiqi/article/details/39004337?utm_source=tuicool




-----------------------------------------------------------------------------------------------------------------------

原文作者:Adam Warski

原文地址:http://www.warski.org/blog/2014/01/how-ibeacons-work/

譯文作者:Jianan - [email protected]

版本信息:本文基於2014-09-02版本進行翻譯

版權聲明:本文經原作者許可進行翻譯,保留所有權利,未經許可不得複製和轉載。

-----------------------------------------------------------------------------------------------------------------------


iBeacon是最近非常火的話題。這種技術能夠實現室內定位,讓你的手機能夠知道是否處於一個Beacon的範圍內。使用這種技術能夠產生很多應用程序:比如幫助你在停車場中找到你的汽車,或者在零售店中根據所處位置提供優惠券或者其它一些位置相關的服務。還有很多我們現在無法想象得到的應用程序。


現在有很多種關於iBeacon是什麼,以及我們可以如何使用它們的解釋。然而從技術角度上來說,它們是如何工作的?底層的技術使用的使用Bluetooth LE,因此。。。


What is Bluetooth LE?(什麼是Bluetooth LE,簡寫BLE)


Bluetooth Low Energy(BLE)是2010年發佈的藍牙4.0技術規範的一部分。它起源於2006年Nokia的Wibree技術,但最終被整合進了藍牙。這是一組與傳統藍牙不同的協議,並且使用的設備上也不會向後兼容。因此,現在市面上你可以看到三種類型的設備:

1.Bluetooth設備:只支持傳統藍牙的設備。

2.Bluetooth Smart Ready設備:同時支持傳統藍牙和LE模式的設備。

3.Bluetooth Smart設備:只支持LE模式的設備。


最新的手機(iPhone 4s+, SG3+)、筆記本、平板電腦等,基本上都已經支持藍牙4.0,也就是Bluetooth Smart Ready設備。Beacon,從另一方面來說,這種設備只支持low energy protocols(LE低功耗協議),屬於上面說所的“Bluetooth Smart”設備,這也是它們靠一顆鈕釦電池就能運行很長時間的原因。老式設備,比如外設、汽車系統、舊手機等通常只支持傳統藍牙協議。


BLE最重要的特點當然在於它的低能耗。舉個例子,一些beacon設備靠一顆微型電池就能夠持續發送一個信號兩年左右(這種電池一般是不可拆卸的,你可能需要在beacon停止工作之後替換一個新的beacon)。傳統藍牙和LE藍牙使用的都是相同的波段(2.4GHz-2.4835GHz)。BLE協議的傳輸速率比較低,因此除了用於發現設備和做一些簡單通信之外,不太適合用於傳輸大量的數據流。在協議條款上,LE和傳統藍牙的信號都能夠覆蓋到100米的範圍。


How does BLE communication work?(BLE設備如何通信)


BLE的通信包括兩個主要部分:advertising(廣告)和connecting(連接)。


廣告(Advertising)是一種單向的發送機制。想要被搜索到的設備可以以20毫秒到10秒鐘的時間間隔發送一段數據包。使用的時間間隔越短,電池消耗的越快,但設備被發現的速度也就會快。數據包長度最多47個字節,由以下部分組成:


    1 byte preamble(1字節做報頭)

    4 byte access address(4字節做地址)

    39 bytes advertising channel PDU(39個字節用於PDU數據包)

    3 bytes CRC(3個字節用於CRC數據校驗)



對於廣告通信信道,地址部分永遠都是0x8E89BED6。對於其它數據信道,地址部分由不同的連接決定。


返回的PDU數據也擁有自己的數據報頭(2個字節:聲明有效載荷數據的長度和類型——設備是否支持連接等等)和當前有效載荷數據(最多37個字節)。


最終,有效載荷數據中的頭6個字節是設備的MAC地址,所以實際信息數據最高可佔31個字節。


BLE設備可以運行在單一的不可連接的廣告模式中(在這種模式下所有的信息都包含在廣告數據包中),然而設備也是允許運行在可被連接的模式下(通常情況下都是這種模式)。


當設備被發現之後,一個連接就會被建立起來。之後就可以讀取BLE設備提供的Service,以及每個Service的characteristic(屬性,類似於GATT Profile實例)。每一個characteristic都會提供一些值,這些值可以被讀取或者修改。例如,一個小型溫控器可以開放一個service用於獲取當前的溫度或者溼度讀數(相當於是service的characteristic),同時也可以開放其它的service和characteristic用於設置期望的溫度。這裏因爲beacon不使用連接模式,我將會跳過這些細節。如果你想要了解更多關於連接BLE設備的內容,可以參考Apple's Core Bluetooth guide,儘管你可能不是一個iOS開發者。更多相關技術性的文章,可以參考Introduction to BLEMaking the most out of BLE Advertising mode


How do beacons use BLE?(beacon設備如何使用BLE)


Beacon設備只使用了廣告通信信道。正如beacon(信標、燈塔)的字面意思,這種設備以一定的時間間隔發送數據包,並且發送的數據被可以被像手機這樣的設備獲取。也就是說,iBeacon只是BLE廣告模式的一種簡單的使用,並在此基礎上提供了對ios的一些附加支持。


如果你試着攔截一段iBeacon廣告數據包,例如下面從Estimote beacon截獲的數據包:


[plain] view plain copy
  1. 02 01 06 1A FF 4C 00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D 00 49 00 0A C5  

(截獲以上數據,如果你使用的Mac設備,你可以參考additional XCode download爲XCode添加藍牙掃描和數據包打印工具。如果是Window設備,請參考這裏


以上的數據已經將廣告數據包的報頭、修正地址、廣告PDU數據包的報頭和其中的MAC地址部分都移除掉了,也就是說這部分數據只包含了實際信息數據——一共30個字節,符合實際信息數據最多31個字節的限制。


那麼一個iBeacon設備的BLE廣告數據是如何組成的?以下是Apple修正的數據格式,整理如下(也可以參考這裏):


[plain] view plain copy
  1. 02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)  
  2. B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)  
  3. 00 49: major  
  4. 00 0A: minor  
  5. C5: 2’s complement of measured TX power  



根據這些原理,如果你想要實驗beacon的功能,你不必需要一個真正的beacon設備。如果你有最新的手機(例如iPhone4S+,SG3+)或者配備藍牙4的筆記本(例如Retina MacBook),你可以將這些設備轉換成iBeacon發送設備和接收設備。以iPhone爲例,你可以在AppStore上下載“Locate iB”應用。對於MacOS,可以參考這裏。當然你可以可以使用樹莓派


Breaking down the iBeacon format(解析iBeacon的數據格式)


除了修正的iBeacon前綴數據(02 01 ... 15),其它各部分數據各代表什麼?


Proximity UUID(上面例子中的B9 ... 6D部分):這是將你所有的beacon與其他人的beacon設備區別開的id!例如,目前在商店裏某個區域分佈着多個beacon形成一條“鏈帶”,用於爲顧客提供特定的服務,那麼歸屬於同一條“鏈帶”的beacon將分配到相同的proximity UUID。爲這條“鏈帶”設計的專用應用程序將會在後臺使用這個UUID掃描到這條“鏈帶”中的beacon設備。


major編號(2個字節,上面例子中爲0x0049,也就是73):用於將相關的beacon標識爲一組。例如,一個商店中的所有beacon將會分配到相同的major編號。通過這種方式,應用程序就能夠知道顧客位於哪一家商店。


minor標號(也是2個字節,上面例子中爲0x000A,也就是10):用於標識特定的beacon設備。例如一個商店中的每一個beacon設備都擁有唯一的minor編號,這樣你才能夠知道顧客位於商店中的哪個位置。


Measuring distance(測量距離)


最後一個值,TX power,用於確定你和beacon之間距離有多近。根據這個值不但可以獲得粗略的信息(比如靠近/遠離/不在範圍內等),也可以獲取精確到米的距離(當然你也可以轉換爲以步爲單位的距離)。那麼如何實現?


TX power(上面例子中爲0xC5=197,根據2的補碼測得256-197=-59dBm)是距離設備1米測得的信號強度值(RSSI- Received Signal Strength Indication,接收到的信號強弱指標)。假如接收到的信號強度減弱了,那麼我們可能在遠離。只要知道1米距離的RSSI,以及當前的RSSI(我們可以從接收到的信號中一塊獲取到這些信息),那麼計算出當前的距離是可能的。IOS已經實現了個這個功能,對於其它平臺需要自己手動編碼計算,可以參考這裏


譯註:Java代碼粗略計算距離代碼:

[java] view plain copy
  1. protected static double calculateAccuracy(int txPower, double rssi) {  
  2.   if (rssi == 0) {  
  3.     return -1.0// if we cannot determine accuracy, return -1.  
  4.   }  
  5.   
  6.   double ratio = rssi*1.0/txPower;  
  7.   if (ratio < 1.0) {  
  8.     return Math.pow(ratio,10);  
  9.   }  
  10.   else {  
  11.     double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;      
  12.     return accuracy;  
  13.   }  
  14. }     

然而,在實際應用中,由於人體或者其它通信阻礙物都有可能削弱信號,因此這個距離只是一個估算值。


IOS integration(IOS整合)


IOS已經整合了iBeacon。當你進入beacon的範圍內,你的應用程序就可以接收到通知,即使你的應用程序處於在後臺也能接收到。一個應用程序可以註冊一個區域的進入或者退出事件,因此即使應用程序沒有運行也可以被喚醒。爲了響應這些事件,應用程序可以發送例如本地推送通知,提示用戶打開應用程序查看商店的促銷廣告(這些促銷廣告可以從網絡上面獲取),或者是其它相關的內容。


更準確的說,當手機處於不活動狀態時,也就是IOS進入了低電量監控模式的時候,只有iBeacon區域進入/退出事件能夠被接收到。當手機和應用程序處於活動狀態,你可以進入ranging模式,這個能夠讓你檢測的信號強度和估算距離更加準確。


注意你的手機檢測beacon需要花費一定的時間。首先,beacon設備是間隔一定的時間才發送一次廣告。其次,如果你的手機處於非活動模式,它只在有些時候纔會檢測藍牙信號。一個beacon設備要被檢測到,上面兩段工作時間就需要有交集。實踐證明,它可能需要15分鐘才能檢測到一個beacon設備。


按步驟開發一個iOS iBeacon應用程序可以參考這裏。Beacon的製造商通常也會提供SDK幫助開發Beacon應用程序。參考Estimote的iOS SDK 和Android SDK


How can I get some beacons?(如何獲取Beacon設備)


Beacon設備資源現在比較稀少,你通常需要等上幾個星期才能拿到貨,但可以肯定的是將來這種情況會改善。


因此,最快的選擇就是創建一個Beacon模擬器:將iPhone/Android/MacBook/其它筆記本/樹莓派轉換成了Beacon模擬器。


第二種選擇就是試着去訂購一些Beacon設備了:


    pre-order Estimote beacons; 3 for $99

    Kontakt beacons come in a couple of packages; 4 for $99, 10 for $279

    RaspberryPi kits from RadiusNetworks: 1 for $99

    RedBearLab offers BLE shields for Arduino for $30

    Bleu sells USB-iBeacon dongles. 1 for $40, 5 for $150


Alternatives(替代品)


iBeacon不是唯一一種基於BLE近距離技術開發的設備。高通同樣正在開發自己的Beacon——Gimbal,並集合了iOS和android SDK。它們提供的功能比較類似,但是BLE廣告的數據格式可能不一樣。我的開發工具還在運送途中,因此我還沒有測試過,但是這種Beacon肯定很有趣,尤其是它的價格最低只有5美元。


What's next?(下一步是什麼?)


現在還沒有做的事情就是開發一些基於Beacon的應用程序。爲了實現這個目的,記住SoftwareMill:我們經常尋找一些有趣的項目來開發。


-----------------------------------------------------------------------------------------------------------------------

原文作者:Adam Warski

原文地址:http://www.warski.org/blog/2014/01/how-ibeacons-work/

譯文作者:Jianan - [email protected]

版本信息:本文基於2014-09-02版本進行翻譯

版權聲明:本文經原作者許可進行翻譯,保留所有權利,未經許可不得複製和轉載。

-----------------------------------------------------------------------------------------------------------------------


iBeacon是最近非常火的話題。這種技術能夠實現室內定位,讓你的手機能夠知道是否處於一個Beacon的範圍內。使用這種技術能夠產生很多應用程序:比如幫助你在停車場中找到你的汽車,或者在零售店中根據所處位置提供優惠券或者其它一些位置相關的服務。還有很多我們現在無法想象得到的應用程序。


現在有很多種關於iBeacon是什麼,以及我們可以如何使用它們的解釋。然而從技術角度上來說,它們是如何工作的?底層的技術使用的使用Bluetooth LE,因此。。。


What is Bluetooth LE?(什麼是Bluetooth LE,簡寫BLE)


Bluetooth Low Energy(BLE)是2010年發佈的藍牙4.0技術規範的一部分。它起源於2006年Nokia的Wibree技術,但最終被整合進了藍牙。這是一組與傳統藍牙不同的協議,並且使用的設備上也不會向後兼容。因此,現在市面上你可以看到三種類型的設備:

1.Bluetooth設備:只支持傳統藍牙的設備。

2.Bluetooth Smart Ready設備:同時支持傳統藍牙和LE模式的設備。

3.Bluetooth Smart設備:只支持LE模式的設備。


最新的手機(iPhone 4s+, SG3+)、筆記本、平板電腦等,基本上都已經支持藍牙4.0,也就是Bluetooth Smart Ready設備。Beacon,從另一方面來說,這種設備只支持low energy protocols(LE低功耗協議),屬於上面說所的“Bluetooth Smart”設備,這也是它們靠一顆鈕釦電池就能運行很長時間的原因。老式設備,比如外設、汽車系統、舊手機等通常只支持傳統藍牙協議。


BLE最重要的特點當然在於它的低能耗。舉個例子,一些beacon設備靠一顆微型電池就能夠持續發送一個信號兩年左右(這種電池一般是不可拆卸的,你可能需要在beacon停止工作之後替換一個新的beacon)。傳統藍牙和LE藍牙使用的都是相同的波段(2.4GHz-2.4835GHz)。BLE協議的傳輸速率比較低,因此除了用於發現設備和做一些簡單通信之外,不太適合用於傳輸大量的數據流。在協議條款上,LE和傳統藍牙的信號都能夠覆蓋到100米的範圍。


How does BLE communication work?(BLE設備如何通信)


BLE的通信包括兩個主要部分:advertising(廣告)和connecting(連接)。


廣告(Advertising)是一種單向的發送機制。想要被搜索到的設備可以以20毫秒到10秒鐘的時間間隔發送一段數據包。使用的時間間隔越短,電池消耗的越快,但設備被發現的速度也就會快。數據包長度最多47個字節,由以下部分組成:


    1 byte preamble(1字節做報頭)

    4 byte access address(4字節做地址)

    39 bytes advertising channel PDU(39個字節用於PDU數據包)

    3 bytes CRC(3個字節用於CRC數據校驗)



對於廣告通信信道,地址部分永遠都是0x8E89BED6。對於其它數據信道,地址部分由不同的連接決定。


返回的PDU數據也擁有自己的數據報頭(2個字節:聲明有效載荷數據的長度和類型——設備是否支持連接等等)和當前有效載荷數據(最多37個字節)。


最終,有效載荷數據中的頭6個字節是設備的MAC地址,所以實際信息數據最高可佔31個字節。


BLE設備可以運行在單一的不可連接的廣告模式中(在這種模式下所有的信息都包含在廣告數據包中),然而設備也是允許運行在可被連接的模式下(通常情況下都是這種模式)。


當設備被發現之後,一個連接就會被建立起來。之後就可以讀取BLE設備提供的Service,以及每個Service的characteristic(屬性,類似於GATT Profile實例)。每一個characteristic都會提供一些值,這些值可以被讀取或者修改。例如,一個小型溫控器可以開放一個service用於獲取當前的溫度或者溼度讀數(相當於是service的characteristic),同時也可以開放其它的service和characteristic用於設置期望的溫度。這裏因爲beacon不使用連接模式,我將會跳過這些細節。如果你想要了解更多關於連接BLE設備的內容,可以參考Apple's Core Bluetooth guide,儘管你可能不是一個iOS開發者。更多相關技術性的文章,可以參考Introduction to BLEMaking the most out of BLE Advertising mode


How do beacons use BLE?(beacon設備如何使用BLE)


Beacon設備只使用了廣告通信信道。正如beacon(信標、燈塔)的字面意思,這種設備以一定的時間間隔發送數據包,並且發送的數據被可以被像手機這樣的設備獲取。也就是說,iBeacon只是BLE廣告模式的一種簡單的使用,並在此基礎上提供了對ios的一些附加支持。


如果你試着攔截一段iBeacon廣告數據包,例如下面從Estimote beacon截獲的數據包:


[plain] view plain copy
  1. 02 01 06 1A FF 4C 00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D 00 49 00 0A C5  

(截獲以上數據,如果你使用的Mac設備,你可以參考additional XCode download爲XCode添加藍牙掃描和數據包打印工具。如果是Window設備,請參考這裏


以上的數據已經將廣告數據包的報頭、修正地址、廣告PDU數據包的報頭和其中的MAC地址部分都移除掉了,也就是說這部分數據只包含了實際信息數據——一共30個字節,符合實際信息數據最多31個字節的限制。


那麼一個iBeacon設備的BLE廣告數據是如何組成的?以下是Apple修正的數據格式,整理如下(也可以參考這裏):


[plain] view plain copy
  1. 02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)  
  2. B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)  
  3. 00 49: major  
  4. 00 0A: minor  
  5. C5: 2’s complement of measured TX power  



根據這些原理,如果你想要實驗beacon的功能,你不必需要一個真正的beacon設備。如果你有最新的手機(例如iPhone4S+,SG3+)或者配備藍牙4的筆記本(例如Retina MacBook),你可以將這些設備轉換成iBeacon發送設備和接收設備。以iPhone爲例,你可以在AppStore上下載“Locate iB”應用。對於MacOS,可以參考這裏。當然你可以可以使用樹莓派


Breaking down the iBeacon format(解析iBeacon的數據格式)


除了修正的iBeacon前綴數據(02 01 ... 15),其它各部分數據各代表什麼?


Proximity UUID(上面例子中的B9 ... 6D部分):這是將你所有的beacon與其他人的beacon設備區別開的id!例如,目前在商店裏某個區域分佈着多個beacon形成一條“鏈帶”,用於爲顧客提供特定的服務,那麼歸屬於同一條“鏈帶”的beacon將分配到相同的proximity UUID。爲這條“鏈帶”設計的專用應用程序將會在後臺使用這個UUID掃描到這條“鏈帶”中的beacon設備。


major編號(2個字節,上面例子中爲0x0049,也就是73):用於將相關的beacon標識爲一組。例如,一個商店中的所有beacon將會分配到相同的major編號。通過這種方式,應用程序就能夠知道顧客位於哪一家商店。


minor標號(也是2個字節,上面例子中爲0x000A,也就是10):用於標識特定的beacon設備。例如一個商店中的每一個beacon設備都擁有唯一的minor編號,這樣你才能夠知道顧客位於商店中的哪個位置。


Measuring distance(測量距離)


最後一個值,TX power,用於確定你和beacon之間距離有多近。根據這個值不但可以獲得粗略的信息(比如靠近/遠離/不在範圍內等),也可以獲取精確到米的距離(當然你也可以轉換爲以步爲單位的距離)。那麼如何實現?


TX power(上面例子中爲0xC5=197,根據2的補碼測得256-197=-59dBm)是距離設備1米測得的信號強度值(RSSI- Received Signal Strength Indication,接收到的信號強弱指標)。假如接收到的信號強度減弱了,那麼我們可能在遠離。只要知道1米距離的RSSI,以及當前的RSSI(我們可以從接收到的信號中一塊獲取到這些信息),那麼計算出當前的距離是可能的。IOS已經實現了個這個功能,對於其它平臺需要自己手動編碼計算,可以參考這裏


譯註:Java代碼粗略計算距離代碼:

[java] view plain copy
  1. protected static double calculateAccuracy(int txPower, double rssi) {  
  2.   if (rssi == 0) {  
  3.     return -1.0// if we cannot determine accuracy, return -1.  
  4.   }  
  5.   
  6.   double ratio = rssi*1.0/txPower;  
  7.   if (ratio < 1.0) {  
  8.     return Math.pow(ratio,10);  
  9.   }  
  10.   else {  
  11.     double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;      
  12.     return accuracy;  
  13.   }  
  14. }     

然而,在實際應用中,由於人體或者其它通信阻礙物都有可能削弱信號,因此這個距離只是一個估算值。


IOS integration(IOS整合)


IOS已經整合了iBeacon。當你進入beacon的範圍內,你的應用程序就可以接收到通知,即使你的應用程序處於在後臺也能接收到。一個應用程序可以註冊一個區域的進入或者退出事件,因此即使應用程序沒有運行也可以被喚醒。爲了響應這些事件,應用程序可以發送例如本地推送通知,提示用戶打開應用程序查看商店的促銷廣告(這些促銷廣告可以從網絡上面獲取),或者是其它相關的內容。


更準確的說,當手機處於不活動狀態時,也就是IOS進入了低電量監控模式的時候,只有iBeacon區域進入/退出事件能夠被接收到。當手機和應用程序處於活動狀態,你可以進入ranging模式,這個能夠讓你檢測的信號強度和估算距離更加準確。


注意你的手機檢測beacon需要花費一定的時間。首先,beacon設備是間隔一定的時間才發送一次廣告。其次,如果你的手機處於非活動模式,它只在有些時候纔會檢測藍牙信號。一個beacon設備要被檢測到,上面兩段工作時間就需要有交集。實踐證明,它可能需要15分鐘才能檢測到一個beacon設備。


按步驟開發一個iOS iBeacon應用程序可以參考這裏。Beacon的製造商通常也會提供SDK幫助開發Beacon應用程序。參考Estimote的iOS SDK 和Android SDK


How can I get some beacons?(如何獲取Beacon設備)


Beacon設備資源現在比較稀少,你通常需要等上幾個星期才能拿到貨,但可以肯定的是將來這種情況會改善。


因此,最快的選擇就是創建一個Beacon模擬器:將iPhone/Android/MacBook/其它筆記本/樹莓派轉換成了Beacon模擬器。


第二種選擇就是試着去訂購一些Beacon設備了:


    pre-order Estimote beacons; 3 for $99

    Kontakt beacons come in a couple of packages; 4 for $99, 10 for $279

    RaspberryPi kits from RadiusNetworks: 1 for $99

    RedBearLab offers BLE shields for Arduino for $30

    Bleu sells USB-iBeacon dongles. 1 for $40, 5 for $150


Alternatives(替代品)


iBeacon不是唯一一種基於BLE近距離技術開發的設備。高通同樣正在開發自己的Beacon——Gimbal,並集合了iOS和android SDK。它們提供的功能比較類似,但是BLE廣告的數據格式可能不一樣。我的開發工具還在運送途中,因此我還沒有測試過,但是這種Beacon肯定很有趣,尤其是它的價格最低只有5美元。


What's next?(下一步是什麼?)


現在還沒有做的事情就是開發一些基於Beacon的應用程序。爲了實現這個目的,記住SoftwareMill:我們經常尋找一些有趣的項目來開發。

發佈了30 篇原創文章 · 獲贊 54 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章