?

藍牙Mesh網關模塊系統設計

2022-08-31 21:48葉何陳國丞
電腦知識與技術 2022年17期
關鍵詞:物聯網

葉何 陳國丞

摘要:隨著藍牙技術引入了Mesh組網標準,以及Bluetooth SIG逐步完善藍牙Mesh協議規范,再結合現存的低功耗藍牙存量市場,使得藍牙Mesh較其他短距離無線通信更容易被推廣?;贛TK7268和Nordic52840搭建了一個藍牙Mesh網關系統,借助OpenWrt操作系統以及Nordic提供的PyACI腳本演示了系統的運行過程,通過筆者實際測試,該系統運行穩定,可以滿足一般的Mesh應用,如燈和開關組成的Mesh網絡。讀者在該系統架構的基礎上可以進一步拓展集成其他無線協議,如ZigBee、Thread等,使系統成為一個支持多協議的網關。

關鍵詞:物聯網;智能網關;BLE;藍牙Mesh

中圖分類號:TP393? ? ? 文獻標識碼:A

文章編號:1009-3044(2022)17-0037-04

1引言

伴隨5G+AIoT技術的發展,各種物聯網相關產品呈爆發性增長趨勢,這促進了多種無線通信技術的發展,如ZigBee、Z-Wave、Thread、Wi-Fi、BLE等,物聯網產品根據不同的場景需求應用到了上述無線通信技術,這些技術在多個方面表現各異,如協議、性能、可靠性、時延、成本以及覆蓋范圍等。實際應用需要根據產品的服務屬性和應用情景來選擇使用它們中的一種或多種組合。這些技術各有所長,其中BLE廣泛應用于短距離通信,由于其簡單、低功耗、低成本等優勢,在幾乎所有的智能手機、平板電腦、個人筆記本和其他消費類電子都有用到BLE。得益于BLE的普及上,Bluetooth SIG在BLE的基礎上引入了Mesh網絡特性,并逐步制定了Bluetooth Mesh組網和協議標準[1]。通過Mesh組網的方法,分散部署的產品通過藍牙Mesh拓撲網狀技術實現多對多(Many-to-Many)通信,通信數據借助中繼節點轉發,解決了端對端(End-to-End)通信距離不足的問題,突破了單個BLE低功耗藍牙節點無線電覆蓋范圍短的壁壘[2-3]。

藍牙Mesh在BLE低功耗藍牙的基礎上進一步拓展了應用空間,最典型的變化是將點對點星狀網絡升級為多對多的Mesh拓撲網絡,使得網絡設備容載量、魯棒性以及通信距離得到極大的提升,點狀星形網絡依賴中心節點,設備只能與中心節點直接通信,設備彼此之間無法直接通信,Mesh網絡則打破了此限制,設備間可以直接通信或通過中繼節點通信,因此Mesh網絡可以突破單個節點無線電覆蓋范圍的限制,消息通過中繼節點轉發后讓網絡覆蓋范圍得到極大的延伸。

2藍牙Mesh網絡

2017年7月,Bluetooth SIG(藍牙技術聯盟)正式宣布藍牙技術開始支持Mesh網狀網絡。在Bluetooth Mesh網絡中,理論上最大支持32767個節點和127跳(Hop),節點之間沒有連接的概念,消息的收發主要通過BLE廣播和掃描實現,網絡消息可以被相鄰節點中繼,因此通過一個節點就可以控制和管理整個Mesh網絡。藍牙Mesh采用管理型網絡泛洪的方式控制信息的傳輸,相較于ZigBee用的路由方式更加簡單,不需要創建和維護路由表、鄰居表等路徑信息,Mesh消息通過廣播的方式經由多條路徑到達目標節點,可有效避免因單點故障帶來的通信不可靠問題[4]。藍牙Mesh節點有中繼、代理、好友和低功耗四種基本特性,同一個節點可使能其中的一種或多種特性,如圖1所示[5]。中繼節點主要將收到的消息再次轉發傳輸出去;代理節點(Proxy)可以和手機等智能設備建立GATT連接,同時可以接收Mesh網絡的消息,因此該類節點是普通BLE設備和Mesh網絡的通信橋梁;低功耗節點主要應用于電池供電類設備,它們需要和好友節點配合使用,好友節點替低功耗節點緩存消息,低功耗節點為節省電能,大部分時間都關閉了射頻功能,其自身通過周期性喚醒的方式向好友節點請求網絡給自己的消息。為實現遠程操控和配置管理,Mesh網絡一般有一個管理配置節點(Provisioner),它可以創建網絡并管理網絡中的其他節點,這個節點往往集成在藍牙Mesh網關,Mesh網關可以通過多種方式訪問互聯網,從而實現Mesh網絡數據上云并接受云端的控制。

3系統架構

本系統采用Nordic52840運行Mesh協議棧,其具備1MB Flash和256kB RAM,充當Mesh網絡的啟動配置設備(Provisioner),Provisioner通過UART接口與外部控制器交互,完整的網關功能需搭配Nordic官方提供的PyACI(Python Application Control Interface)腳本使用。主控制采用MTK7628芯片,運行OpenWrt操作系統,系統的整體功能框圖如2所示。

4軟件設計

網關主控制器MTK7628運行OpenWrt操作系統,配置為Station模式通過Wi-Fi連接外部AP訪問互聯網,網關的主體業務邏輯運行在MTK7628上,如子設備管理、協議轉換和本地場景等。網關業務架構如圖3所示,gateway_proxy為網關進程,該進程下包含了六個子線程,各線程單元處理自身相應的業務功能,其分工如表1所示:

4.1協議結構

藍牙通信主要涉及兩部分協議,Mesh協議和串口協議,以下內容分別對其進行一個簡要介紹。

1)Mesh協議

Mesh通信數據包本質上屬于BLE廣播包,如圖4所示,BLE廣播包含31個字節,廣播包有效數據部分由若干個廣播數據單元(AD Structure)構成,一個廣播單元分為長度Len、類型Type(AD Type)和數據Data(AD Data)三部分。廣播數據中的AD Type標示廣播段的含義(如設備名稱、UUID等),SIG聯盟統一規范了該字段的具體意義。當前有三種類型用于Mesh數據包,分別為0x29(PB-ADV)、0x2A(Mesh Message)和0x2B(Mesh Beacon)[6],因此Mesh網絡的Network PDU部分最大占據29個字節。

2)串口協議

Provisioner通過串口Uart與主控MTK7628交互,圖5定義了串口協議基本格式 length-opcode-payload,主要分三部分:指令長度、操作碼和數據包內容[7],其功能如表2所述。主控MCU和Provisioner之間的所有數據交互全部封裝成上述格式,其中數據域payload 主要分兩類:Command和Event。Mesh協議棧部分主要運行在Provisioner,主控MCU如果需要操作Mesh網絡,可以通過下發相應的Command給Provisioner;協議?;蚓W絡有事件發生,Provisioner通過Event上報給主控。

4.2 子節點配網

藍牙Mesh設備配網過程又稱啟動配置(Provisioning),新設備New device需要通過啟動配置加入Mesh網絡,從而成為Mesh網絡中的節點。新設備的啟動配置過程通過五個步驟完成[8]:

1)待配網設備發送Beacon信號(Beaconing);

2)啟動配置設備(Provisioner)發出配網邀請(Invitation);

3)交換公共密鑰(Exchanging public keys);

4)設備相互認證(Authentication);

5)分發啟動配置數據(Distribution of Provisioning data)。

圖6為設備配網過程示意圖,啟動配置過程總共包含了10種類型的Provisioning PDU,如表3所示,實際配置過程中使用到的數據包類型根據不同的場景有所差異。

首先,待配網設備New Device會主動廣播Unprovisioned Device Beacon信號,啟動配置端Provisioner向待配網設備發出邀請(Invitation),在此過程中,如果周圍有多個待配網設備,用戶可以通過手機、平板或網關的UI界面選擇或指定特定設備進行配置。新設備收到Provisioner的邀請后,回應自身具備的能力(Capabilities),Provisioner會根據新設備的能力決定后續采取哪些動作完成剩余階段的一系列操作,如公鑰交互方式、認證方法等。為方便闡述,本文采用No OOB(Out-Of-Band)的方式交換Public Key,Provisioner通過Provisioning Start告訴新設備不使用OOB方式的公鑰,實際的Public Key由New device和Provisioner各自生成,再通過Provisioning Public Key發送給對方,雙方獲得對端設備公鑰后進入到認證階段。在認證環節中,雙方各自產生一個隨機數,在將到現階段彼此交互過的所有PDU連同剛生成的隨機數進行加密后的哈希值通過Provisioning Confirmation發給對端,接下來Provisioner通過Provisioning Random將剛產生的隨機數發給New Device,New Device使用此隨機數連同此前已交互的PDU加密計算哈希值,在與Provisioner發送過來的哈希值進行對比,確認無誤后,New Device以同樣的方式將其產生的隨機數發送給Provisioner,Provisioner確認無誤后則雙方完成對彼此的認證,認證通過后,Provisioner通過Provisioning Data分發啟動配置數據。New Device一旦成功獲得配置數據(Composition data)則正式成為Mesh網絡的節點Node,并通過Provisioning complete告訴Provisioner完成配網過程。上述任何環節中,如果New Device出錯或等待數據包超時,則可以通過Provisioning failed結束配網過程,如果New Device配網失敗,它應該清除已接收到的所有數據,配網交互過程如果被中斷,Provisioner必須從頭開始Provisioning新設備。新設備的配網流程如圖7所示。

5 實驗操作

為方便測試,我們可以先在電腦端將Provisioner基本功能調試好。首先搭建Python開發環境,準備好實驗所需工具。開發版預留有Uart轉USB接口,將Provisioner連接到電腦后可以通過串口助手和其進行交互,Nordic的串口協議提供了完備的協議棧操作接口,我們可以根據應用具體功能需求進行調用。

5.1 PyACI操作

本實驗使用多塊Nordic官方開發板nrf52840-DK,其中一塊充當Provisioner,其余的充當Mesh節點, Nordic提供了PyACI(Python Application Control Interface)的方式和Provisioner進行交互,打開Powershell窗口,執行interactive_pyaci.py腳本,此腳本主要用于操作Mesh模組,通過調用SDK中的內置API函數實現網絡相關操作。通過以下實驗步驟可以實現將一個新設備配置到Mesh網絡,新設備進入網絡后將取得Mesh網絡的Network Key和App Key,此時用戶可以對設備支持的Model進行控制。

#打開Provisioner所在的端口

1)python.exe .\interactive_pyaci.py -d COM16 -l 5

#選擇數據庫文件

2) db = MeshDB("database/example_database.json")

#創建Provisioner實例

3)p = Provisioner(device, db)

#掃描待配網的新設備

4)p.scan_start()

#對新設備進行啟動配置

5) p.provision(name="Light Node")

#創建配置客戶端

6)cc = ConfigurationClient(db)

7)device.model_add(cc)

#選擇需要操作的設備

8)cc.publish_set(12, 1)

#獲取設備配置信息

9)cc.composition_data_get()

#添加APP Key

10)cc.appkey_add(0)

#將APP KEY綁定到Model

11)cc.model_app_bind(db.nodes[0].unicast_address, 0, mt.ModelId(0x1000))

#創建On-Off客戶端

12)gc = GenericOnOffClient()

13)device.model_add(gc)

#選擇需要控制的設備

14) gc.publish_set(0, 0)

#下發On指令

15)gc.set(True)

#下發Off指令

16)gc.set(False)

網關在第一次創建Mesh網絡的時候會隨機生成Network Key和若干個App Key,并將其同步至Provisioner,配網過程中Provisioner會生成設備的Device Key,這個三個Key奠定了Mesh網絡通信安全的基石,由于Mesh網絡通信數據包長度受限,如果每次都傳輸這些Key將浪費大量資源,因此這些Key都有其對應的索引Index,子節點第一次獲得某個Key時也同步得到這個Key對應的索引,因此后續需要用到某個Key時,則會使用其相應的索引值代替。所有網絡和子節點相關的信息(包括各種Key、UUID、設備地址等)都需要網關保存到數據庫中。數據庫保存了Mesh網絡的所有信息,因此如果當前網關壞了或者用戶購買了新的網關,新網關需要接管現有網絡,新網關僅需同步拿到Mesh網絡的數據庫數據就可以完成替換了。

現今智能手機或平板一般都搭載有藍牙功能,藍牙Mesh網絡提供了代理Proxy角色,可以讓支持低功耗藍牙的傳統設備通過和代理角色建立GATT連接,然后接入Mesh網絡,從而讓不具備藍牙Mesh協議棧的藍牙低功耗設備可以與Mesh網絡其他節點進行交互。借助于藍牙功能的普及性,我們可以在手機或平板等智能設備上開發相應的App,讓它們成為一個啟動配置設備Provisioner。

6結束語

本文提供了一種快速搭建藍牙Mesh網關的方法,通過開源的OpenWrt系統可以免費獲取很多第三方工具庫(如mbedTLS、Mosquitto等),相較于FreeRTOS等操作系統而言,省去了移植、調試成本。在編譯OpenWrt的時候需要使能Python相關的支持,這樣可以使用Nordic提供的PyACI腳本應用,開發者可根據該腳本的調用執行邏輯,將需要的具體功能集成到自己的網關模塊。藍牙Mesh是BLE低功耗藍牙技術的一個延伸應用,隨著藍牙Mesh協議在各領域的不斷完善,設備之間的互通性將越來越強,外加人們日常生活的智能設備基本搭載有藍牙功能,使得藍牙Mesh擁有ZigBee、Thread等技術無法比擬的先天優勢,也使其更加容易被物聯網應用整合。藍牙Mesh子設備分布式部署組網后,其中的任意節點連接到本網關即可實現數據上云和用戶遠程操控,經過筆者的實際測試使用,本系統運行穩定,可滿足一般的藍牙Mesh應用場景。

參考文獻:

[1] Hernandez-Solana A,Perez-Diaz-De-Cerio D,Garcia-Lozano M,et al.Bluetooth mesh analysis,issues,and challenges[J].IEEEAccess,2020,8:53784-53800.

[2] Baert M,Rossey J,Shahid A,et al.The bluetooth mesh standard:an overview and experimental evaluation[J].Sensors,2018,18(8):2409.

[3] Tran Q T,Tran D D,DoanD,et al.An approach of BLE mesh network for smart home application[C]//2020 International Conference on Advanced Computing and Applications (ACOMP).IEEE,2020:170-174.

[4] Wan Q,Liu J H.Smart-home architecture based on bluetooth mesh technology[C]//IOP Conference Series: Materials Science and Engineering. IOP Publishing,2018,322(7):072004.

[5] Mesh Profile Bluetooth Specification,Revision:v1.0.1[S].2019.

[6] Bluetooth SIG Assigned Numbers[EB/OL].[2021-10-20].http://www.bluetooth.com/specifications/assigned-numbers.

[7] nRF5 SDK for Mesh v5.0.0.[EB/OL].[2021-10-20].https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.meshsdk.v5.0.0/md_doc_user_guide_modules_serial.html.

[8] Bansal K.Embedded provisioner for BLE mesh network[C]//2020 IEEE International Conference for Innovation in Technology.IEEE,2020:1-5.

收稿日期:2022-03-16

基金項目:佛山市順德區核心技術攻關項目:AI語音+Wi-Fi6 IoT芯片模組開發與產業化應用(項目編號:2130218002519)

作者簡介:葉何(1991—),男,湖南岳陽人,碩士,主要從事嵌入式開發和物聯網應用相關工作;陳國丞(1972—),男,臺灣桃園人,博士,主要研究方向為無線通訊。

猜你喜歡
物聯網
基于無線組網的智慧公交站點信息系統研究與實踐
基于LABVIEW的溫室管理系統的研究與設計
論智能油田的發展趨勢及必要性
中國或成“物聯網”領軍者
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合