BLE模式和配置文件

BLE模式和配置文件(原文

本文檔探討了BLE如何工作棚赔,特別是如何將兩種BLE模式(連接和廣告)用于不同的目的焕济。

外圍設(shè)備和中央設(shè)備vs服務(wù)器和客戶端

當(dāng)我們通過(guò)BLE連接設(shè)備時(shí)绍弟,我們將它們視為外設(shè)(從設(shè)備)設(shè)備或中央(主設(shè)備)設(shè)備杏死。 藍(lán)牙標(biāo)準(zhǔn)建立了該區(qū)分方式以匹配設(shè)備上可用的資源:

  • 主設(shè)備/中央

通常將具有更多的計(jì)算資源和可用能量 - 例如計(jì)算機(jī)或平板電腦厢岂。

  • 從設(shè)備/外設(shè)

一個(gè)mbed設(shè)備 - 將在計(jì)算資源和能源兩個(gè)方面受限制。

目前楚堤,mbed的BLE_API支持創(chuàng)建外設(shè)疫蔓。 我們計(jì)劃盡快將其擴(kuò)展到中央設(shè)備。

BLE使用兩個(gè)附加術(shù)語(yǔ)來(lái)描述連接實(shí)體 - 服務(wù)器和客戶端:

  • 服務(wù)器

該設(shè)備具有希望共享的信息身冬,且對(duì)于BLE而言通常是外設(shè)(如mbed板子)鳄袍。

  • 客戶端

需要信息和服務(wù)的設(shè)備,且對(duì)于BLE而言通常是中央設(shè)備 - 例如電話吏恭。

在討論信息交流時(shí),我們使用術(shù)語(yǔ)服務(wù)器客戶端 重罪。 我們使用中央外設(shè)來(lái)表示BLE連接的起點(diǎn)和目標(biāo)樱哼。 中央作為客戶端連接哀九,外圍設(shè)備作為服務(wù)器并不罕見。

服務(wù)器和客戶端
服務(wù)器和客戶端

mbed板是服務(wù)器或外設(shè);手機(jī)是客戶端和中央設(shè)備“)

啟動(dòng)連接

中央啟動(dòng)搅幅,控制和結(jié)束連接 - 外設(shè)不能強(qiáng)制中央執(zhí)行(掃描BLE設(shè)備阅束,查看其信息,連接等)茄唐。 中央還決定詢問外圍設(shè)備的頻度息裸。 然而,外設(shè)可以向中央推薦一些東西沪编。 有關(guān)這些決定的更多信息呼盆,請(qǐng)參閱連接參數(shù)部分

廣告和連接模式

BLE使用的兩種模式是:

  • 廣告模式

外設(shè)會(huì)發(fā)出該區(qū)域任何設(shè)備可以接收到的信息蚁廓。 這是中央設(shè)備如何知道周圍有外圍設(shè)備的方式访圃。

  • 連接模式

外設(shè)和中央設(shè)備建立一對(duì)一的對(duì)話。 這就是他們?nèi)绾谓粨Q復(fù)雜的信息的方式相嵌。

中央設(shè)備必須知道外圍設(shè)備存在才能與之連接腿时。 因此,外設(shè)將使用BLE 廣告模式發(fā)布其存在饭宾。 在這種模式下批糟,設(shè)備使用通用訪問配置文件 (GAP)以穩(wěn)定的速率發(fā)送一些信息 —— 一個(gè)廣告。 這個(gè)廣告是其他設(shè)備看铆,像你的手機(jī)徽鼎,接收到的。 它告訴他們附近有一個(gè)BLE設(shè)備存在性湿,以及該設(shè)備是否愿意與他們交談纬傲。

廣告模式是一對(duì)多的,而連接模式是一對(duì)一的肤频。
廣告模式是一對(duì)多的叹括,而連接模式是一對(duì)一的。

廣告模式數(shù)據(jù)包大小非常有限宵荒。 GAP廣播的一般數(shù)據(jù)包格式如下圖所示:

BLE協(xié)議棧占用了47B數(shù)據(jù)包的一部分汁雷,直到我們的數(shù)據(jù)只有26B
BLE協(xié)議棧占用了47B數(shù)據(jù)包的一部分,直到我們的數(shù)據(jù)只有26B

每個(gè)BLE包可以包含最多47個(gè)字節(jié)(這不是很多)报咳,我們不能使用它們的全部:

  1. 為了自己的目的侠讯,BLE協(xié)議棧需要8個(gè)字節(jié)(1 + 4 + 3)。

  2. 因此暑刃,廣告分組數(shù)據(jù)單元(PDU)最多具有39個(gè)字節(jié)厢漩。 但是BLE棧再次需要一些開銷,占用8個(gè)字節(jié)(2 + 6)岩臣。

  3. PDU的廣告數(shù)據(jù)字段剩下31個(gè)字節(jié)溜嗜,分為廣告數(shù)據(jù)(AD)結(jié)構(gòu)宵膨。 然后:

    • GAP廣播必須包含告訴設(shè)備有關(guān)我們發(fā)送的廣告類型的標(biāo)志。 標(biāo)志結(jié)構(gòu)總共使用三個(gè)部分(一個(gè)用于數(shù)據(jù)長(zhǎng)度炸宵,一個(gè)用于數(shù)據(jù)類型辟躏,一個(gè)用于數(shù)據(jù)本身)。 我們需要前兩個(gè)字節(jié)(數(shù)據(jù)長(zhǎng)度和類型指示)的原因是幫助解析器來(lái)使用我們的標(biāo)志信息正常工作土全。 我們還剩下28個(gè)字節(jié)捎琐。

    • 現(xiàn)在我們終于用自己的數(shù)據(jù)結(jié)構(gòu)發(fā)送自己的數(shù)據(jù)了 - 但是它也需要一個(gè)長(zhǎng)度和類型的指示(總共兩個(gè)字節(jié)),所以我們只剩下26個(gè)字節(jié)裹匙。

所有這些意味著我們只有26B用于通過(guò)GAP發(fā)送的數(shù)據(jù)瑞凑。

如果您想查看AD的示例,請(qǐng)參閱自定義GAP廣告部分中的擴(kuò)展說(shuō)明幻件。

對(duì)于許多應(yīng)用拨黔,廣告可能是需要的一切。 這可能是:

  • 外圍設(shè)備只想周期性地廣播可以適應(yīng)廣告的少量信息绰沥。
  • 無(wú)論身份驗(yàn)證如何篱蝇,這些數(shù)據(jù)都可用于范圍內(nèi)的任何中央設(shè)備。

但是徽曲,有時(shí)候零截,您需要提供比單向數(shù)據(jù)傳輸更多的信息或更復(fù)雜的交互。 為此秃臣,您需要在BLE設(shè)備和用戶的手機(jī)涧衙,平板電腦或計(jì)算機(jī)之間設(shè)置“對(duì)話”。該會(huì)話基于連接模式 奥此,其描述了僅兩個(gè)設(shè)備之間的關(guān)系:BLE外圍設(shè)備和中央設(shè)備弧哎。

目前,廣告和連接模式還不能共存稚虎。 這是因?yàn)锽LE外圍設(shè)備一次只能連接到一個(gè)中央設(shè)備(如移動(dòng)電話)撤嫩。 連接建立的時(shí)刻,BLE外設(shè)將停止廣告蠢终。 在這一點(diǎn)上序攘,沒有其他中央設(shè)備能夠連接到它,因?yàn)槿绻粡V告寻拂,他們不能發(fā)現(xiàn)該設(shè)備在那里程奠。 只有在第一個(gè)連接終止并且BLE外圍設(shè)備再次開始廣告之后,才能建立新的連接祭钉。

注意:最新的藍(lán)牙標(biāo)準(zhǔn)允許廣告并行連接瞄沙,這將在2015年底之前成為mbed的BLE_API的一部分。

服務(wù)和配置文件(GATT)

為了使上述通信的功耗較低,BLE規(guī)范在連接模式下交換數(shù)據(jù)的方式施加了特定的結(jié)構(gòu)帕识。 它依賴于BLE外設(shè)維護(hù)客戶端可以訪問的狀態(tài)變量數(shù)據(jù)庫(kù)(如電池電量泛粹,溫度和時(shí)間)的能力。 我們可以根據(jù)功能將狀態(tài)變量分組到服務(wù)中肮疗。 例如,心率服務(wù)是狀態(tài)變量的集合扒接,包括心率測(cè)量身體傳感器位置伪货。 這些狀態(tài)變量的技術(shù)術(shù)語(yǔ)是“特征(Characteristics)”。 為了互操作性钾怔,每個(gè)特征(Characteristics)也包含了值類型的描述碱呼。 這樣客戶端就可以解釋這個(gè)值,即使它們沒有被特別編程來(lái)識(shí)別它宗侦。

單一服務(wù)可以包含幾個(gè)特征
單一服務(wù)可以包含幾個(gè)特征

服務(wù)愚臀,特征及其配套屬性是連接方式的基本實(shí)體。 服務(wù)使用通用屬性配置文件(Generic Attribute Profile矾利,GATT)根據(jù)特征來(lái)組織信息姑裂。 我們將在下面更詳細(xì)地探索特征。

我們將服務(wù)捆綁到一個(gè)配置文件中 男旗。 例如舶斧,心率配置文件(Heart Rate Profile)包括兩個(gè)服務(wù) - 心率和設(shè)備信息(Heart Rate and Device Information),血壓配置文件(Blood Pressure Profile)包括血壓和設(shè)備信息(Blood Pressure and Device Information)服務(wù)察皇。

具有兩個(gè)服務(wù)的示例配置文件
具有兩個(gè)服務(wù)的示例配置文件

BLE已經(jīng)有一段時(shí)間了茴厉,所以它有一些標(biāo)準(zhǔn)的服務(wù),你可以進(jìn)入什荣。 回到我們的心率監(jiān)測(cè)器的例子矾缓,心率服務(wù)是完善的,易于使用稻爬。 它可以從BLE心率監(jiān)測(cè)器讀取信息并將其發(fā)送到應(yīng)用程序嗜闻。 你會(huì)在稍后的編碼示例中看到。

在開始研究項(xiàng)目之前因篇,值得看看是否已經(jīng)有可以完成所需功能的服務(wù)了; 它會(huì)節(jié)省大量的編碼和測(cè)試時(shí)間泞辐。 您可以在這里找到可用的配置文件和服務(wù)列表。

特征和相互作用

服務(wù)將數(shù)據(jù)分解為特征 竞滓。 每個(gè)特征映射到單個(gè)數(shù)據(jù)點(diǎn):它告訴你一件事咐吼,只有一件事。 例如商佑, 設(shè)備信息服務(wù)具有以下特征:

  • 制造商名稱
  • 型號(hào)
  • 序列號(hào)
  • 硬件版本
  • 固件版本
  • 軟件版本
  • 系統(tǒng)ID
  • IEEE 11073-20601監(jiān)管認(rèn)證資料清單(regulatory certification data list)

這些特征中的每一個(gè)應(yīng)該只包含其標(biāo)簽所包含的信息锯茄。 他們一起揭示設(shè)備的制造商信息,并組成一個(gè)完整的設(shè)備信息服務(wù)。 此服務(wù)本身捆綁在不同的配置文件中肌幽。

在mbed上創(chuàng)建一個(gè)特征非常簡(jiǎn)單晚碾,因?yàn)锽LE_API為涉及服務(wù)定義的實(shí)體提供C++抽象。 例如喂急,這里我們創(chuàng)建一個(gè)簡(jiǎn)單的特征格嘁,通知客戶一個(gè)按鈕的狀態(tài)(按下/釋放):

//button initial state
bool buttonPressed = false; 
//read-only characteristic of type boolean, 
//accepting the buttonState’s UUID and initial value
ReadOnlyGattCharacteristic<bool> buttonState(BUTTON_STATE_CHARACTERISTIC_UUID, 
    &buttonPressed);

有關(guān)mbed的特征創(chuàng)建的完整展示,請(qǐng)參閱我們的輸入服務(wù)模板 廊移。

特征完全由其聲明糕簿,值和描述符定義:

  • 聲明包含有關(guān)特征的數(shù)據(jù),例如其通用唯一標(biāo)識(shí)符(UUID)狡孔。

  • 是特征的“有趣”部分:它是包含您正在查看和響應(yīng)的數(shù)據(jù)的值懂诗。

  • ** 描述符**不是強(qiáng)制性的; 您可以使用它來(lái)提供有關(guān)特征的更多信息或控制其行為。 例如苗膝,在使用通知時(shí)使用描述符殃恒。

特征可以是靜態(tài)的(如設(shè)備的制造商名稱)或動(dòng)態(tài)的。 如果一個(gè)特征是動(dòng)態(tài)的辱揭,當(dāng)設(shè)備有新的信息時(shí)离唐,您的設(shè)備可以為它生成一個(gè)新的值。 例如界阁,在心率服務(wù)中侯繁, 當(dāng)前心率是定期獲得新值的特征。

以下是創(chuàng)建讀/寫特征(可以接收新值并顯示其當(dāng)前值的特征)的示例:

bool initialValueForLEDCharacteristic = false;
ReadWriteGattCharacteristic<bool> ledState(LED_STATE_CHARACTERISTIC_UUID, 
    &initialValueForLEDCharacteristic);

有關(guān)在mbed上創(chuàng)建讀/寫特征的信息泡躯,請(qǐng)參閱我們的執(zhí)行器服務(wù)模板 贮竟。

一些特征是雙向?qū)嶓w。 這意味著服務(wù)器(BLE外設(shè))可以自己更新较剃,也可以從客戶端(手機(jī))接收新的值咕别。 這種雙向流量使BLE具有交互性:用戶向一個(gè)或多個(gè)特征發(fā)送新值,并且設(shè)備響應(yīng)這些新值写穴。 例如惰拱,當(dāng)UriBeacon設(shè)備打開時(shí),它進(jìn)入臨時(shí)配置模式(configuration mode) 啊送,讓我們有機(jī)會(huì)更新其特征的值(包含稍后公布的數(shù)據(jù))偿短。

對(duì)于每個(gè)特征,服務(wù)定義說(shuō)明客戶端是否有權(quán)寫入該特征馋没。 這是在外設(shè)上設(shè)置GATT服務(wù)器時(shí)完成的昔逗。 在我們的示例中, 配置模式(configuration mode)指出廣告信息是可讀/寫的篷朵, 廣告模式表示它是只讀的勾怒。 因此婆排,根據(jù)設(shè)備的模式,相同的特征可以具有兩種不同的權(quán)限笔链。

UUID

每個(gè)服務(wù)和特征都需要一個(gè)普遍唯一的標(biāo)識(shí)符(UUID)段只,它們?cè)诼暶髦辛谐觯ㄈ缟纤觯?對(duì)于BLE官方實(shí)體,UUID為16位鉴扫,BLE站點(diǎn)上提供了完整的列表赞枕,以獲取服務(wù)特性 。 對(duì)于您自己創(chuàng)建的服務(wù)和特征坪创,您將需要128位UUID; 您可以在UTI網(wǎng)站上生成鹦赎。

有關(guān)UUID分配的更多信息,請(qǐng)參見我們的服務(wù)創(chuàng)建示例 误堡。

配置文件,服務(wù)和特征的總結(jié)

因此雏吭,配置文件的完整拆分是:一個(gè)或多個(gè)服務(wù)锁施,每個(gè)服務(wù)包含零個(gè)或多個(gè)特征,每個(gè)特征具有零個(gè)或多個(gè)描述符:

單個(gè)配置文件可以包含多個(gè)服務(wù)杖们,并且每個(gè)服務(wù)可以包含幾個(gè)特征
單個(gè)配置文件可以包含多個(gè)服務(wù)悉抵,并且每個(gè)服務(wù)可以包含幾個(gè)特征
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摘完,隨后出現(xiàn)的幾起案子姥饰,更是在濱河造成了極大的恐慌,老刑警劉巖孝治,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件列粪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谈飒,警方通過(guò)查閱死者的電腦和手機(jī)岂座,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杭措,“玉大人费什,你說(shuō)我怎么就攤上這事∈炙兀” “怎么了鸳址?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)泉懦。 經(jīng)常有香客問我稿黍,道長(zhǎng),這世上最難降的妖魔是什么祠斧? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任闻察,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辕漂。我一直安慰自己呢灶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布钉嘹。 她就那樣靜靜地躺著鸯乃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跋涣。 梳的紋絲不亂的頭發(fā)上缨睡,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音陈辱,去河邊找鬼奖年。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沛贪,可吹牛的內(nèi)容都是我干的陋守。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼利赋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼水评!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起媚送,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤中燥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后塘偎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疗涉,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年式塌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了博敬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峰尝,死狀恐怖偏窝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情武学,我是刑警寧澤祭往,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站火窒,受9級(jí)特大地震影響硼补,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熏矿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一已骇、第九天 我趴在偏房一處隱蔽的房頂上張望离钝。 院中可真熱鬧,春花似錦褪储、人聲如沸卵渴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浪读。三九已至,卻和暖如春辛藻,著一層夾襖步出監(jiān)牢的瞬間碘橘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工吱肌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痘拆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓氮墨,卻偏偏與公主長(zhǎng)得像错负,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勇边,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • BLE廣告和信標(biāo) (原文) BLE廣告是藍(lán)牙低功耗最重要的方面之一。 了解如何正確使用廣告可以幫助你降低功耗折联,加快...
    公子小水閱讀 3,417評(píng)論 1 3
  • Key Terms And Concepts 關(guān)鍵術(shù)語(yǔ)和概念 Here is a summary of key B...
    Jaesoon閱讀 2,432評(píng)論 0 5
  • 藍(lán)牙 藍(lán)牙的波段為2400-2483.5MHz(包括防護(hù)頻帶)粒褒。這是全球范圍內(nèi)無(wú)需取得執(zhí)照(但定不是無(wú)管制的)的工...
    蘇永茂閱讀 6,171評(píng)論 0 11
  • 背景 藍(lán)牙歷史說(shuō)到藍(lán)牙,就不得不說(shuō)下藍(lán)牙技術(shù)聯(lián)盟(Bluetooth SIG),它負(fù)責(zé)藍(lán)牙規(guī)范制定和推廣的國(guó)際組織...
    徐正峰閱讀 12,389評(píng)論 6 33
  • 習(xí)慣七 不斷更新 【人生最值得的投資就是磨煉自己诚镰,因?yàn)樯钆c服務(wù)人群都得靠自己奕坟,這是最珍貴的工具。 工作本身并不能...
    雪23閱讀 306評(píng)論 0 0