ibeacon是什么
iBeacon是蘋果公司2013年9月發(fā)布的移動(dòng)設(shè)備用OS(iOS7)上配備的新功能。其工作方式是,配備有 低功耗藍(lán)牙(BLE)通信功能的設(shè)備使用BLE技術(shù)向周圍發(fā)送自己特有的ID,接收到該ID的應(yīng)用軟件會(huì)根據(jù)該ID采取一些行動(dòng)。比如,在店鋪里設(shè)置iBeacon通信模塊的話,便可讓iPhone和iPad上運(yùn)行一資訊告知服務(wù)器,或者由服務(wù)器向顧客發(fā)送折扣券及進(jìn)店積分。此外,還可以在家電發(fā)生故障或停止工作時(shí)使用iBeacon向應(yīng)用軟件發(fā)送資訊。
蘋果 WWDC 14 之后,對(duì) iBeacon 加大了技術(shù)支持和對(duì)其用于室內(nèi)地圖的應(yīng)用有個(gè)更明確的規(guī)劃。蘋果公司公布了 iBeacon for Developers 和 Maps for Developers 等專題頁(yè)面。
iBeacon技術(shù)作為利用低功耗藍(lán)牙技術(shù)研發(fā)者,有不少團(tuán)隊(duì)對(duì)其進(jìn)行研究利用。
BLE設(shè)備如何通信
BLE的通信包括兩個(gè)主要部分:advertising(廣告)和connecting(連接)。
廣告(Advertising)是一種單向的發(fā)送機(jī)制。想要被搜索到的設(shè)備可以以20毫秒到10秒鐘的時(shí)間間隔發(fā)送一段數(shù)據(jù)包。使用的時(shí)間間隔越短,電池消耗的越快,但設(shè)備被發(fā)現(xiàn)的速度也就會(huì)快。數(shù)據(jù)包長(zhǎng)度最多47個(gè)字節(jié),由以下部分組成:
1 byte preamble(1字節(jié)做報(bào)頭)
4 byte access address(4字節(jié)做地址)
39 bytes advertising channel PDU(39個(gè)字節(jié)用于PDU數(shù)據(jù)包)
3 bytes CRC(3個(gè)字節(jié)用于CRC數(shù)據(jù)校驗(yàn))
對(duì)于廣告通信信道,地址部分永遠(yuǎn)都是0x8E89BED6。對(duì)于其它數(shù)據(jù)信道,地址部分由不同的連接決定。
返回的PDU數(shù)據(jù)也擁有自己的數(shù)據(jù)報(bào)頭(2個(gè)字節(jié):聲明有效載荷數(shù)據(jù)的長(zhǎng)度和類型——設(shè)備是否支持連接等等)和當(dāng)前有效載荷數(shù)據(jù)(最多37個(gè)字節(jié))。
最終,有效載荷數(shù)據(jù)中的頭6個(gè)字節(jié)是設(shè)備的MAC地址,所以實(shí)際信息數(shù)據(jù)最高可占31個(gè)字節(jié)。
BLE設(shè)備可以運(yùn)行在單一的不可連接的廣告模式中(在這種模式下所有的信息都包含在廣告數(shù)據(jù)包中),然而設(shè)備也是允許運(yùn)行在可被連接的模式下(通常情況下都是這種模式)。
當(dāng)設(shè)備被發(fā)現(xiàn)之后,一個(gè)連接就會(huì)被建立起來(lái)。之后就可以讀取BLE設(shè)備提供的Service,以及每個(gè)Service的characteristic(屬性,類似于GATT Profile實(shí)例)。每一個(gè)characteristic都會(huì)提供一些值,這些值可以被讀取或者修改。例如,一個(gè)小型溫控器可以開放一個(gè)service用于獲取當(dāng)前的溫度或者濕度讀數(shù)(相當(dāng)于是service的characteristic),同時(shí)也可以開放其它的service和characteristic用于設(shè)置期望的溫度。這里因?yàn)閎eacon不使用連接模式,我將會(huì)跳過(guò)這些細(xì)節(jié)。如果你想要了解更多關(guān)于連接BLE設(shè)備的內(nèi)容,可以參考Apple‘s Core Bluetooth guide,盡管你可能不是一個(gè)IOS開發(fā)者。更多相關(guān)技術(shù)性的文章,可以參考Introduction to BLE,Making the most out of BLE Advertising mode。
beacon設(shè)備如何使用BLE
Beacon設(shè)備只使用了廣告通信信道。正如beacon(信標(biāo)、燈塔)的字面意思,這種設(shè)備以一定的時(shí)間間隔發(fā)送數(shù)據(jù)包,并且發(fā)送的數(shù)據(jù)被可以被像手機(jī)這樣的設(shè)備獲取。也就是說(shuō),iBeacon只是BLE廣告模式的一種簡(jiǎn)單的使用,并在此基礎(chǔ)上提供了對(duì)IOS的一些附加支持。
如果你試著攔截一段iBeacon廣告數(shù)據(jù)包,例如下面從Estimote beacon截獲的數(shù)據(jù)包:
[plain] view plaincopy02 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
(截獲以上數(shù)據(jù),如果你使用的Mac設(shè)備,你可以參考additional XCode download為XCode添加藍(lán)牙掃描和數(shù)據(jù)包打印工具。如果是Window設(shè)備,請(qǐng)參考這里)
以上的數(shù)據(jù)已經(jīng)將廣告數(shù)據(jù)包的報(bào)頭、修正地址、廣告PDU數(shù)據(jù)包的報(bào)頭和其中的MAC地址部分都移除掉了,也就是說(shuō)這部分?jǐn)?shù)據(jù)只包含了實(shí)際信息數(shù)據(jù)——一共30個(gè)字節(jié),符合實(shí)際信息數(shù)據(jù)最多31個(gè)字節(jié)的限制。
那么一個(gè)iBeacon設(shè)備的BLE廣告數(shù)據(jù)是如何組成的?以下是Apple修正的數(shù)據(jù)格式,整理如下(也可以參考這里):
[plain] view plaincopy02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)
B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)
00 49: major
00 0A: minor
C5: 2’s complement of measured TX power
根據(jù)這些原理,如果你想要實(shí)驗(yàn)beacon的功能,你不必需要一個(gè)真正的beacon設(shè)備。如果你有最新的手機(jī)(例如iPhone4S+,SG3+)或者配備藍(lán)牙4的筆記本(例如Retina MacBook),你可以將這些設(shè)備轉(zhuǎn)換成iBeacon發(fā)送設(shè)備和接收設(shè)備。以iPhone為例,你可以在AppStore上下載“Locate iB”應(yīng)用。對(duì)于MacOS,可以參考這里。當(dāng)然你可以可以使用樹莓派。
Breaking down the iBeacon format(解析iBeacon的數(shù)據(jù)格式)
除了修正的iBeacon前綴數(shù)據(jù)(02 01 。。。 15),其它各部分?jǐn)?shù)據(jù)各代表什么?
Proximity UUID(上面例子中的B9 。。。 6D部分):這是將你所有的beacon與其他人的beacon設(shè)備區(qū)別開的id!例如,目前在商店里某個(gè)區(qū)域分布著多個(gè)beacon形成一條“鏈帶”,用于為顧客提供特定的服務(wù),那么歸屬于同一條“鏈帶”的beacon將分配到相同的proximity UUID。為這條“鏈帶”設(shè)計(jì)的專用應(yīng)用程序?qū)?huì)在后臺(tái)使用這個(gè)UUID掃描到這條“鏈帶”中的beacon設(shè)備。
major編號(hào)(2個(gè)字節(jié),上面例子中為0x0049,也就是73):用于將相關(guān)的beacon標(biāo)識(shí)為一組。例如,一個(gè)商店中的所有beacon將會(huì)分配到相同的major編號(hào)。通過(guò)這種方式,應(yīng)用程序就能夠知道顧客位于哪一家商店。
minor標(biāo)號(hào)(也是2個(gè)字節(jié),上面例子中為0x000A,也就是10):用于標(biāo)識(shí)特定的beacon設(shè)備。例如一個(gè)商店中的每一個(gè)beacon設(shè)備都擁有唯一的minor編號(hào),這樣你才能夠知道顧客位于商店中的哪個(gè)位置。
Measuring distance(測(cè)量距離)
最后一個(gè)值,TX power,用于確定你和beacon之間距離有多近。根據(jù)這個(gè)值不但可以獲得粗略的信息(比如靠近/遠(yuǎn)離/不在范圍內(nèi)等),也可以獲取精確到米的距離(當(dāng)然你也可以轉(zhuǎn)換為以步為單位的距離)。那么如何實(shí)現(xiàn)?
TX power(上面例子中為0xC5=197,根據(jù)2的補(bǔ)碼測(cè)得256-197=-59dBm)是距離設(shè)備1米測(cè)得的信號(hào)強(qiáng)度值(RSSI- Received Signal Strength Indication,接收到的信號(hào)強(qiáng)弱指標(biāo))。假如接收到的信號(hào)強(qiáng)度減弱了,那么我們可能在遠(yuǎn)離。只要知道1米距離的RSSI,以及當(dāng)前的RSSI(我們可以從接收到的信號(hào)中一塊獲取到這些信息),那么計(jì)算出當(dāng)前的距離是可能的。IOS已經(jīng)實(shí)現(xiàn)了個(gè)這個(gè)功能,對(duì)于其它平臺(tái)需要自己手動(dòng)編碼計(jì)算,可以參考這里。
譯注:Java代碼粗略計(jì)算距離代碼:
[java] view plaincopyprotected static double calculateAccuracy(int txPower, double rssi) {
if (rssi == 0) {
return -1.0; // if we cannot determine accuracy, return -1.
}
double ratio = rssi*1.0/txPower;
if (ratio 《 1.0) {
return Math.pow(ratio,10);
}
else {
double accuracy = (0.89976)*Math.pow(ratio,7.7095) + 0.111;
return accuracy;
}
}
然而,在實(shí)際應(yīng)用中,由于人體或者其它通信阻礙物都有可能削弱信號(hào),因此這個(gè)距離只是一個(gè)估算值。
IOS integration(IOS整合)
IOS已經(jīng)整合了iBeacon。當(dāng)你進(jìn)入beacon的范圍內(nèi),你的應(yīng)用程序就可以接收到通知,即使你的應(yīng)用程序處于在后臺(tái)也能接收到。一個(gè)應(yīng)用程序可以注冊(cè)一個(gè)區(qū)域的進(jìn)入或者退出事件,因此即使應(yīng)用程序沒(méi)有運(yùn)行也可以被喚醒。為了響應(yīng)這些事件,應(yīng)用程序可以發(fā)送例如本地推送通知,提示用戶打開應(yīng)用程序查看商店的促銷廣告(這些促銷廣告可以從網(wǎng)絡(luò)上面獲取),或者是其它相關(guān)的內(nèi)容。
更準(zhǔn)確的說(shuō),當(dāng)手機(jī)處于不活動(dòng)狀態(tài)時(shí),也就是IOS進(jìn)入了低電量監(jiān)控模式的時(shí)候,只有iBeacon區(qū)域進(jìn)入/退出事件能夠被接收到。當(dāng)手機(jī)和應(yīng)用程序處于活動(dòng)狀態(tài),你可以進(jìn)入ranging模式,這個(gè)能夠讓你檢測(cè)的信號(hào)強(qiáng)度和估算距離更加準(zhǔn)確。
注意你的手機(jī)檢測(cè)beacon需要花費(fèi)一定的時(shí)間。首先,beacon設(shè)備是間隔一定的時(shí)間才發(fā)送一次廣告。其次,如果你的手機(jī)處于非活動(dòng)模式,它只在有些時(shí)候才會(huì)檢測(cè)藍(lán)牙信號(hào)。一個(gè)beacon設(shè)備要被檢測(cè)到,上面兩段工作時(shí)間就需要有交集。實(shí)踐證明,它可能需要15分鐘才能檢測(cè)到一個(gè)beacon設(shè)備。
按步驟開發(fā)一個(gè)iOS iBeacon應(yīng)用程序可以參考這里。Beacon的制造商通常也會(huì)提供SDK幫助開發(fā)Beacon應(yīng)用程序。參考Estimote的iOS SDK 和Android SDK。
How can I get some beacons?(如何獲取Beacon設(shè)備)
Beacon設(shè)備資源現(xiàn)在比較稀少,你通常需要等上幾個(gè)星期才能拿到貨,但可以肯定的是將來(lái)這種情況會(huì)改善。
因此,最快的選擇就是創(chuàng)建一個(gè)Beacon模擬器:將iPhone/Android/MacBook/其它筆記本/樹莓派轉(zhuǎn)換成了Beacon模擬器。
第二種選擇就是試著去訂購(gòu)一些Beacon設(shè)備了:
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近距離技術(shù)開發(fā)的設(shè)備。高通同樣正在開發(fā)自己的Beacon——Gimbal,并集合了iOS和Android SDK。它們提供的功能比較類似,但是BLE廣告的數(shù)據(jù)格式可能不一樣。我的開發(fā)工具還在運(yùn)送途中,因此我還沒(méi)有測(cè)試過(guò),但是這種Beacon肯定很有趣,尤其是它的價(jià)格最低只有5美元。
下一步是什么?
現(xiàn)在還沒(méi)有做的事情就是開發(fā)一些基于Beacon的應(yīng)用程序。為了實(shí)現(xiàn)這個(gè)目的,記住SoftwareMill:我們經(jīng)常尋找一些有趣的項(xiàng)目來(lái)開發(fā)。
? ? ? ? ? ? ? ? ? ? ?擴(kuò)展閱讀>>>>>>>>>ibeacon室內(nèi)定位原理
? ? ? ? ? ? ? ? ? ? ? ? ?>>>>>>>>>ibeacon室內(nèi)定位算法及代碼
評(píng)論