編者按:這個(gè)由兩部分組成的系列的第1部分詳細(xì)介紹了藍(lán)牙網(wǎng)格1.0協(xié)議的體系結(jié)構(gòu)和功能。在這里,第2部分介紹了如何將藍(lán)牙網(wǎng)絡(luò)集成到使用芯片和開(kāi)發(fā)套件的藍(lán)牙低功耗設(shè)計(jì)中。
藍(lán)牙網(wǎng)絡(luò)為流行的短程協(xié)議帶來(lái)了顯著的網(wǎng)絡(luò)優(yōu)勢(shì)。第1部分對(duì)此進(jìn)行了詳細(xì)討論。但是,規(guī)范也帶來(lái)了新的設(shè)計(jì)挑戰(zhàn),特別是在實(shí)現(xiàn)其模型時(shí)。
克服這些挑戰(zhàn)的關(guān)鍵在于利用升級(jí)的開(kāi)發(fā)工具來(lái)更好地了解藍(lán)牙網(wǎng)絡(luò)。本文介紹如何使用選擇的藍(lán)牙硬件和軟件,開(kāi)發(fā)套件(DK)和軟件開(kāi)發(fā)套件(SDK)來(lái)設(shè)置和構(gòu)建藍(lán)牙網(wǎng)格應(yīng)用程序。
藍(lán)牙網(wǎng)格開(kāi)發(fā)工具
藍(lán)牙網(wǎng)狀網(wǎng)絡(luò)堆棧包含一個(gè)全新的主機(jī)層,與BLE主機(jī)層共享一些概念,但與其不兼容。早期版本的藍(lán)牙網(wǎng)格堆?,F(xiàn)在可用于工程開(kāi)發(fā),通常作為SDK的一部分。
由于藍(lán)牙網(wǎng)絡(luò)是藍(lán)牙核心規(guī)范的補(bǔ)充規(guī)范,因此供應(yīng)商不需要更新其藍(lán)牙低功耗(BLE)物理層(PHY)或軟件堆棧來(lái)支持它。但是,添加藍(lán)牙網(wǎng)絡(luò)要求供應(yīng)商為他們的客戶推出他們自己的堆棧實(shí)現(xiàn)。
例如,BLE供應(yīng)商Nordic Semiconductor已經(jīng)推出了Mesh的nRF5 SDK。該套件包括一個(gè)藍(lán)牙網(wǎng)絡(luò)堆棧,選擇驅(qū)動(dòng)程序,庫(kù)和網(wǎng)格應(yīng)用程序的示例。該SDK的幾個(gè)集成開(kāi)發(fā)環(huán)境(IDE)和編譯器,包括工作SEGGER嵌入式工作室從套件含有Segger微控制器系統(tǒng)和CMake的。
由于藍(lán)牙網(wǎng)格兼容所有版本的BLE(即:4.0,4.1,4.2和5),Nordic的網(wǎng)格SDK最終將與其所有BLE芯片一起工作。但是,目前的版本僅適用于該公司最新的nRF52系列BLE解決方案,例如中檔藍(lán)牙5兼容nRF52832芯片。
由于BLE PHY或軟件堆棧沒(méi)有變化,因此可以在包含目標(biāo)設(shè)備的現(xiàn)有DK上執(zhí)行藍(lán)牙網(wǎng)格開(kāi)發(fā)工作。推薦用于nRF52832的DK是nRF52 DK(圖1)。
圖1:北歐半導(dǎo)體的網(wǎng)格SDK將與包含nRF52832 SoC目標(biāo)器件的nRF52 DK配合使用。(圖片來(lái)源:北歐半導(dǎo)體)
網(wǎng)格開(kāi)發(fā)需要至少三個(gè)(最好是更多)設(shè)備來(lái)進(jìn)行通信和模擬網(wǎng)狀環(huán)境。理想情況下,可以使用幾個(gè)DK來(lái)表示網(wǎng)格中的節(jié)點(diǎn),但是這具有顯著增加開(kāi)發(fā)硬件成本的缺點(diǎn)。另一種方法是使用一個(gè)DK并購(gòu)買(mǎi)經(jīng)測(cè)試和驗(yàn)證的BLE模塊(基于目標(biāo)設(shè)備)以形成附加節(jié)點(diǎn)。對(duì)于使用Nordic nRF52832進(jìn)行開(kāi)發(fā),Rigado的BMD-300或Laird的BL652-SA-01-T / R是很好的模塊選件。
賽普拉斯半導(dǎo)體對(duì)北歐采取了類似的方法。該公司為BCM92073XWICED Smart DK提供藍(lán)牙網(wǎng)格SDK,該DKM基于賽普拉斯的BCM20736S藍(lán)牙v4.1 PHY。基于此PHY的網(wǎng)格開(kāi)發(fā)工作的合適BLE模塊包括Inventek的ISM20736S。
了解模型
北歐和賽普拉斯的硬件,軟件和開(kāi)發(fā)工具均附有示例和教程,以指導(dǎo)開(kāi)發(fā)人員完成構(gòu)建簡(jiǎn)單的藍(lán)牙網(wǎng)格應(yīng)用程序的步驟。但是在開(kāi)始第一個(gè)設(shè)計(jì)之前,它有助于貫穿相關(guān)教程,以了解藍(lán)牙網(wǎng)格體系結(jié)構(gòu)的獨(dú)特特性,因?yàn)樗鼘?duì)設(shè)計(jì)過(guò)程有重大影響。
這些教程強(qiáng)調(diào),盡管藍(lán)牙網(wǎng)格節(jié)點(diǎn)有四種通用類型(參見(jiàn)這兩部分系列文章的第1部分),但每種類型的功能都取決于其模型。了解模型是充分利用藍(lán)牙網(wǎng)絡(luò)功能的關(guān)鍵。
藍(lán)牙網(wǎng)格提供了構(gòu)建新型網(wǎng)格應(yīng)用所需的靈活性,因?yàn)殚_(kāi)發(fā)人員可以構(gòu)建模型,使設(shè)備具有許多自定義行為。模型定義了所需的狀態(tài),作用于這些狀態(tài)的消息以及相關(guān)的行為。所有通過(guò)網(wǎng)狀網(wǎng)絡(luò)的通信都通過(guò)消息來(lái)促進(jìn)。
狀態(tài)是表示元素狀態(tài)的值。元素是設(shè)備或節(jié)點(diǎn)的可尋址實(shí)體。每個(gè)設(shè)備至少有一個(gè)(主要)元素,并可能有一個(gè)或多個(gè)次要元素。元素的數(shù)量和結(jié)構(gòu)在整個(gè)節(jié)點(diǎn)的生命周期中都不會(huì)改變。“暴露”狀態(tài)的元素稱為服務(wù)器。元素“訪問(wèn)”狀態(tài)被稱為客戶端。
重要的是,模型有三種類型;服務(wù)器,客戶端和控制。服務(wù)器模型由跨越一個(gè)或多個(gè)元素的一個(gè)或多個(gè)狀態(tài)組成。它定義了一組可發(fā)送或接收的強(qiáng)制性消息,發(fā)送和接收消息時(shí)的元素行為以及發(fā)送或接收消息后發(fā)生的任何其他行為。
客戶端模型定義了一組客戶端用于請(qǐng)求,更改或“消耗”相應(yīng)服務(wù)器狀態(tài)的消息,如服務(wù)器模型所定義的。客戶端模型沒(méi)有狀態(tài)。
控制模型可以結(jié)合客戶端模型功能(與其他服務(wù)器模型進(jìn)行通信)和服務(wù)器模型功能(與其他客戶端模型進(jìn)行通信)。控制模型還可能包含控制邏輯 - 一組規(guī)則和行為,用于協(xié)調(diào)控制模型與控制模型連接的其他模型之間的交互作用(圖2)。
圖2:所示為實(shí)現(xiàn)控制模型的藍(lán)牙網(wǎng)狀設(shè)備的元件模型結(jié)構(gòu)。設(shè)備C可以作為客戶端(分別為消息X,Y和Z以及消息R,S和T)與客戶端模型(在設(shè)備D內(nèi))作為服務(wù)器與服務(wù)器模型(設(shè)備A和B內(nèi))進(jìn)行通信(支持消息A,B和C)。(圖片來(lái)源:藍(lán)牙SIG)
為了說(shuō)明模型在實(shí)際應(yīng)用中的用途,考慮一個(gè)電源板,它包括兩個(gè)獨(dú)立的電源插座,每個(gè)電源插座都能夠控制功率輸出,并集成一個(gè)BLE收音機(jī),從而允許連接藍(lán)牙網(wǎng)絡(luò)。
該設(shè)備(電源板)具有兩個(gè)代表兩個(gè)電源插座的元件。每個(gè)元素的功能由通用功率級(jí)別服務(wù)器模型定義,該模型定義服務(wù)器上的一組狀態(tài),以及一組對(duì)這些狀態(tài)進(jìn)行操作的消息。通用功率電平設(shè)置消息可以被發(fā)送到設(shè)備以控制輸出功率。該消息被發(fā)送到一個(gè)套接字的元素。
套接字也可以由實(shí)現(xiàn)通用級(jí)客戶端模型的通用設(shè)備(如調(diào)光器)控制。該模型將期望水平設(shè)置為零,最大值或兩者之間的值。通過(guò)狀態(tài)綁定來(lái)控制插座的電源。在每個(gè)電源插座中,通用電源實(shí)際狀態(tài)都綁定到通用電平狀態(tài)。通用級(jí)客戶端將通用級(jí)消息發(fā)送到通用級(jí)服務(wù)器。通用級(jí)別狀態(tài)發(fā)生改變,反過(guò)來(lái)(通過(guò)已定義的綁定)改變控制功率輸出的通用功率實(shí)際狀態(tài)。
因?yàn)樵乜梢詧?bào)告狀態(tài),所以每個(gè)套接字可以報(bào)告功率水平以及插入插座的設(shè)備的能量消耗。使用Sensor Server模型定義的消息報(bào)告能耗。
構(gòu)建藍(lán)牙網(wǎng)狀網(wǎng)絡(luò)
假設(shè)開(kāi)發(fā)人員已經(jīng)對(duì)藍(lán)牙網(wǎng)格體系結(jié)構(gòu)和BLE開(kāi)發(fā)有所了解(請(qǐng)參閱Digi-Key文章:“藍(lán)牙4.1,4.2和5兼容的藍(lán)牙低功耗SoC和工具滿足IoT挑戰(zhàn)”以了解關(guān)于通用BLE設(shè)計(jì)的更多信息),并配備藍(lán)牙網(wǎng)格SDK,主機(jī)SDK,DK和附加模塊或DK來(lái)建立網(wǎng)絡(luò),開(kāi)發(fā)人員可以相對(duì)輕松地配置藍(lán)牙網(wǎng)格實(shí)現(xiàn)。
第一步是構(gòu)建網(wǎng)格堆棧。在北歐的情況下,堆棧是使用選定的IDE構(gòu)建的。例如,使用SEGGER Embedded Studio,通過(guò)使用Bluetooth mesh SDK中包含的一個(gè)示例(例如“l(fā)ight switch”示例)和使用IDE進(jìn)行編譯來(lái)構(gòu)建堆棧。
然后,DK上的目標(biāo)PHY被擦除,并用編譯的藍(lán)牙網(wǎng)格堆棧和BLE堆棧重新編程。一旦堆棧被編程和驗(yàn)證,SDK就可以用來(lái)設(shè)置和建立網(wǎng)狀網(wǎng)絡(luò)。
配置:Nordic的開(kāi)發(fā)工具包括配置應(yīng)用程序編程接口(API),用于將新設(shè)備添加到網(wǎng)狀網(wǎng)絡(luò)。供應(yīng)由供應(yīng)商(已經(jīng)連接到網(wǎng)絡(luò)并且先前為供應(yīng)任務(wù)配置的設(shè)備)處理,用于向新設(shè)備提供他們需要加入網(wǎng)狀網(wǎng)絡(luò)所需的信息。最初,設(shè)備提供了一個(gè)網(wǎng)絡(luò)密鑰,一個(gè)地址和一個(gè)設(shè)備密鑰,用于在配置之后建立用于配置的安全通道。
API允許開(kāi)發(fā)人員開(kāi)始監(jiān)聽(tīng)在BLE的三個(gè)廣告頻道中的一個(gè)上發(fā)送的未提供(或供應(yīng)商 - 要添加到網(wǎng)絡(luò)的設(shè)備)節(jié)點(diǎn)的廣播信標(biāo)。藍(lán)牙網(wǎng)格使用BLE的廣告通道而不是37個(gè)全帶寬數(shù)據(jù)通道傳輸和接收消息。通道上的入局鏈接請(qǐng)求將被自動(dòng)接受。
鏈接建立后,使用帶外(OOB)方法對(duì)其進(jìn)行身份驗(yàn)證,以確保加入網(wǎng)絡(luò)的設(shè)備是預(yù)期的目標(biāo)。使用OOB方法可以減少設(shè)備監(jiān)聽(tīng)BLE頻譜分配的“中間人”攻擊機(jī)會(huì)。API事件然后為設(shè)備提供配置數(shù)據(jù)和設(shè)備密鑰。
配置:Nordic的“燈開(kāi)關(guān)”應(yīng)用程序(包含在SDK中)顯示了如何開(kāi)發(fā)具有供應(yīng)者和供應(yīng)者角色的應(yīng)用程序。在演示中,一個(gè)燈開(kāi)關(guān)客戶端模型(開(kāi)關(guān))是供應(yīng)商,燈開(kāi)關(guān)服務(wù)器模型(燈泡)是供應(yīng)商。
Nordic的例子充分利用了藍(lán)牙網(wǎng)絡(luò)規(guī)范中最簡(jiǎn)單的服務(wù)器是Generic OnOff服務(wù)器的事實(shí),表示服務(wù)器處于開(kāi)啟或關(guān)閉狀態(tài)。例如,最簡(jiǎn)單的客戶端是通用OnOff客戶端,它能夠通過(guò)通用OnOff模型定義的消息來(lái)控制通用OnOff服務(wù)器。
當(dāng)此服務(wù)器模型從客戶端模型接收到GET或(可靠)SET消息時(shí),它將發(fā)送OnOff狀態(tài)的當(dāng)前值作為響應(yīng)。這可以使客戶端了解服務(wù)器狀態(tài)(圖3)。
Name定義操作碼描述參數(shù)參數(shù)大小組SIMPLE_ON_OFF_OPCODE_SET0xc1設(shè)置當(dāng)前的開(kāi)/關(guān)狀態(tài)新的狀態(tài)1個(gè)字節(jié)得到SIMPLE_ON_OFF_OPCODE_GET為0xC2獲取當(dāng)前的開(kāi)/關(guān)狀態(tài)N / A沒(méi)有參數(shù)SET不可靠SIMPLE_ON_OFF_OPCODE_SET_UNRELIABLE0xc3設(shè)置當(dāng)前的開(kāi)/關(guān)狀態(tài)新的狀態(tài)1個(gè)字節(jié)狀態(tài)SIMPLE_ON_OFF_OPCODE_STATUS0xc4包含當(dāng)前狀態(tài)當(dāng)前狀態(tài)1個(gè)字節(jié)圖3:通用OnOff模型支持的消息和ATT操作碼。(圖片來(lái)源:北歐半導(dǎo)體)
配置服務(wù)器用于表示設(shè)備的網(wǎng)狀網(wǎng)絡(luò)配置,并且是藍(lán)牙網(wǎng)狀節(jié)點(diǎn)的強(qiáng)制要求。配置服務(wù)器處理與配置客戶端(由配置器控制)的通信以及來(lái)自配置客戶端的指令。
配置完成后開(kāi)始配置。供應(yīng)商讀取供應(yīng)商的組成數(shù)據(jù)以識(shí)別設(shè)備的元數(shù)據(jù)以及哪些模型綁定到設(shè)備中的元素。接下來(lái),將應(yīng)用程序和/或網(wǎng)絡(luò)密鑰添加并綁定到不同的模型(圖4)。
圖4:nRF5 SDK for Mesh的配置和配置流程圖。“nrf_mesh ...”標(biāo)注是API函數(shù)。(圖片來(lái)源:北歐半導(dǎo)體)
向網(wǎng)絡(luò)添加更多設(shè)備僅僅是為每個(gè)新節(jié)點(diǎn)重復(fù)供應(yīng)和配置過(guò)程的情況。
發(fā)布和訂閱:設(shè)置和構(gòu)建初始應(yīng)用程序的最后階段是配置模型的發(fā)布狀態(tài)。例如,用于發(fā)布狀態(tài)事件的地址,使用什么密鑰,使用什么“生存時(shí)間”(TTL)值,以及設(shè)置訂閱。
消息在從每個(gè)模型的發(fā)布地址發(fā)布時(shí)發(fā)送。例如,通過(guò)傳感器節(jié)點(diǎn)定期報(bào)告數(shù)據(jù)來(lái)使用發(fā)布。消息只能發(fā)布一次或重復(fù)發(fā)送,并發(fā)送到單播,組或虛擬地址(請(qǐng)參閱本文的第1部分)。客戶機(jī)模型也使用發(fā)布向服務(wù)器模型發(fā)送消息。
發(fā)布相關(guān)狀態(tài)的配置通常由配置者通過(guò)配置模型來(lái)控制。
使用Nordic SDK時(shí),使用“access_model_publish()”API函數(shù)發(fā)布消息,該函數(shù)將根據(jù)發(fā)布模型的發(fā)布設(shè)置(間隔,目標(biāo))發(fā)布消息。
訂閱允許模型監(jiān)聽(tīng)來(lái)自特定地址的傳入消息。例如,這可用于偵聽(tīng)從傳感器節(jié)點(diǎn)發(fā)布的周期性消息。Nordic SDK允許模型通過(guò)使用“access_model_subscription_list_alloc()”API函數(shù)分配預(yù)訂列表來(lái)預(yù)訂地址。
請(qǐng)注意,使用客戶端模型時(shí),不需要訂閱發(fā)送消息的地址以接收對(duì)這些消息的回復(fù)。訂閱僅用于接收來(lái)自節(jié)點(diǎn)的未經(jīng)請(qǐng)求的消息。
在開(kāi)發(fā)過(guò)程中,將非藍(lán)牙網(wǎng)格功能的設(shè)備連接到藍(lán)牙網(wǎng)格可能會(huì)有所幫助。一個(gè)例子可能是開(kāi)發(fā)人員希望用來(lái)控制原型智能照明網(wǎng)格應(yīng)用的智能手機(jī)。手機(jī)和網(wǎng)狀網(wǎng)絡(luò)之間的互動(dòng)是通過(guò)藍(lán)牙堆棧中的智能電話和節(jié)點(diǎn)設(shè)備的通用屬性配置文件(GATT)接口實(shí)現(xiàn)的,而不是藍(lán)牙網(wǎng)狀網(wǎng)絡(luò)堆棧。
結(jié)論
藍(lán)牙網(wǎng)格為BLE應(yīng)用程序增加了新功能。然而,由于它不是原始核心規(guī)范的一部分,網(wǎng)格的采用已經(jīng)引入了一些折衷并增加了設(shè)計(jì)過(guò)程的一些復(fù)雜性。熟悉使用藍(lán)牙協(xié)議棧進(jìn)行設(shè)計(jì)的開(kāi)發(fā)人員對(duì)那些沒(méi)有知識(shí)的人來(lái)說(shuō)是一個(gè)優(yōu)勢(shì),但即使對(duì)于經(jīng)驗(yàn)豐富的工程師來(lái)說(shuō),實(shí)現(xiàn)藍(lán)牙網(wǎng)絡(luò)也需要學(xué)習(xí)一種新的體系結(jié)構(gòu)并了解它的細(xì)微差別,例如狀態(tài),元素和模型。
通過(guò)與Nordic半導(dǎo)體或賽普拉斯半導(dǎo)體等供應(yīng)商合作,可以緩解設(shè)計(jì)挑戰(zhàn)。這些供應(yīng)商現(xiàn)在已經(jīng)發(fā)布了藍(lán)牙網(wǎng)格堆棧,以補(bǔ)充他們成熟的BLE解決方案。該堆棧附帶有專門(mén)設(shè)計(jì)的軟件開(kāi)發(fā)工具包,可讓開(kāi)發(fā)人員使用他們熟悉的芯片,固件和設(shè)計(jì)工具加速設(shè)計(jì)藍(lán)牙網(wǎng)格應(yīng)用程序的學(xué)習(xí)過(guò)程。
參考
-
“Mesh Profile”,藍(lán)牙規(guī)范v1.0,藍(lán)牙SIG,2017年7月。
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5866瀏覽量
171029 -
低功耗
+關(guān)注
關(guān)注
10文章
2418瀏覽量
103862
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論