BLE廣告和信標(biāo)

BLE廣告和信標(biāo) (原文)

建筑與BLE信標(biāo)在廣告其位置

BLE廣告是藍(lán)牙低功耗最重要的方面之一。 了解如何正確使用廣告可以幫助你降低功耗,加快連接速度,提高可靠性。 我們將要了解他們的工作原理以及如何使用它們。

藍(lán)牙智能(Bluetooth Smart)有兩種通信方式。 第一種通信方式是使用廣告,其中BLE外圍設(shè)備向其周圍的每個(gè)設(shè)備廣播數(shù)據(jù)包。 然后,接收設(shè)備可以對(duì)該信息進(jìn)行操作或連接以接收更多信息。 第二種通信方式是使用連接來接收數(shù)據(jù)包,外圍和中心都發(fā)送數(shù)據(jù)包。 我們將重點(diǎn)放在廣告上,原因有幾個(gè):

  • 你不能在不使用廣告的情況下在兩個(gè)設(shè)備之間創(chuàng)建連接。 定義廣告包的數(shù)據(jù)和格式通常是開發(fā)BLE設(shè)備時(shí)首先要做的工作。

  • 大量的BLE產(chǎn)品大部分時(shí)間都會(huì)睡覺,醒來時(shí)也只需要在需要時(shí)進(jìn)行廣告和連接。 這意味著廣告對(duì)功耗有很大的影響。

  • 用戶需要有響應(yīng)性的產(chǎn)品,廣告間隔在快速連接中至關(guān)重要。

廣告是有意設(shè)計(jì)為單向的。 中央設(shè)備無法在沒有連接的情況下將任何數(shù)據(jù)發(fā)送到外圍設(shè)備。 但是單個(gè)外設(shè)可以向該區(qū)域的多個(gè)主設(shè)備發(fā)送廣告。

BLE物理層

在我們進(jìn)入廣告包發(fā)送之前,我們想談?wù)勔幌翨LE物理層。 物理層負(fù)責(zé)在空中實(shí)際發(fā)送信號(hào)。 這包括實(shí)際的射頻收發(fā)器。

藍(lán)牙低功耗與經(jīng)典藍(lán)牙具有一些相似之處。 兩者都使用2.4GHz頻譜。 基本速率(BR)和BLE均采用1Mbps的GFSK調(diào)制,但其調(diào)制指數(shù)不同。 增強(qiáng)數(shù)據(jù)速率(EDR)使用與GFSK完全不同的調(diào)制。 經(jīng)典藍(lán)牙與LE的40個(gè)頻道相比有79個(gè)頻道。 通道間隔也不同。 這兩個(gè)差異使LE和經(jīng)典藍(lán)牙不同,不兼容,所以他們無法溝通。 雙模式射頻,像CC256x,通過切換其調(diào)制參數(shù)和運(yùn)行頻道來支持LE和經(jīng)典藍(lán)牙。

2.4GHz頻譜和Wi-Fi頻道中的BLE通道

用于藍(lán)牙的2.4GHz頻譜從2402MHz延伸到2480MHz。 LE使用40個(gè)1MHz寬的信道,編號(hào)為0到39,每個(gè)信道分開2MHz。

頻道37,38和39僅用于發(fā)送廣告包。 其余的用于連接期間的數(shù)據(jù)交換。 我們對(duì)這3個(gè)頻道的情況感興趣,這就是我們?cè)谶@里介紹的內(nèi)容。

在BLE廣告期間,BLE外圍設(shè)備一個(gè)接一個(gè)地在3個(gè)廣告信道上發(fā)送數(shù)據(jù)包。 掃描設(shè)備或信標(biāo)的中央設(shè)備將收聽這些頻道的廣告數(shù)據(jù)包,這有助于其發(fā)現(xiàn)附近的設(shè)備。

頻道37,38和39有目的地分布在2.4GHz頻譜上。 頻道37和頻道39是頻帶中的第一個(gè)和最后一個(gè)頻道,而頻道38在中間。 如果任何一個(gè)廣告頻道被阻止,其他頻道可能是空閑的,因?yàn)樗鼈兎珠_了相當(dāng)多的帶寬。

這是特別真實(shí)的,因?yàn)楦蓴_BLE的大多數(shù)其他設(shè)備是窄帶。 頻道38特別放在Wi-Fi頻道1和6之間,所以它避開了Wi-Fi信號(hào)。 廣告頻道的寬間距有助于BLE更好地管理來自Wi-Fi,經(jīng)典藍(lán)牙,微波爐,嬰兒監(jiān)視器等的干擾,以確保廣告成功。

BLE廣告間隔(Advertisement Interval)

當(dāng)BLE外圍設(shè)備處于廣告模式時(shí),在每個(gè)廣告頻道上周期性地發(fā)送廣告包。 分組之間的時(shí)間間隔具有固定間隔和隨機(jī)延遲。

BLE廣告在順序廣告信道中的間隔

你可以將固定間隔設(shè)置為從20ms到10.24秒,步長為0.625ms。 隨機(jī)延遲是自動(dòng)添加的從1ms到10ms的偽隨機(jī)值。 這種隨機(jī)性有助于減少不同設(shè)備的廣告之間的碰撞的可能性。 我們提到過廣告對(duì)于發(fā)現(xiàn)設(shè)備至關(guān)重要,所以不惜一切代價(jià)避免沖突是非常重要的。 這是藍(lán)牙智能(Bluetooth Smart)使用的另一種方式來提高穩(wěn)健性。

你可能會(huì)想,我只想在一個(gè)或兩個(gè)頻道上做廣告,而不是全部三個(gè)來節(jié)省電量。 由于干擾的影響,大多數(shù)公司都對(duì)這種做法感到沮喪。 如果你選擇的頻道被阻止,你的設(shè)備將無法正常工作。 例如,蘋果建議在所有3個(gè)頻道上都進(jìn)行廣告,其他制造商也同樣如此。

廣告間隔與連接間隔是分開獨(dú)立的。 因此,即便你的設(shè)備形成連接的速度較慢,連接建立后也不會(huì)阻止你快速發(fā)送數(shù)據(jù)。

BLE廣告包

藍(lán)牙規(guī)范在藍(lán)牙LE中定義了兩個(gè)數(shù)據(jù)單元的頂級(jí)數(shù)據(jù)包。 分組本身具有包括前同步碼和接入地址以及CRC的若干部分。

藍(lán)牙廣告PDU格式

用于廣告信道的分組數(shù)據(jù)單元(稱為廣告信道PDU)包括2字節(jié)報(bào)頭和6到37字節(jié)的可變有效載荷。 有效載荷的實(shí)際長度由廣告信道PDU的報(bào)頭中的6位長度字段來定義。

請(qǐng)注意,廣告有幾種PDU類型,但我們將主要關(guān)注ADV_INDADV_NONCONN_IND 。 ADV_IND是一個(gè)通用的廣告,通常是最常見的。 這是通用的,因?yàn)樗鼪]有被定向(not directed),并且它是可連接的(connectable),這意味著中央設(shè)備可以連接到正在發(fā)送此廣告的外圍設(shè)備,并且不指向特定的中央設(shè)備。

當(dāng)外圍設(shè)備發(fā)送ADV_IND廣告時(shí),它正在幫助諸如智能手機(jī)的中央設(shè)備找到它。 一旦找到,中央設(shè)備就可以開始連接過程。

ADV_NONCONN_IND是當(dāng)外設(shè)不想接受連接時(shí)所使用的廣告類型,這在信標(biāo)(Beacons)中是典型的。

正確的廣告方式取決于你的應(yīng)用,無論你要形成快速連接還是完全避免連接。

廣告信道PDU

廣告信道PDU本身具有取決于廣告PDU類型的有效載荷。 上圖顯示了ADV_IND有效載荷。 該有效載荷具有6字節(jié)的廣告地址和可變數(shù)量的廣告數(shù)據(jù)結(jié)構(gòu)。

在考慮廣告地址后(通常將其稱為藍(lán)牙MAC地址,盡管可能會(huì)隨意更改),實(shí)際的廣告數(shù)據(jù)結(jié)構(gòu)僅有37 - 6 = 31字節(jié)。 這還必須包括長度,類型和數(shù)據(jù)本身。

我們?yōu)g覽了幾個(gè)層次,你可以看到BLE封裝了大量數(shù)據(jù)。 這為你提供了很多靈活性來支持最適合你產(chǎn)品的不同行為。

在最低級(jí)別,廣告有31個(gè)字節(jié)可以廣告任何數(shù)量的不同的東西。 你可以在藍(lán)牙Sig網(wǎng)站上查看廣告數(shù)據(jù)類型的完整列表 ,每種數(shù)據(jù)類型都指定了有效載荷中不同的數(shù)據(jù)標(biāo)準(zhǔn)。

一些最常用的廣告數(shù)據(jù)類型是:

  • 0x06 128位服務(wù)的不完整列表 :外設(shè)提供的服務(wù)的 UUID可以128位格式發(fā)布。
  • 0x02 16位服務(wù)類UUID不完整列表
  • 0x08 縮短本地名稱
  • 0x09 完成本地 名稱

由于廣告數(shù)據(jù)結(jié)構(gòu)的數(shù)量是可變的,你可以根據(jù)需要進(jìn)行組合。

建立廣告最重要的部分是獲取正確的信息到中央設(shè)備(智能手機(jī)或獨(dú)立的中央設(shè)備),這通常取決于對(duì)你的產(chǎn)品什么最重要。 如果你的產(chǎn)品提供獨(dú)特的服務(wù),你可以廣告這些服務(wù),以便智能手機(jī)可以區(qū)分你的產(chǎn)品和附近的其他產(chǎn)品。 例如,Beacons具有諸如獨(dú)特的UUID,功率級(jí)別和其他對(duì)于查找和使用Beacons很重要的特性的定制數(shù)據(jù)。

藍(lán)牙SIG還具有制造商特定的0xFF數(shù)據(jù)類型,因此你可以靈活地定義自己的自定義有效負(fù)載。 蘋果公司為iBeacons做了這一工作,它將標(biāo)準(zhǔn)的廣告數(shù)據(jù)類型與制造商特定的一起組合。

定義自己的廣告給你很大的力量,但是需要由你自己找到最好的方法來達(dá)到你想要的地方。

廣告藍(lán)牙服務(wù)

雖然每個(gè)應(yīng)用程序都是不同的,但外設(shè)廣告其提供的最重要或最獨(dú)特的服務(wù)是連接到它的最簡(jiǎn)單方式,在許多產(chǎn)品中都是有意義的。當(dāng)iPhone或Android正在尋找設(shè)備時(shí),它可以使用定制服務(wù)UUID來查找要與其通話的確切設(shè)備并過濾掉其他設(shè)備。 搜索特定地址是不太可能的,但是找到具有唯一ID的設(shè)備更容易。

例如,假設(shè)你的產(chǎn)品是小型光傳感器。 你可以使用唯一的128位UUID創(chuàng)建自定義服務(wù)。 然后,通過將UUID包括在廣告包中,iPhone可以忽略除了你的產(chǎn)品之外的所有其他設(shè)備。 這樣可以快速找到設(shè)備,因?yàn)槟銦o需連接到每個(gè)設(shè)備來發(fā)現(xiàn)其功能。

這在節(jié)電方面也很好。 新一代的智能手機(jī)正在越來越多的在低水平上決策和過濾。 他們這樣做是因?yàn)槟軌蚋咝У貋G棄沒有用的廣告包,而不是通知操作系統(tǒng)和用戶稍后再丟棄。 但手機(jī)需要有關(guān)哪些應(yīng)用程序必須提供過濾哪些的信息,這取決于服務(wù)或設(shè)備地址的唯一UUID。

快速介紹UUID

一旦你開始使用BLE設(shè)備,你將很快意識(shí)到UUID至關(guān)重要。 服務(wù),特征和其他項(xiàng)目都使用UUID來唯一標(biāo)識(shí)它們。

UUID只不過是唯一的128位(16字節(jié))數(shù)字:

75BEB663-74FC-4871-9737-AD184157450E

通常以4-2-2-2-6格式排列UUID。 每對(duì)字符表示一個(gè)十六進(jìn)制數(shù)字。 所以75以上是實(shí)際的0x75。

為避免不斷傳輸可能浪費(fèi)的16個(gè)字節(jié)(藍(lán)牙數(shù)據(jù)量非常有限,16個(gè)字節(jié)很大),藍(lán)牙SIG采用了標(biāo)準(zhǔn)的UUID基礎(chǔ)。 該基礎(chǔ)形成128位UUID的前96位(12字節(jié))。 其余的位由藍(lán)牙SIG定義:

XXXXXXXX-0000-1000-8000-00805F9B34FB

最高的32位由你決定。 對(duì)于16位UUID,底部16位保持為0。例如,心率服務(wù)的簡(jiǎn)單16位UUID是:

0x180D

實(shí)際上這代表一個(gè)128位的UUID:

0000 180D -0000-1000-8000-00805F9B34FB

如果你使用Bluetooth SIG指定的現(xiàn)有服務(wù)或配置文件,則可以避免使用完整的128位UUID。 但是,定制服務(wù)需要一個(gè)完全定義的128位UUID。

創(chuàng)建UUID

UUID唯一重要的是它們是獨(dú)一無二的。

你可以以各種方式隨機(jī)生成它們。 一個(gè)可以生成它們的網(wǎng)站是在線UUID生成器 。 在Mac OS X中,你可以使用命令行中的uuidgen實(shí)用程序來執(zhí)行相同的操作。

由于位數(shù),你不太可能像其他任何人一樣生成一樣的UUID。 最重要的是你可以避免在自定義的UUID中使用藍(lán)牙SIG的UUID基礎(chǔ)。

優(yōu)化BLE廣告的功耗和延遲

最重要的事情之一是功耗和延遲之間的大的折中。 每個(gè)廣告都消耗電力。 BLE射頻必須通電并傳輸。 較少的廣告,系統(tǒng)用一組電池能運(yùn)行的時(shí)間越長。 那么將廣告間隔設(shè)置為10秒是個(gè)好主意嗎?

那么我們假設(shè)用戶想連接到外設(shè)。 你能等10秒嗎? 長時(shí)間間隔對(duì)于用戶來說可能非常令人沮喪,尤其是在環(huán)境干擾和數(shù)據(jù)包丟失的情況下。 所以,使間隔太大對(duì)于用戶體驗(yàn)是不利的。 在中間的某個(gè)地方,大約500ms到1秒是大多數(shù)產(chǎn)品的最佳選擇。 在我們開發(fā)的一些應(yīng)用程序中,我們已經(jīng)增加了延時(shí),但只有經(jīng)過仔細(xì)考慮之后才做的決定。 某些系統(tǒng)在循環(huán)中沒有用戶,因此更容易做到。

當(dāng)你構(gòu)建廣告數(shù)據(jù)包時(shí),你還需要考慮更多字節(jié)意味著更高的功耗。 廣告包中的每個(gè)字節(jié)都迫使射頻收發(fā)器停留在更長的時(shí)間內(nèi)傳輸,從而使用更多的能量。 在某些情況下,將廣告中的字節(jié)數(shù)減少到最低限度可以幫助擠壓硬幣電池的所有內(nèi)容。

BLE廣告和智能手機(jī)

藍(lán)牙智能(Bluetooth Smart)設(shè)計(jì)允許外設(shè)功耗極低。 這部分是通過在智能手機(jī)上放置大量的負(fù)擔(dān),假設(shè)智能手機(jī)具有較大的電池并且容易充電。 但是,在實(shí)際產(chǎn)品中,你希望避免在智能手機(jī)上造成顯著的電池消耗。 如果啟用藍(lán)牙會(huì)更快地耗盡電池,一些用戶最終將無奈地停用藍(lán)牙。 對(duì)于大多數(shù)要為用戶提供快速體驗(yàn)的產(chǎn)品而言,這是一個(gè)問題。

智能手機(jī)使用的大部分功耗來自掃描廣告。 因此,Android和iOS極大地限制了掃描,特別是后臺(tái)掃描。

當(dāng)你的應(yīng)用程序處于前臺(tái)時(shí),你基本上可以完全控制BLE,并且你具有高優(yōu)先級(jí)。 這是有道理的,因?yàn)樘O果和谷歌知道你想要快速向用戶顯示數(shù)據(jù),所以沒有必要拖延它。

一旦你的應(yīng)用程序處于后臺(tái),尋找附近的設(shè)備(如果你的應(yīng)用程序支持它),則操作系統(tǒng)通常會(huì)降低優(yōu)先級(jí)。 這是通過幾種方式完成的:

  • 掃描間隔增加,因此發(fā)現(xiàn)廣告的外圍設(shè)備需要更長的時(shí)間。 如果在前臺(tái)掃描中沒有BLE應(yīng)用程序,這一點(diǎn)尤其如此。

  • 操作系統(tǒng)將生成較少的廣告發(fā)現(xiàn)事件,例如同一設(shè)備的多個(gè)發(fā)現(xiàn)。

Android和iOS各自單獨(dú)處理這個(gè)問題,因此了解在后臺(tái)運(yùn)行的效果對(duì)你的設(shè)備和連接很重要。

掃描響應(yīng)

我們已經(jīng)提到廣告包有31個(gè)可供你使用的數(shù)據(jù)字節(jié)。 這不是很多,特別是當(dāng)你考慮到128位UUID需要16字節(jié)時(shí)。 如果要包含更多信息,你唯一的選擇是響應(yīng)掃描響應(yīng)。

當(dāng)智能手機(jī)掃描廣告時(shí),它也可以從廣告設(shè)備請(qǐng)求更多的信息而不形成連接。 這是通過掃描請(qǐng)求完成的,掃描請(qǐng)求是發(fā)送到外設(shè)的特殊數(shù)據(jù)包。 BLE外設(shè)接收掃描請(qǐng)求并以掃描響應(yīng)進(jìn)行響應(yīng)。

掃描響應(yīng)分組具有與廣告相同的分組格式,除了較高層上的類型,表示它是掃描響應(yīng)而不是廣告。 因此,你的掃描響應(yīng)可以提供你在廣告數(shù)據(jù)包中沒有提及的設(shè)備名稱或其他服務(wù)。

掃描響應(yīng)包與廣告包的關(guān)系

掃描響應(yīng)有一個(gè)已知問題。 如果在外圍設(shè)備中啟用掃描響應(yīng),則在發(fā)送廣告以能夠接收掃描請(qǐng)求包之后,設(shè)備必須將射頻保持在RX模式。 即使沒有實(shí)際發(fā)送的設(shè)備,仍然必須這樣做(因?yàn)橥庠O(shè)不知道誰真正在那里)。 這意味著更多的能源消耗。 對(duì)于非常低功耗的應(yīng)用,如果不是絕對(duì)需要,請(qǐng)考慮禁用掃描響應(yīng)。

BLE信標(biāo)和iBeacons

蘋果iBeacon

如果不討論Beacons,特別是Apple的iBeacon標(biāo)準(zhǔn),則關(guān)于BLE廣告的討論將是不完整的。

信標(biāo)(Beacons)是BLE外設(shè),專門使用廣告,但不允許連接。 不允許連接的原因是,如果信標(biāo)要建立連接,廣告將不得不停止,所以沒有其他設(shè)備可以找到信標(biāo)。 發(fā)送的數(shù)據(jù)包格式有所不同。 而蘋果的iBeacon使用了非常特定的格式的有效載荷。

圖片顯示蘋果的iBeacon包格式,包括兩個(gè)AD結(jié)構(gòu)

你可以看到iBeacon數(shù)據(jù)包的格式。 這些數(shù)據(jù)包使用基本的BLE格式和一些特定的字段。 我們一個(gè)接一個(gè)地來看看它們。

廣告包包含藍(lán)牙MAC地址和有效載荷。 有效載荷由兩個(gè)AD結(jié)構(gòu)組成,第一個(gè)使用Flags數(shù)據(jù)類型給出通用信息,第二個(gè)是Apple特定的iBeacon信息。

標(biāo)志廣告數(shù)據(jù)類型

該數(shù)據(jù)包的數(shù)據(jù)類型為0x01,表示各種標(biāo)志。 長度為2,因?yàn)橛袃蓚€(gè)字節(jié),數(shù)據(jù)類型和實(shí)際標(biāo)志值。 標(biāo)志值有幾位表示iBeacon的功能:

  • Bit0 - 表示LE有限的可發(fā)現(xiàn)模式(LE Limited Discoverable Mode)
  • Bit1 - 表示LE一般可發(fā)現(xiàn)模式(LE General Discoverable Mode)
  • Bit2 - 指示是否支持BR/EDR。 如果你的iBeacon是雙模式設(shè)備,則使用此功能
  • Bit3 - 指示LE和BR/EDR控制器是否同時(shí)運(yùn)行
  • Bit4 - 指示LE和BR/EDR主機(jī)是否同時(shí)運(yùn)行

大多數(shù)iBeacons是單模設(shè)備,BR/EDR不被使用。 對(duì)于iBeacons,使用通用可發(fā)現(xiàn)模式。

iBeacon數(shù)據(jù)類型

最重要的廣告數(shù)據(jù)類型是第二個(gè)。 第一個(gè)字節(jié)表示字節(jié)數(shù),總共26字節(jié)為0x1A,有效載荷為25字節(jié),類型為1字節(jié)。 AD類型是制造商特定的0xFF,所以蘋果已經(jīng)定義了自己的廣告數(shù)據(jù)。

前兩個(gè)字節(jié)表示公司標(biāo)識(shí)符0x4C00。 你也可以看到其他公司的標(biāo)識(shí)符 。

第二個(gè)兩字節(jié)是信標(biāo)廣告標(biāo)志。 這些總是0x02和0x15。

關(guān)鍵字段是iBeacon Proximity UUID,它獨(dú)特地標(biāo)識(shí)了iBeacon,后面是主要和次要(major and minor)字段。

每個(gè)iBeacon都必須擁有唯一的UUID,以便iPhone應(yīng)用程序可以準(zhǔn)確了解相對(duì)于一個(gè)或多個(gè)iBeacons的位置。

最后,還有一個(gè)校準(zhǔn)的TX功率(calibrated TX power)的2的補(bǔ)碼,可用于提高信標(biāo)的位置精度(已經(jīng)知道功率電平)。

沒有什么阻止你用不同的制造商格式創(chuàng)建自己的信標(biāo)。 問題是蘋果專門檢測(cè)具有特定格式的iBeacons,所以不會(huì)有任何互操作性。

結(jié)論

我們已經(jīng)介紹了一些最受歡迎的BLE和藍(lán)牙設(shè)備,其規(guī)格以及做出決定時(shí)要牢記的一些關(guān)鍵方面。

和往常一樣,在創(chuàng)建BLE產(chǎn)品時(shí),會(huì)有許多細(xì)節(jié)和問題發(fā)揮作用。 我們致力于幫助你完成正確的操作,請(qǐng)隨時(shí)與我們聯(lián)系討論。

參考

[1]藍(lán)牙特別興趣小組 藍(lán)牙v4.2規(guī)格。

[2] Apple Inc. iBeacon for Developers 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容