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