,,,
(華中科技大學 自動化學院,武漢 430074)
隨著科學技術水平的不斷提高,人們越來越追求高質量、快節奏、便捷舒適的生活方式,智能家居產業由此興起,成為未來家居領域發展的必然趨勢。無線通信技術是智能家居的關鍵技術,目前,智能家居領域應用的無線技術種類繁多,主流包括WiFi、藍牙、ZigBee、Z-Wave等。而隨著物聯網技術的進一步發展,越來越多的無線通信標準被應用于智能家居,以滿足復雜的實際需求。
Thread是一種新興的無線網絡通信標準。2014年,Google旗下智能家居公司Nest主導創立了Thread聯盟(Thread Group)。2015年7月,該聯盟正式發布Thread 1.0標準,Thread的設計主要面向家庭網絡,具備低功耗、易于使用、安全可靠等優勢。目前,Silicon Labs、Nordic等公司已經推出Thread網絡解決方案,Nordic nRF52840多協議SoC已通過Thread認證。在未來幾年,基于Thread的無線通信產品和應用將會得到迅速的發展和普及。
Thread將WPAN技術和IPv6技術緊密結合,是一種基于IPv6的無線mesh網絡標準,協議棧架構如圖1所示。

圖1 Thread協議棧架構
Thread屬于網絡層協議,基于IEEE 802.15.4的物理層和MAC層,以支持其低功耗特性。物理介質有限的傳輸能力決定了Thread目前只適用于傳輸速率不高的場合,最高速率為250 kbps。通過6LoWPAN適配層支持IPv6網絡層,使得Thread設備能夠像互聯網上任何一個聯網設備一樣,直接通過IP尋址實現主機間通信。
Thread網絡中有多種設備類型,主要包括邊界路由器(Border Router, BR)、路由器(Router)以及終端設備(End Device)。
Thread的網絡拓撲結構如圖2所示。

圖2 Thread網絡拓撲圖
邊界路由器(BR)是一種具有連接Thread網絡和外部網絡(通常是互聯網)功能的特殊路由器,負責在內外網絡之間路由和轉發IPv6包。
路由器(Router)負責在Thread網絡內部路由轉發IPv6包,是mesh網絡中的關鍵設備。通常,創建網絡的第一個路由器被指定為Leader。Leader具備一定網絡管理和決策能力,如響應路由器請求、管理路由器ID分配等。路由器一般不支持低功耗模式,始終處于正常工作狀態,因此會消耗更多的電量。
網絡中大多數的設備都將作為終端設備(End Device)運行。由于它們沒有路由轉發能力,啟動之后必須尋找一個最合適的路由器作為自己的父節點(Parents),始終通過父節點路由轉發數據包。為了降低功耗,終端設備大多數時間處于睡眠狀態,從而大大延長電池壽命。
還有一類本身具備路由能力的設備,但由于某些條件限制,如網絡中路由器數量達到了上限(32個),暫時作為終端設備運行的特殊節點 (Router-Eligible End Devices, REED)。在必要時,它們能主動向Leader發出申請,轉換為路由器設備。
Thread的技術特點突出,尤其在操作便捷性、網絡魯棒性、安全性,以及支持IPv6的優勢,更加適用于智能家居、智能樓宇等應用場景。
此外,Thread淡化了與其他無線標準的對立性,更具開放性、包容性。Thread沒有定義應用層,側重于能讓廣泛物聯網解決方案互通的網絡層設計,可為不同的應用層協議協同工作提供網絡層支持。開放性和包容性將幫助Thread快速發展壯大,提升影響力。
OpenThread是Thread協議目前唯一的開源實現。2016年,由谷歌Nest主導,在Github發起OpenThread項目,代碼完全開源。采用C/C++語言開發,為開發者提供獨立于硬件和操作系統的API接口,協議棧架構如圖3所示。

圖3 OpenThread協議棧
OpenThread提供平臺抽象層,大大降低了移植難度。項目組建議移植平臺至少應該具備的硬件資源包括IEEE 802.15.4 2.4 GHz射頻模組、精度可達毫秒級的定時器、非易失性存儲器(以保存網絡配置信息),以及真隨機數產生器(True Random Number Generator,TRNG)。此外,官方還提供了Thread網絡解決方案的參考設計,以及OpenThread邊界路由器(OpenThread Border Router,OTBR)的實現。
在智能家居的應用場景中,網絡設備的功能多樣,不同的設備對網絡傳輸速率和通信質量有著不同的要求。實際上,不可能用單一的網絡技術就實現所有設備的互聯,多種無線技術相互融合、優劣互補,才能滿足復雜多樣的設備聯網需求。
WiFi是當今使用最廣的一種無線通信技術,傳輸距離長、速率高,但對于嵌入式設備來說功耗太大、組網能力太弱,更適用于PC、智能手機等設備的聯網。Thread網絡傳輸速率有限,更適合用于數量較多,但傳輸數據量小、傳輸速率低的傳感設備以及部分家電的聯網。因此,本文結合WiFi、Thread等多種IP網絡技術,實現WiFi網絡、Thread網絡和互聯網基于IPv6層互聯的智能家居混合網絡。網絡系統架構如圖4所示。

圖4 基于IPv6的智能家居混合網絡系統架構
網絡系統的核心是一個多協議棧家庭路由器,負責連接家庭網絡與遠程互聯網。本文基于樹莓派3代B型(Raspberry Pi 3B)和OpenWRT(LEDE分支)路由器操作系統實現家庭路由器。樹莓派3B板載了一個無線網卡和多個USB接口,但只有一個以太網口,可通過USB口擴展更多的以太網接口。本文使用的是CE-LINK的USB2.0轉百兆網卡,該產品集成RTL8152芯片,接口類型為RJ45網口。LEDE軟件源中已有該芯片的驅動程序,通過opkg命令安裝相應驅動即可使用。
安裝OpenWRT之后,還需要對路由器做相應的配置。如圖4所示,配置以太網口0作為外網口,將該網口的地址配置為從互聯網服務提供商(Internet Service Provider, ISP)獲得的全球唯一IPv6單播地址(Global Unicast Address, GUA),即可訪問IPv6公網;配置無線網卡為無線AP建立WiFi網絡,對通信速率要求較高的網絡設備(如手機、PC),可通過WiFi連入家庭網絡;以太網口1連接Thread路由器,通過它連接Thread網絡和家庭網絡。無線網口和以太網口1都屬于路由器內網口,可通過創建一個虛擬網橋相互連接,使用DHCPv6方式為家庭路由器的各個內網口自動配置IPv6地址。
Thread路由器具備路由轉發功能和IPv6地址配置機制,連入家庭網絡之后,Thread網絡中的所有節點都能夠獲取到IPv6全球唯一的單播地址(GUA),或者是IPv6本地唯一單播地址(Unique Local IPv6 Unicast Address, ULA),ULA地址只能用于本地局域網通信,具有固定前綴FD00::/8,功能類似于IPv4局域網地址192.168.x.x。而使用GUA地址,Thread網絡設備可以直接和互聯網中的IPv6主機進行雙向通信。
由于Thread網絡中IPv6地址配置方式為無狀態地址自動配置(Stateless Address Auto-Configuration, SLAAC),Thread節點利用一個可用的64位地址前綴和64位的接口ID,可自動生成IPv6地址,無需用戶配置。假如Thread路由器從家庭路由器中分配得到的GUA地址為2000:1234:7c34:4::1/62,它將檢測到該地址(前綴位數必須少于64位),并為Thread網絡繼續劃分出64位的子網前綴,如2000:1234:7c34:5::1/64,并將該前綴在Thread網絡中廣播。Thread網絡設備即可利用該地址前綴自動生成一個GUA地址。
2.2.1 硬件設計
Thread網絡解決方案的硬件總體架構如圖5所示。

圖5 Thread網絡解決方案硬件架構圖
Thread節點和網絡協處理器(Network Co-Processer, NCP)都采用主控外接射頻模塊的雙芯片方案。主控芯片采用NXP的K64芯片(或是其他支持ARM Mbed OS的硬件平臺),通過SPI串行總線連接MRF24J40MA射頻集成模塊,由其內置的MRF24J40射頻芯片提供物理層和MAC層支持。
MRF24J40MA是符合2.4 GHz IEEE標準802.15.4的集成模塊,集成晶振、內置穩壓器、匹配電路和PCB天線。該模塊基于Microchip的MRF24J40 IEEE 802.15.4 2.4 GHz 射頻收發芯片,通過四線制SPI接口與主控制器通信。采用該模塊可免去大量的RF、天線設計,以及合規性測試工作,上手簡單,可大大縮短產品開發時間。MRF24J40MA射頻模塊如圖6所示。

圖6 MRF24J40MA射頻模塊
邊界路由器同樣采樣樹莓派3B搭建原型,通過USB接口連接網絡協處理器,通過板載以太網口連接家庭路由器,無需額外擴展網絡接口。
2.2.2 軟件設計
Thread節點和網絡協處理器的軟件設計基于ARM Mbed軟件開發平臺,應用其開源嵌入式實時操作系統CMSIS-RTOS(即ARM Mbed OS),移植OpenThread協議棧和MRF24J40MA射頻模塊驅動程序。
ARM Mbed OS是ARM公司專為基于ARM Cortex-M處理器所設計的開源嵌入式實時操作系統,可運行在所有Cortex-M系列的產品上,配置靈活、可裁剪,最小內存需求低至8 KB。選用Mbed OS的最主要原因是其具有強大的跨平臺特性以及強大的開發者生態。Mbed OS目前支持60多家經過認證的硬件方案,包括100多種開發板和400多個元件庫,涵蓋了市面上主流的芯片廠商;Mbed開發者社區擁有數量龐大的注冊用戶,通過社區、Github等開源平臺共享源代碼。借助Mbed OS開發者可以利用社區資源快速地開發產品原型,并可直接運行在不同的硬件平臺上,避免了因更換硬件導致大量的移植和開發工作。
除了包含RTOS,Mbed OS還集成了物聯網設備開發所需要的各種組件,涵蓋設備安全、設備管理、通信、端云互聯的功能組件,如各類網絡協議、文件系統、事件管理框架,幫助開發者從嵌入式終端到云端再到用戶端快速構建IoT應用。
本文主要做了兩方面工作:首先移植MRF24J40MA射頻驅動,以及OpenThread協議棧,適配Mbed OS;其次為OpenThread提供封裝程度更高、抽象性更好的C++類及其接口(OpenThread Interface和UDP Socket),最大程度屏蔽底層細節,方便開發者進行二次開發。完成OpenThread協議棧移植后,ARM Mbed OS架構如圖7所示。

圖7 OpenThread+ARM Mbed OS架構圖
Thread路由器由網絡協處理器(NCP)和邊界路由器(BR)組成。網絡協處理器負責在Thread網絡和邊界路由器之間傳遞數據,提供Thread網絡連接性。網絡協處理器與Thread節點具有完全相同的硬件結構,可由OpenThread的宏定義配置其節點類型是作為網絡協處理器還是Thread節點運行。邊界路由器(BR)可基于Nordic官方提供的邊界路由器(Nordic Thread Border Router, NBR)解決方案進行二次開發。NBR的軟件架構示意圖如圖8所示。

圖8 邊界路由器軟件架構示意圖
NBR是基于OpenWRT開發的路由器系統,內置LuCI配置面板,以及nat64、dns、wpantund等網絡組件,可通過WiFi、Ethernet連接到家庭路由器,并提供DHCP和DHCPv6服務,是互聯網與Thread網絡之間IPv6數據包中轉站。wpantund是NBR的關鍵組件,由OpenThread項目組開發,它集成了spinel、Dbus、wpanctl等功能組件,為NCP提供一個虛擬的本地IPv6網絡接口。spinel組件實現了spinel協議,用于和網絡協處理器基于串口或者SPI通信;Dbus的作用是連接spinel和邊界路由器中的其他組件;wpanctl提供了對wpantund的各種命令行控制指令,涵蓋組網、配置、查看網絡參數和網絡狀態等功能,可幫助開發者快速配置和調試Thread網絡。

黃祥才(碩士研究生),研究方向為嵌入式系統、物聯網、人工智能;張志偉(碩士研究生),研究方向為嵌入式系統、IPv6網絡;彭意兵(碩士研究生),研究方向為嵌入式系統安全;何頂新(副教授),研究方向為計算機控制技術、嵌入式系統等。