使用藍牙網狀網路設計低功耗藍牙智慧應用 - 第 2 部

資料提供者:DigiKey 北美編輯群

編者說明:本系列文章分為兩部分,第 1 部詳細說明了藍牙網狀網路 1.0 協定的架構與功能。而本文乃是該系列的第 2 部,將說明如何使用晶片與開發套件,將藍牙網狀網路整合入低功耗藍牙設計當中。

藍牙網狀網路將顯著的連網優勢帶到熱門的短距協定裡。這些內容均已在第 1 部分詳細介紹過。不過,該規格也帶來了全新的設計挑戰,特別是在模型的實作方面。

而要克服這些挑戰,關鍵在於徹底善用經過升級的開發工具,以更加熟悉藍牙網狀網路。本文將介紹如何使用精選的藍牙硬體與軟體、開發套件 (DK) 及軟體開發套件 (SDK) 來設置並建立藍牙網狀網路應用。

藍牙網狀網路開發工具

藍牙網狀網路堆疊包含一個全新的主機層,此層與低功耗藍牙主機層具有一些相同的概念,但卻不與其相容。舊版的藍牙網狀網路堆疊如今逐漸可供工程開發使用 (通常做為 SDK 的一部分)。

因為藍牙網狀網路是藍牙核心規格的補充規格,供應商不需更新自己的低功耗藍牙 (BLE) 實體層 (PHY) 或軟體堆疊便可予以支援。然而,如果供應商要增加藍牙網狀網路,就必須為其客戶引入自己的堆疊實作。

舉例來說,低功耗藍牙供應商 Nordic Semiconductor 引入了 nRF5 SDK for Mesh。這個套件包含藍牙網狀網路堆疊,精選的驅動程式、程式庫與網狀網路範例。此 SDK 可在幾個整合的開發環境 (IDE) 與編譯器上運作,包括 SEGGER Embedded Studio (由 Segger Microcontroller Systems 開發) 與 CMake。

由於藍牙網狀網路與所有低功耗藍牙版本 (即 4.0、4.1、4.2、5) 相容,Nordic 的網狀網路 SDK 終究將能與所有低功耗藍牙晶片一起使用。然而,目前的版本只能與該公司最新的 nRF52 系列低功耗藍牙解決方案一起使用,例如與中程距離藍牙 5 相容的 nRF52832 晶片。

由於未對低功耗藍牙實體層或軟體堆疊作出任何變更,藍牙網狀網路開發工作可在合併了目標裝置的現有 DK 上進行。建議為 nRF52832 使用 nRF52 DK (圖 1)。

Nordic Semiconductor 的 nRF52 DK 的圖片

圖 1:Nordic Semiconductor 的網狀網路 SDK,能與合併了 nRF52832 SoC 目標裝置的 nRF52 DK 搭配使用。(圖片來源:Nordic Semiconductor)

要進行網狀網路開發,至少需要有三個裝置 (若有更多最好) 來進行通訊及模擬網狀網路環境。雖然理想上可部署數個 DK 來代表網狀網路中的節點,但這樣做的缺點是會顯著拉高開發硬體的成本。另一個方法是使用一個 DK 並購買經測試驗證的低功耗藍牙模組 (視目標裝置而定),以形成額外的節點。要搭配 Nordic nRF52832 進行開發,Rigado 的 BMD-300LairdBL652-SA-01-T/R 都是不錯的模組選項。

Cypress Semiconductor 採用的作法與 Nordic 類似。該公司為自己的 BCM92073X WICED Smart DK 提供藍牙網狀網路 SDK,而該產品是以 Cypress 的 BCM20736S Bluetooth v4.1 PHY 為基礎。以此 PHY 作為基礎且適用於網狀網路開發工作的低功耗藍牙模組包括 InventekISM20736S

瞭解模型

Nordic 與 Cypress 的硬體、軟體與開發工具都附有範例與教學,以引導開發人員一步一步建立簡單的藍牙網狀網路應用。但在第一次設計之前,先瀏覽相關的教學以了解藍牙網狀網路架構的獨特性質會很有幫助,因為這對設計流程有重大影響。

此類教學指出,雖然藍牙網狀網路節點有四種一般類型 (請見本系列文章第 1 部分),但每一個類型的功能都由自己的模型決定。瞭解模型是徹底善用藍牙網狀網路功能的關鍵。

藍牙網狀網路可提供建立新型網狀網路應用所需的彈性,因為開發人員能夠建造出讓裝置具有許多客製化行為的模型。模型定義了必要的狀態、對這些狀態採取動作的訊息,以及相關的行為。訊息是網狀網路上所有通訊的推手。

狀態是一個代表元素狀況的值。元素則是一個可尋址的裝置實體或節點實體。每個裝置都至少有一個 (主要) 元素,並且可能有一個或多個次要元素。元素的數量和結構在節點的整個壽命期間都不會發生變更。一個「曝露」狀態的元素稱作伺服器。一個「存取」狀態的元素稱作用戶端。

重點在於,模型有三種類型,包括伺服器、用戶端與控制類型。伺服器模型是由一個或多個跨越一個或多個元素的狀態所構成。伺服器模型定義了一組此模型可發送或接收的必要訊息,並定義了在收發這些訊息時的元素行為,以及在發送或接收訊息後所發生的任何其他行為。

用戶端模型也定義了一組訊息,用戶端可利用這組訊息來請求、變更或「消耗」如伺服器模型定義的對應伺服器狀態。用戶端模型並無狀態。

控制模型能結合用戶端模型功能 (以便與其他伺服器模型通訊),以及伺服器模型功能 (以便與其他用戶端模型通訊)。控制模型也可能具有控制邏輯。控制邏輯乃是一組規則與行為,能協調控制模型和其他與控制模型連線的模型之間的互動 (圖 2)。

藍牙網狀網路裝置的元素模型結構圖

圖 2:此處展示了實作控制模型的藍牙網狀網路裝置元素模型結構。裝置 C 能以用戶端的身分與裝置 A 及 B 內的伺服器模型通訊 (分別為訊息 X、Y、Z,以及訊息 R、S、T),並以伺服器的身分與裝置 D 內的用戶端模型通訊 (支援訊息 A、B、C)。(圖片來源:藍牙技術聯盟)

為了實際範例描述模型的使用,請試想一個由兩個獨立電源插槽所組成的電源排插,各插槽都能控制功率輸出,並整合低功耗藍牙無線電,讓排插得以與藍牙網狀網路連線。

該裝置 (電源排插) 具有兩個元素,分別代表兩個電源插槽。每個元素的功能性由「一般功率層級伺服器」模型所定義,而該模型界定了伺服器上的一組狀態,以及一組在這些狀態上起作用的訊息。「一般功率層級組」訊息可傳送到裝置以控制輸出功率。該訊息會傳送到插槽的其中一個元素。

插槽也可受實作「一般層級用戶端」模型的一般裝置 (如調光器) 所控制。這個模型將所需的層級設為零、最大值,或之間的某個值。傳送至插槽的功率透過狀態繫結所控制。在每個電源插槽中,「一般功率實際值」狀態繫結至「一般層級」狀態。「一般層級用戶端」將「一般層級」訊息傳送到「一般層級伺服器」。變更「一般層級」狀態後,進而就會透過定義的繫結,變更控制著功率輸出的「一般功率實際值」狀態。

由於元素可以回報狀態,因此每個插槽都可以回報功率層級,亦可回報插入插槽內之裝置的能源消耗量。能源消耗量利用「感測器伺服器」模型所定義的訊息來回報。

建立藍牙網狀網路

假設開發人員已熟悉藍牙網狀網路的架構與低功耗藍牙的開發 (請參閱 DigiKey 文章:「藍牙 4.1、4.2 和 5 相容的低功耗藍牙 SoC 與工具能克服物聯網挑戰」以進一步了解一般低功耗藍牙設計),並且具有藍牙網狀網路 SDK、主機 SDK、DK 和額外的模組或 DK 以設置網路,那麼開發人員就能相對輕易地進行藍牙網狀網路實作的設定。

第一步是建立網狀網路堆疊。在 Nordic 的案例中,堆疊是利用所選的 IDE 建立而成的。舉例來說,在 SEGGER Embedded Studio 的情況下,堆疊的建立方式是使用藍牙網狀網路 SDK 隨附的其中一個範例 (如「電燈開關」一例),再利用 IDE 進行編譯。

DK 上的目標實體層接著會被抹除,並以編譯完成之藍牙網狀網路堆疊與低功耗藍牙堆疊來重新編程。一旦堆疊經過編程和確認後,便可使用 SDK 來設置與建立網狀網路。

佈建:Nordic 的開發工具包括佈建性應用程式開發介面 (API),可為網狀網路添加新的裝置。佈建是由佈建者處理的,佈建者是指已經連上網路並事先為佈建任務完成設定的裝置,可用於為新的裝置提供該裝置加入網狀網路所需之資訊。一開始,裝置會收到網路金鑰、位址與裝置金鑰以建立一個安全通道,用於佈建後進行設定。

低功耗藍牙三個廣播通道的其中一個通道上會傳送未經佈建之節點 (或接受佈建者,即欲增添至網路中的裝置) 的廣播信標,而 API 讓開發人員能夠開始注意聆聽此廣播信標。藍牙網狀網路會使用低功耗藍牙的廣播通道傳送及接收訊息,而不是使用 37 個完整頻寬的資料通道。通道上若有傳入的連結請求,就會自動由佈建者接受。

建立連結以後,就會以頻外 (OOB) 方式驗證該連結,確保加入網路中的裝置就是預定目標。有些裝置會在低功耗藍牙的頻譜分配上聆聽,使用頻外方式則能減少此類裝置發動「中間人攻擊」的機會。API 事件之後會為裝置提供佈建資料與裝置金鑰。

設定:Nordic 的「電燈開關」應用 (含在 SDK 裡),顯示了如何開發同時具有佈建者與接受佈建者角色的應用。在展示中,電燈開關用戶端模型 (開關) 為佈建者,而電燈開關伺服器模型 (燈泡) 為接受佈建者。

Nordic 的例子徹底展示出以下事實,即藍牙網狀網路規格中最簡單的伺服器為一般開關伺服器,代表伺服器處於或開或關之狀態。舉例來說,最簡單的用戶端為一般開關用戶端,此用戶端能透過一般開關模型所定義的訊息來控制一般開關伺服器。

當此伺服器模型從用戶端模型收到 GET 或 (可靠的) SET 訊息時,就會傳送開關狀態的現行值作為回應。如此一來,用戶端便能隨時知道伺服器的最新狀態 (圖 3)。

名稱 定義 運算碼 說明 參數 參數大小
SET SIMPLE_ON_OFF_OPCODE_SET 0xc1 設定現行開/關狀態 新狀態 1 位元組
GET SIMPLE_ON_OFF_OPCODE_GET 0xc2 取得現行開/關狀態 不適用 無參數
SET UNRELIABLE SIMPLE_ON_OFF_OPCODE_SET_UNRELIABLE 0xc3 設定現行開/關狀態 新狀態 1 位元組
狀態 SIMPLE_ON_OFF_OPCODE_STATUS 0xc4 含有現行狀態 現行狀態 1 位元組

圖 3:由一般開關模型支援的訊息與 ATT 運算碼。(圖片來源:Nordic Semiconductor)

設定伺服器可用來代表一個裝置的網狀網路設定,是藍牙網狀網路節點的必要條件。設定伺服器會處理與佈建者所控制的設定用戶端之間的通訊,並處理來自該設定用戶端的指示。

設定會在佈建完成後進行。佈建者會讀取接受佈建者的構成資料,以辨識出裝置的中繼資料以及哪些模型與裝置裡的哪個元素繫結。接著會將應用和/或網路金鑰加入並繫結到不同的模型上 (圖 4)。

nRF5 SDK for Mesh 的設定流程圖

圖 4:nRF5 SDK for Mesh 的佈建與設定流程圖。「nrf_mesh…」呼叫為 API 函式。(圖片來源:Nordic Semiconductor)

只要重複為每個節點進行佈建與設定程序,就可以在網路上新增更多裝置。

發佈與訂閱:設定與建立初始應用的最後一個階段是設定模型的發佈狀態。舉例來說,用來發佈狀態事件的位址、使用何種金鑰、使用何種「存活時間」(TTL) 值,以及設定訂閱。

當從各模型的發佈位址發佈訊息時,即會傳送該訊息。舉例來說,發佈功能會被定期進行資料回報的感測器節點所使用。訊息可以只發佈一次或重複發佈,並傳送至單點傳播、群組或虛擬位址 (請參見本文第 1 部分)。用戶端模型也會使用發佈功能將訊息傳送至伺服器模型。

發佈相關狀態的設定,通常是由佈建者透過設定模型來進行控制。

使用 Nordic SDK 時,訊息是以 API 函式「access_model_publish()」來進行發佈,此函式會依照發佈模型的發佈設定 (間隔、目的地) 來發佈訊息。

訂閱功能讓模型能夠聆聽來自特定位址的傳入訊息。舉例來說,這可用來聆聽從感測器節點發佈的定期訊息等等。Nordic SDK 能使用「access_model_subscription_list_alloc()」API 函式來分配訂閱清單,讓模型能訂閱位址。

請注意,使用用戶端模型時,不需要訂閱正在發送訊息的位址,亦可接收這些訊息的回覆。訂閱功能只是讓人不用請求就可從節點接收訊息。

若在開發過程中將未啟用藍牙網狀網路的裝置連線到藍牙網狀網路,可能會有所幫助。舉例來說,開發人員可能會想使用智慧型手機來控制原型智慧型照明網狀網路應用。行動電話與網狀網路之間的互動,可透過智慧型手機與節點裝置兩者在藍牙堆疊裡的泛型屬性設定檔 (GATT) 介面達成,而不是透過藍牙網狀網路堆疊達成。

結論

藍牙網狀網路可為低功耗藍牙應用添加新的功能。但此網狀網路並不是原始核心規格的一部分,因此網狀網路的加入造成了一些取捨,設計過程也變得更複雜一點。雖然熟悉使用藍牙協定堆疊進行設計的開發人員,與不懂的使用者相比具有優勢,但即便是經驗豐富的工程師,也需要先學習新架構並了解其細微差異 (如狀態、元素與模型),才能實作藍牙網狀網路。

如果與 Nordic Semiconductor 或 Cypress Semiconductor 等供應商合作,即可輕鬆因應這項設計挑戰。這些供應商已經發佈藍牙網狀網路堆疊,來補全其成熟的低功耗藍牙解決方案。這些堆疊附有專為特定目的設計的 SDK,讓使用者能夠使用自己熟悉的晶片、韌體與設計工具,來加快設計藍牙網狀網路應用的學習過程。

參考資料

  1. 網狀網路設定檔」,藍牙規格 v1.0,藍牙技術聯盟,2017 年 7 月。
DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於出版者

DigiKey 北美編輯群