借助藍牙 5 的網狀網絡功能,開發人員可以增強無線連接系統(如物聯網設備)的通信范圍和網絡可用性。但是,網狀網絡的低功耗無線硬件設計與網狀網絡軟件開發之間存在著復雜的層次,這可能會使開發人員迅速陷入混亂并危及項目進度。
隨著支持藍牙 5 的智能手機和其他移動平臺的出現,時間成為一個關鍵因素,因為幾乎所有行業領域和應用對藍牙網狀網絡能力都有需求,而且預計需求會爆炸式增長,開發人員需要快速響應。作為回應,硅片和軟件供應商正在推出簡化和加速開發流程的解決方案。
本文將概述藍牙網狀網絡的基本原理,然后使用 Silicon Labs 支持網狀網絡的藍牙 5 模塊系列中的特定設備逐步介紹開發流程。利用這種集成式藍牙 5 解決方案,開發人員可以快速部署聯網設備和應用,從而充分利用藍牙網狀網絡。
本文最后介紹 Silicon Labs 藍牙網狀網絡軟件開發包,其中詳細說明了使用樣例網狀網絡應用代碼演示的事件驅動模型。
藍牙網狀網絡需求
藍牙網狀網絡超越了傳統藍牙技術的點對點連接能力。通過相鄰聯網設備中繼消息,藍牙網狀網絡將低功耗設備的有效覆蓋范圍擴展到其發射器功率輸出和接收器靈敏度所能支持的實際范圍以外。最重要的是,智能手機和其他移動設備的普及使得大家對藍牙應用非常熟悉,藍牙網狀網絡藉由這一事實,為更復雜的網狀網絡連接應用提供自然的演進。
在網狀網絡支持下,使用藍牙的開發人員現在能夠輕松連接家庭自動化、樓宇管理和任意數量物聯網應用涉及的大量設備。
藍牙網狀網絡工作原理
藍牙網狀網絡使用概念上很簡單的網絡節點交互模型(圖 1)。專用節點類型可提供節點之間中繼消息所需的附加功能,從而擴展通過代理節點與支持藍牙的移動設備進行交互的網絡的有效范圍。
圖 1:除基本邊緣節點外,藍牙網狀網絡還能使用特殊節點類型為其他節點傳遞消息(中繼),充當低功耗節點的緩存(好友),或者將網絡(代理)連接到支持藍牙的移動設備。(圖片來源:Silicon Labs)
其他專用節點類型則可應對降低功耗的要求,使用好友節點緩存消息,以供低功耗節點在長時間休眠狀態之間定期輪詢。盡管具有這種附加功能,藍牙網狀網絡設備仍然可以利用通用屬性配置文件 (GATT) 服務來與使用早期藍牙版本的舊設備進行連接。因此,網狀網絡設備可以充分利用現有低功耗藍牙 (BLE) 能力(例如信標),以生成區域特定消息并發送給智能手機,或者將自身標識為資產管理應用。
藍牙網狀網絡還能解決日益增長的對樓宇自動化或其他物聯網應用所需受保護網絡的安全性的關注。與提供可選安全性以保護單個設備的 BLE 不同,藍牙網狀網絡實施的安全性試圖保護整個網狀網絡。
藍牙網狀網絡實現安全的方法特別有意義。其安全方案將“關注點分離”概念引入到網狀網絡中,為每個設備、網絡和整體應用使用單獨的安全措施。與每個設備相關聯的私有設備密鑰 (DevKey) 為僅涉及該節點的配置和調配等操作提供安全性。每個設備都需要網絡密鑰 (NetKey),才能與網絡或子網中的其他節點進行通信。最后,應用級交互(例如發送消息以開燈)則需要應用密鑰 (AppKey)。其他安全措施可用于防范中間人或重放攻擊等常見威脅。所有措施相互配合,藍牙網狀網絡中的安全機制為更復雜的物聯網應用所需的信任提供了關鍵基礎。
然而,實現藍牙網狀網絡連接應用給開發人員帶來了很大困難。大多數使用網狀網絡的應用是建立在功耗受限的設備之上,依靠網狀網絡來擴展低功耗無線電子系統的有效覆蓋范圍。創建支持網狀網絡的合適低功耗硬件設備所涉及的挑戰,甚至能讓最有經驗的硬件開發人員停滯不前。即使在完成其定制藍牙設計之后,為滿足國家認證要求,開發人員也可能面臨巨大的成本壓力和曠日持久的延遲。軟件開發人員在尋找兼容的藍牙網狀網絡堆棧并利用其來構建軟件層以便能支持自己的應用時,也會發生延遲。然而,借助 Silicon Laboratories 的藍牙硬件和軟件,開發人員可以在低功耗設備中快速部署藍牙網狀網絡功能,以滿足自己的應用需求。
藍牙模塊
Silicon Labs 的藍牙網狀網絡解決方案基于其低功耗藍牙 BGM13P 硬件模塊,該模塊結合了無線處理器和全套藍牙堆棧,以 12.9×15.0×2.2 mm 的封裝提供經過認證的完整藍牙系統。該模塊的核心是 EFR32BG13 Blue Gecko 無線片上系統 (SoC),可提供核心功能。EFR32BG13 SoC 集成了 32 位 Arm? Cortex?-M4 內核、2.4 GHz 無線電子系統、512 KB 閃存、64 KB RAM 以及豐富的模擬和數字外設。除了片上硬件加密加速器之外,該 SoC 還通過安全管理單元支持不斷增長的更高安全性需求;該安全管理單元為外設提供的細粒度訪問控制與存儲器保護單元為存儲器提供的相同。
EFR32BG13 SoC 可作為定制藍牙硬件設計的基礎。使用 SoC 時,開發人員不僅要負責滿足 SoC 支持電路等設計要求,還要對完成的設計進行必要的認證。該模塊提供有全面認證的設計,其中的 EFR32BG13 帶有所需的支持電路,包括數個振蕩器源、兩個晶體和端口驅動器。與此同時,該模塊還提供了一系列省電特性,因此開發人員能夠響應持續存在的低功耗設備需求。
該模塊在活動模式下僅消耗 87 μA/MHz,在全 RAM 保持的深度休眠模式下僅消耗 1.4 μA。為了幫助最大限度地延長停留在低功耗深度休眠模式下的時間,工程師可以利用低能耗傳感器接口和低能耗定時器等特性。使用低能耗傳感器接口,工程師可以對模塊的集成有限狀態機和模擬外設進行編程,以在處理器保持深度休眠模式的同時采集和處理傳感器信號。類似地,通過低能耗定時器,工程師可以輸出簡單波形并監控實時時鐘/計數器,以便在指定時間內執行操作,而無需處理器參與。
當然,無線設備的功耗一般取決于無線電子系統的效率。本例中,該模塊的 2.4 GHz 無線電子系統在接收模式下僅消耗 9.9 mA,在 0 dBm 輸出功率的發射模式下僅消耗 8.5 mA。即便如此,該模塊還提供了通過射頻控制節省功耗的額外特性。開發人員可以對模塊中的射頻檢測功能進行編程,以在檢測到寬帶射頻能量時喚醒處理器。通過這種方法,開發人員可以在無活動期間使模塊保持深度休眠而不會喪失通信。但是,如前所述,開發人員也可以將某個設備配置為藍牙 5 低功耗節點,其能夠簡單地定期從深度休眠中喚醒以輪詢好友節點,獲取緩存的消息。
系統開發
針對其所有特性,該模塊在實現方面幾乎沒有任何困難。開發人員可以簡單地將該模塊放入一個帶有處理器的設計中,將其用作藍牙網絡協處理器(圖 2A)?;蛘?,開發人員可以將該模塊用作完整的系統解決方案(圖 2B)。在這種獨立模式下,開發人員可以在模塊的 EFR32BG13 處理器上運行應用代碼,并使用 EFR32BG13 集成的模擬和數字外設在簡單的物聯網設計中進行信號采集。
圖 2:設計人員可以將 BGM13P 模塊用作主機 CPU 的藍牙協處理器 (A),或者單獨使用 (B),利用模塊集成的 EFR32BG13 SoC 執行應用程序甚至采集傳感器數據。(圖片來源:Silicon Labs)
開發人員可以使用該模塊的一個集成天線的版本 BGM13P22F512GA-V2,以進一步簡化藍牙設計。針對要應對更具挑戰性射頻環境的設計,開發人員可以采用 BGM13P22F512GE-V2,這是一個帶有 U.FL 連接器的版本,可以連接藍牙兼容的平貼片天線,例如 Taoglas 的 FXP74.07.0100A。
Silicon Labs 甚至通過 SLWSTK6101C 開發套件消除了該級別的硬件實現。SLWSTK6101C 設計用于配合其不同藍牙設備的插件板使用,提供代表性的物聯網設計,包含 Macronix 的 MX25R8035F 8 Mb 閃存、Sharp Microelectronics 的 LS013B7DH03 128 x 128 LCD 和 Silicon Labs 的 Si7021 溫度與濕度傳感器。在這種情況下,開發人員將包含 BGM13P 模塊的 SLWRB4306A 無線電電路板插入 SLWSTK6101C 板。
除了作為可立即投產的設計之外,全套電路板還提供經過驗證的參考設計,工程師可以使用它來檢查與閃存、LCD 和傳感器等設備接口的不同方法。
例如,8 Mb 閃存和 LCD 通過其 SPI 總線連接到模塊,而 Si7021 傳感器的 I2C 接口與開發板上的外部針座共享總線。Silicon Labs 演示了一種設計簡單接口的方法,它使傳感器在正常情況下保持禁用并與共享總線電氣隔離。當模塊的 PD15 輸入變為高電平時,SENSOR_ENABLE 輸出變為高電平,將傳感器連接到 3.3 V VMCU 電源軌和 I2C 總線(圖 3)。
圖 3:除了提供硬件評估平臺之外,Silicon Labs SLWSTK6101C 開發套件還可充當參考設計,展示與此處所示的 Silicon Labs Si7021 傳感器等外部設備接口的方法。(圖片來源:Silicon Labs)
共享 I2C 總線針座只是設計用來支持該平臺開發的幾個特性之一(圖 4)。除了板載 J-Link 調試器之外,該板還提供了數據包追蹤接口 (PTI),允許工程師詳細分析數據包。PTI 建立在 EFR32BG13 SoC 內置的數據包和狀態追蹤單元之上,提供對系統發送和接收的所有數據包的非侵入式捕捉。為了分析藍牙網狀網絡等復雜協議,該數據包追蹤功能提供了一個對于優化和調整低級網絡通信至關重要的工具。
圖 4:Silicon Labs SLWSTK6101C 套件有多個接口用于數據包追蹤、能量監測和低級 Arm 嵌入式追蹤宏單元 (ETM) 追蹤,為工程師深入分析設計操作和性能提供了豐富的工具集。(圖片來源:Silicon Labs)
雖然網絡專家需要 PTI 這樣的功能來優化網絡,但系統開發人員需要能幫助其發現可能導致功耗過大的應用低效問題的工具。對于此類應用級功耗優化,Silicon Labs Simplicity Studio 能量分析器可提供代碼級功耗分析。
同數據包追蹤工具一樣,能量分析器也是對底層硬件加以利用。在這種情況下,電路板包括一個專用能量監測電路,其由電流傳感器電阻、電流檢測放大器和增益級組成,將輸出傳送到電路板的控制器,供開發主機系統訪問(圖 5)。并聯增益級允許能量監測器以兩個不同的分辨率級別測量 0.1 μA 至 95 mA 的電流:250 μA 以上使用 0.1 mA 分辨率;低于 250 μA 閾值使用 1 μA 分辨率。
圖 5:內置于 BGM13P 藍牙模塊的專用能量監測電路和處理控制器可提供 0.1 μA 至 95 mA 的非侵入式電流測量。(圖片來源:Silicon Labs)
當能量監測電路產生電流測量結果時,EFR32BG13 內置的低級追蹤機制可以定期對處理器的程序計數器進行采樣,并將結果通過設備的串行線輸出引腳輸出。通過將能量監測器的結果與此程序追蹤輸出相結合,能量分析器可以實時顯示與設備上運行的代碼相關的能耗(圖 6)
圖 6:Simplicity Studio 能量分析器將能量監測器輸出與程序追蹤數據相結合,以實時顯示與實際代碼相關的電流消耗。(圖片來源:Silicon Labs)
網狀網絡應用開發
硬件工程師可以使用開發套件來優化其硬件設計,而軟件開發人員可以利用 Silicon Labs 的綜合軟件開發環境來快速創建網狀網絡應用。Silicon Labs 的藍牙 5 網狀網絡堆棧隨同 Simplicity Studio 提供,其用特定網狀網絡資源擴展了基本藍牙堆棧。因此,開發人員可以輕松地從較傳統的藍牙協議(如信標或點對點通信)轉移到全網狀網絡拓撲(圖 7)。
圖 7:Silicon Labs 藍牙網狀網絡堆棧用網狀網絡層(綠色)擴展了早期藍牙功能(藍色),使得開發人員能夠充分利用從信標到全網狀網絡配置的全部藍牙特性。(圖片來源:Silicon Labs)
Simplicity Studio 與基于 Silicon Labs BGM13P 的 SLWRB4306A 和 SLWSTK6101C 開發板一起使用,讓開發人員能利用適當的軟件開發套件 (SDK) 配置其環境。對于藍牙開發,Studio 提供了 Silicon Labs 的藍牙網狀網絡 SDK 以及預先構建的演示二進制文件和源代碼。在此環境中,開發人員可以使用實現了完整藍牙網狀網絡應用的樣例代碼。
這些樣例應用程序與開發板和移動應用配合使用,旨在演示藍牙網狀網絡的操作,讓開發人員能全面了解典型網狀網絡的操作,包括調配、配置和應用相關的使用。為了部署樣例應用程序,工程師針對一組開發板運行 Simplicity Studio,這些開發板分別配置為聯網照明應用中的燈或開關。通過使用樣例代碼和硬件,工程師可以更好地了解典型網狀網絡應用從設備上電開始的各個操作階段。
借助 Silicon Labs 的軟件架構,藍牙操作可以一系列事件展開,使用預定義的事件 ID 來表示事件的性質。在樣例軟件包中,main() 例程在上電或復位時運行,先調用一系列初始化例程,然后進入主循環,本例中主循環只包含兩行代碼(列表 1)。
int main()
{
#ifdef FEATURE_SPI_FLASH
/* Put the SPI flash into Deep Power Down mode for those radio boards where it is available */
MX25_init();
MX25_DP();
/* We must disable SPI communication */
USART_Reset(USART1);
#endif /* FEATURE_SPI_FLASH */
enter_DefaultMode_from_RESET();
#if (EMBER_AF_BOARD_TYPE == BRD4304A)
LNA_init();
#endif
gecko_init(&config);
#ifdef FEATURE_PTI_SUPPORT
APP_ConfigEnablePti();
#endif // FEATURE_PTI_SUPPORT
RETARGET_SerialInit();
/* initialize LEDs and buttons.Note: some radio boards share the same GPIO for button & LED.* Initialization is done in this order so that default configuration will be button for those
* radio boards with shared pins.led_init() is called later as needed to (re)initialize the LEDs
* */
led_init();
button_init();
LCD_init();
while (1) {
struct gecko_cmd_packet *evt = gecko_wait_event();
handle_gecko_event(BGLIB_MSG_ID(evt-》header), evt);
}
}
列表 1:Simplicity Studio 提供了一個綜合開發環境,其中包括樣例代碼,例如此網狀網絡照明主例程,其演示了初始化和事件處理循環。(代碼來源:Silicon Labs)
在主循環的第一行中,函數 gecko_wait_event() 在阻塞流程的同時等待事件出現,事件隊列由較低級別填充。雖然開發人員往往會避免使用阻塞功能,但此方法在這種情況下特別有效,因為藍牙堆棧在此阻斷模式下會自動管理低功耗休眠狀態。對于不能容許阻塞等待的特定應用要求,SDK 還提供了一個非阻塞函數,如果隊列為空,則返回下一個事件或 NULL。但使用此函數時,開發人員需要自行處理低功耗休眠管理。
在主循環的第二行中,處理函數 handle_gecko_event() 根據其事件 ID 處理最新事件 (evt)(列表 2)。當設備上電時,堆棧發出系統引導事件 (gecko_evt_system_boot_id)。事件處理程序進而調用一系列初始化函數,包括 gecko_cmd_mesh_node_init(),其會初始化藍牙網狀網絡堆棧。然后,處理程序調用其他函數來提供與該事件類型(由其相關事件 ID 表示)相關聯的功能。
/**
* Handling of stack events.Both Bluetooth LE and Bluetooth mesh events are handled here.*/
static void handle_gecko_event(uint32_t evt_id, struct gecko_cmd_packet *evt)
{
struct gecko_bgapi_mesh_node_cmd_packet *node_evt;
struct gecko_bgapi_mesh_generic_server_cmd_packet *server_evt;
struct gecko_msg_mesh_node_provisioning_failed_evt_t *prov_fail_evt;
if (NULL == evt) {
return;
}
switch (evt_id) {
case gecko_evt_system_boot_id:
// check pushbutton state at startup.If either PB0 or PB1 is held down then do factory reset
if (GPIO_PinInGet(BSP_GPIO_PB0_PORT, BSP_GPIO_PB0_PIN) == 0 || GPIO_PinInGet(BSP_GPIO_PB1_PORT, BSP_GPIO_PB1_PIN) == 0) {
initiate_factory_reset();
} else {
struct gecko_msg_system_get_bt_address_rsp_t *pAddr = gecko_cmd_system_get_bt_address();
set_device_name(&pAddr-》address);
// Initialize Mesh stack in Node operation mode, wait for initialized event
gecko_cmd_mesh_node_init();
// re-initialize LEDs (needed for those radio board that share same GPIO for button/LED)
led_init();
}
break;
。。.case gecko_evt_mesh_node_initialized_id:
printf(node initialized\r\n);
struct gecko_msg_mesh_node_initialized_evt_t *pData = (struct gecko_msg_mesh_node_initialized_evt_t *)&(evt-》data);
if (pData-》provisioned) {
。。.} else {
printf(node is unprovisioned\r\n);
LCD_write(unprovisioned, LCD_ROW_STATUS);
printf(starting unprovisioned beaconing.。。\r\n);
gecko_cmd_mesh_node_start_unprov_beaconing(0x3); // enable ADV and GATT provisioning bearer
}
break;
case gecko_evt_mesh_node_provisioning_started_id:
printf(Started provisioning\r\n);
LCD_write(provisioning.。。, LCD_ROW_STATUS);
// start timer for blinking LEDs to indicate which node is being provisioned
gecko_cmd_hardware_set_soft_timer(32768 / 4, TIMER_ID_PROVISIONING, 0);
break;
case gecko_evt_mesh_node_provisioned_id:
_my_index = 0; // index of primary element hardcoded to zero in this example
lightbulb_state_init();
printf(node provisioned, got index=%x\r\n, _my_index);
// stop LED blinking when provisioning complete
gecko_cmd_hardware_set_soft_timer(0, TIMER_ID_PROVISIONING, 0);
LED_set_state(LED_STATE_OFF);
LCD_write(provisioned, LCD_ROW_STATUS);
break;
case gecko_evt_mesh_node_provisioning_failed_id:
prov_fail_evt = (struct gecko_msg_mesh_node_provisioning_failed_evt_t *)&(evt-》data);
printf(provisioning failed, code %x\r\n, prov_fail_evt-》result);
LCD_write(prov failed, LCD_ROW_STATUS);
/* start a one-shot timer that will trigger soft reset after small delay */
gecko_cmd_hardware_set_soft_timer(2 * 32768, TIMER_ID_RESTART, 1);
break;
。。.}
}
列表 2:開發人員可以檢查 Silicon Labs 網狀網絡樣例代碼中的關鍵設計模式,例如調配事件處理,相關代碼片段位于網狀網絡燈主程序中調用的 handle_gecko_event() 事件處理程序(參見列表 1)。(代碼來源:Silicon Labs)
藍牙網狀網絡中的關鍵事件系列之一與調配過程有關。設備上電并完成其初始化序列之后,便進入信標模式,向網絡宣告其自身以供調配。當調配完畢(或失?。r,樣例代碼會使用開發套件 LCD 和 LED 來指示狀態。通過檢查事件處理程序針對每個調配狀態的代碼塊,開發人員可以快速了解該調配序列和選項。
同樣,軟件工程師可以使用樣例處理程序代碼作為創建其應用級功能的指南。例如,藍牙網狀網絡中的一個關鍵概念是使用發布-訂閱模型將共享某些功能關系的節點關聯起來(圖 8)。
圖 8:應用開發人員使用藍牙的發布-訂閱模型將設備組合成功能分組,例如由一個或多個開關控制的一組燈。(圖片來源:Silicon Labs)
通過這種方法,數個智能燈泡可以訂閱一個開關發布者。當最終用戶激活該開關時,其將發布 ON/OFF 事件。該事件將通過網狀網絡級聯到訂閱的智能燈泡,其事件處理程序將采取適當的操作。Silicon Labs 樣例代碼演示了這一過程:首先是網狀網絡中的聯網開關發布 ON/OFF 請求(列表 3),然后是聯網燈的相應響應(列表 4)。
/**
* This function publishes one on/off request to change the state of light(s) in the group.* Global variable switch_pos holds the latest desired light state, possible values are
* switch_pos = 1 -》 PB1 was pressed, turn lights on
* switch_pos = 0 -》 PB0 was pressed, turn lights off
*
* This application sends multiple requests for each button press to improve reliability.* Parameter retrans indicates whether this is the first request or a re-transmission.* The transaction ID is not incremented in case of a re-transmission.*/
void send_onoff_request(int retrans)
{
uint16 resp;
uint16 delay;
struct mesh_generic_request req;
req.kind = mesh_generic_request_on_off;
req.on_off = switch_pos ?MESH_GENERIC_ON_OFF_STATE_ON : MESH_GENERIC_ON_OFF_STATE_OFF;
// increment transaction ID for each request, unless it‘s a retransmission
if (retrans == 0) {
trid++;
}
/* delay for the request is calculated so that the last request will have a zero delay and each
* of the previous request have delay that increases in 50 ms steps.For example, when using three
* on/off requests per button press the delays are set as 100, 50, 0 ms
*/
delay = (request_count - 1) * 50;
resp = gecko_cmd_mesh_generic_client_publish(
MESH_GENERIC_ON_OFF_CLIENT_MODEL_ID,
_my_index,
trid,
0, // transition
delay,
0, // flags
mesh_generic_request_on_off, // type
1, // param len
&req.on_off /// parameters data
)-》result;
if (resp) {
printf(gecko_cmd_mesh_generic_client_publish failed,code %x\r\n, resp);
} else {
printf(request sent, trid = %u, delay = %d\r\n, trid, delay);
}
}
列表 3:這個來自 Silicon Labs 網狀網絡開關樣例應用程序的代碼片段說明了如何使用藍牙 5 發布過程 (gecko_cmd_mesh_generic_client_publish) 來請求訂閱該事件流的燈的狀態改變(開或關)。(代碼來源:Silicon Labs)
static void onoff_request(uint16_t model_id,
uint16_t element_index,
uint16_t client_addr,
uint16_t server_addr,
uint16_t appkey_index,
const struct mesh_generic_request *request,
uint32_t transition_ms,
uint16_t delay_ms,
uint8_t request_flags)
{
printf(ON/OFF request: requested state=《%s》, transition=%u, delay=%u\r\n,
request-》on_off ?ON : OFF, transition_ms, delay_ms);
if (lightbulb_state.onoff_current == request-》on_off) {
printf(Request for current state received; no op\n);
} else {
printf(Turning lightbulb 《%s》\r\n, request-》on_off ?ON : OFF);
if (transition_ms == 0 && delay_ms == 0) { // Immediate change
lightbulb_state.onoff_current = request-》on_off;
lightbulb_state.onoff_target = request-》on_off;
if (lightbulb_state.onoff_current == MESH_GENERIC_ON_OFF_STATE_OFF) {
LED_set_state(LED_STATE_OFF);
} else {
LED_set_state(LED_STATE_ON);
}
} else {
// Current state remains as is for now
lightbulb_state.onoff_target = request-》on_off;
LED_set_state(LED_STATE_TRANS); // set LEDs to transition mode
gecko_cmd_hardware_set_soft_timer(TIMER_MS_2_TIMERTICK(delay_ms + transition_ms), TIMER_ID_TRANSITION, 1);
}
lightbulb_state_store();
}
if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) {
onoff_response(element_index, client_addr, appkey_index);
} else {
onoff_update(element_index);
}
}
列表 4:Silicon Labs 網狀網絡燈樣例包括用于特定應用級事件的例程,例如這個打開或關閉 LED 以響應開關所發布請求的函數(參見列表 3)。(代碼來源:Silicon Labs)
除了用于節點開發的藍牙堆棧和 SDK 之外,Silicon Labs 還提供了藍牙網狀網絡的最終環節——連接移動設備。大多數移動設備支持藍牙 4,雖然其無線電可以支持藍牙 5 要求,但它們沒有支持藍牙 5 網狀網絡層的堆棧。Silicon Labs 為移動應用開發人員提供了額外的軟件堆棧來,而該堆??商峁┚W狀網絡功能,因此便能克服這一局限性(圖 9)。
圖 9:開發人員可以將 Silicon Labs 針對移動設備的網狀網絡堆棧添加到其移動應用中,使得藍牙 4 移動設備可以在藍牙 5 網狀網絡中使用。(圖片來源:Silicon Labs)
總結
藍牙 5 網狀網絡為各種各樣已經利用智能手機和其他移動設備進行點對點通信的應用提供了一個自然的過渡。然而,藍牙 5 網狀網絡的部署對硬件和軟件設計提出了重大挑戰,特別是在物聯網等功耗受限的應用中。此外,硬件工程師需要滿足最小基底面和低功耗的要求,軟件工程師則需要構建使用最少資源來執行復雜通信協議的軟件。BGM13P 模塊、SLWSTK6101C 開發板以及節點和移動設備的藍牙堆棧的結合,使工程師有一個綜合性平臺來快速開發使用藍牙網狀網絡的應用
評論
查看更多