Bluetooth發展到4.0版本後,由原本追求頻寬速度,改成追求低耗電量,這是一個很大的變革,Bluetooth 4.0通訊協定也做了一個大翻修,而為人熟知的Bluetooth 4.0亦稱為Bluetooth Smart抑或是Bluetooth Low Energy,簡稱BLE。
BLE雖然在省電方面比前幾代版本都來得傑出,但它犧牲掉的則是資料傳輸的速度,因此BLE並不合適用來傳輸連續性的大型資料,例如影音及圖像等;相對的,該技術比較適合用來傳輸小量且不連續的資料,坊間的運動手環就是最好的例子,而它們所使用的無線傳輸技術就是BLE。
藍牙網路結構分析
一直以來,Bluetooth都是使用星狀網路(Star Network),如圖1左邊所示,星狀網路正中間是Central,一個Central可連線多個周邊(Peripherals)並與之通訊,但Peripherals彼此之間無法互相連線通訊,Central之間也無法互相通訊,因此這樣的星狀網路其網路規模通常很小,且缺乏擴充性。這樣的網路架構,適合用於簡單的一對一或是一對多裝置的無線通訊控制,例如手機一次可以連接多樣藍牙裝置,但卻不適合用於大量裝置之間互相通訊的環境,例如智慧家庭網路並非是星狀網路就可以架構出來的。
圖1右表示的是網狀網路(Mesh Network),其有多種變形,但簡單來說,就是裝置間可以互相連接並延伸下去,而沒有星狀網路的限制,因此網狀網路所組成的網路架構可大可小,且非常具有彈性,但相較於星狀網路,通訊協定就相對複雜,使用及設定也比較困難。
|
圖1 左為星狀網路架構,右為網狀網路架構 |
低耗電量技術BLE的目標,是希望成為物聯網(Internet of Things)的標準通訊協定,而智慧家庭是物聯網中一個很大的項目,目前智慧家庭最常被使用的無線通訊協定是ZigBee,它跟BLE一樣工作在2.4GHz,但使用和BLE全然不同的通訊協定架構,且支援完整的網狀網路。
ZigBee的網狀網路如圖2所示,它把網路中的節點(Node)分成Coordinator(C),Router(R)以及Device(D)。一個網路只能有一個C,而C可以跟R或是D通訊,而R則可以再跟其他D通訊,至於D和D之間彼此則不能通訊,所以布建ZigBee網路時須把角色制定好,然後就可透過Mesh讓整個網路延伸下去,更彈性,且透過這種多跳(Multi-hop)的特性,可以延展無線通訊的距離。
|
圖2 ZigBee網狀網路架構 |
雖然Bluetooth已演進至目前最新的4.2版本(表1),但仍未提出網狀網路,但這將是勢在必行的方向,目前BLE因為和智慧型手機相容的優勢,幾乎獨占智慧穿戴裝置及部分無線控制器市場,但是卻無法打入智慧家庭等應用,因為智慧家庭所需的架構及裝置數目,須使用整合性及擴充性夠強的網路,而這是目前BLE的弱勢,所以網狀網路會是BLE邁向物聯網必經之路,相信或許下一個版本,將有可能為Bluetooth帶來全新的網狀網路架構。
|
表1 藍牙4.0版至4.2版規格特色比較表 |
雖然BLE規格並沒有納入網狀網路,但它既然是一個無線通訊協定,就還是有辦法透過應用層(Application Layer)實作特定機制,來達到網狀網路預期的功能,也就是所謂的專屬網狀網路(Proprietary Mesh)。
BLE網狀網路實作方法
BLE有兩種做法可達到網狀網路,兩者都得透過在應用層加入Mesh相關的通訊協定,第一種方式是透過連線來達到Mesh,另一種則是透過廣播方式。
第一種方法的優點是通訊之前就會先建立連線,所以裝置間的通訊是很明確由某一個來源節點(Source Node)到另一個目標節點(Destination Node),且會有BLE的通訊協定保證資料正確送達,但缺點是實作比較困難,且若資料傳遞需求是一對多(例如關閉或開啟一個空間內所有的燈),會很沒效率。
第二種透過廣播的方式,則比較容易實作,也很適合做大量裝置的同時控制,但缺點是廣播訊息表示非目標節點也會收到這些訊息,而大量的廣播訊息會讓整個無線環境干擾變大,資料也會有遺失的可能,下面會更詳細的介紹這兩種方式的實作概念。
先談第一種方式,前文提過BLE有Central及Peripheral兩種角色的差異,且兩種角色的功能及能力不同,其中一個限制就是只有Central可以主動發起對Peripheral的連線,所以若要使用BLE架構起如圖3左的網狀網路,且必須透過連線方式的話,則前提是BLE裝置本身有角色切換(Role Switch)的能力,也就是能夠自由的視需求及狀態來切換角色。有了這個功能後,每個裝置必須記錄如圖3右的Routing Table,這個表格用來記錄每個裝置之間的聯通性,此處顯示的是比較簡單的雙向聯通。有了這兩樣要素後,BLE就能夠達到網狀網路的功能。
|
圖3 透過連線方式實現BLE網狀網路 |
舉例來說,當使用手機連接D並傳送一關燈指令給F的時候,訊息傳遞的步驟如下:
接下來討論第二種透過廣播方式達到網狀網路的設計。這是目前比較常見的BLE Proprietary Mesh解決方案。BLE通訊協定的特性是廣播者(Broadcaster)使用三個固定的通道(Channel)38、39、40來做為廣播的通道,而接收者(Observer)只要去接收這三個特定的通道,便可收到Broadcaster送來的廣播訊息。
藉由這個特性,BLE要用廣播方式達到網狀網路非常簡單,當有一個資訊要傳遞到網路給特定裝置時,只要由一個起始裝置將資訊廣播出去,並且規定所有收到此廣播資訊的裝置,必須再將此資訊廣播出去,如此一傳十,十傳百,整個網路的裝置都會收到此訊息。而若目標裝置也收到此訊息,它便會去執行此訊息的對應工作。
在此補充一點,如同連線型的BLE Mesh需要Central及Peripheral角色切換功能,若要達到廣播型的BLE Mesh,裝置也必須要有切換Broadcaster及Observer角色的能力才行。
以圖4為例,假設該網路有A到F共六個裝置,當用戶想要以手機透過D關掉F控制的燈,則訊息傳遞步驟如下:
圖4左圖是廣播進行的方式,實體線表示這個訊息第一次(新的訊息)傳遞給接收端的狀況,虛線則表示是這是已經收過的訊息,也就是無用的廣播訊息,因此我們把實體的部分取出,就得到右圖的部分,它是真正訊息的傳遞(Effective Message Flow)方式。
這種廣播訊息傳遞有兩種特性,一是就算起始跟目標裝置沒改變,每次的Effective Message Flow都是不同的,另一個特性就是如圖4左所表示,這方式會讓整個網路上充斥著一堆沒用的資訊,也就是虛線廣播訊息部分,這種垃圾訊息一但太多,將可能癱瘓掉整個網路,所以廣播式的Mesh通常會加入一些機制來避免過量的垃圾訊息,可能做法是如下:
|
圖4 以廣播方式實現BLE網狀網路 |
BLE Mesh實作案例分析
網路上還有很多種BLE Mesh的實作方式,接下來以一個實際的BLE網狀網路實作案例來做探討,該案例是由Nordic公司所推出的Nordic-Bcast-Mesh,它是一個開源的專案,可以由下列GitHub網址取得:https://github.com/NordicSemiconductor/nRF51-ble-bcast-mesh。
Nordic-Bcast-Mesh顧名思義就是利用廣播來達到網狀網路,由一個裝置廣播送出訊息後,所有收到此廣播訊息的裝置,再把此訊息廣播出去給它的鄰近裝置,這種方式也被稱為「Packet Flooding」;Nordic-Bcast-Mesh主要就是使用這個機制來做網狀網路,其特點如下:
Nordic-Bcast-Mesh如何在BLE上配合Trickle演算法,實作出網狀網路?首先是每個網路中的BLE裝置都必須是BLE GATT Server,這個GATT Server會有Mesh Service,然後下面會有Mesh Metadata Characteristic及多個Mesh Value Characteristics,其UUID如表2所示。
|
表2 Nordic-Bcast-Mesh的UUID |
Mesh Metadata結構如表3所示,用來儲存網狀網路的設定參數,這些參數可以被網路中的其他裝置讀取,以及透過演算法的機制被修改,其項目簡介如下:
|
表3 Mesh Metadata結構 |
Mesh Service下面會有一到多個Mesh Value Characteristics,最多可以到155個,Mesh Value是整個網狀網路共享的狀態資訊,一個Mesh Value最多28Bytes,可被網狀網路的每個裝置做更新。
另外,每個Mesh Value都是獨立的,會搭配一個Handle用來識別跟區分,所以Handle配上Value就成為Mesh Value Pair,每個Value Pair會運作自己獨立的Trickle演算法,也就是Mesh Values之間的Rebroadcasting機制運作完全彼此獨立。Mesh Value除會有對應紀錄的Handle之外,還會記錄如版本(Version Number)、最後的傳送者(Last Sender)等資訊,但這資訊在不同裝置間不一定相同,透過Trickle演算法會做更新。
再來看網狀網路內廣播的訊息,圖5所示為BLE廣播封包的格式,分別是:
|
圖5 BLE廣播封包格式 |
舉一個例子,假設要用BLE無線控制一棟建築內所有的電燈開關,要能一起開一起關,所以網狀網路就是由每個BLE電燈控制器組成,而且會需要一個Value Characteristic(假設Handle為0x01),其內容就是電燈的開跟關,例如0及1分別代表關與開,而所有網路中的裝置都有此Characteristic,並會保持一致的內容。
假設目前狀態都是關燈,而當要開燈時,會由某一個裝置發起廣播,其廣播內容會在Advertisement Address帶上此裝置位址,然後Handle 0,版本就直接使用上一版本加一,然後Content帶上0x01是開燈的命令。而這廣播訊息會透過Rebroadcast方式,配合Trickle演算法,讓此開燈命令傳遞到整個網路。
接下來是核心的部分,也就是Trickle演算法的部分,目的是讓裝置自己決定何時要做廣播的動作,而決定的因素是基於網路目前的活動頻繁程度,以及上次收到訊息的時間間隔。
Trickle演算法主要就是操控Interval I,此I值越大,兩次廣播間的時間越長:
演算法很簡單,分析一下它的概念,I用來控制的是多久Broadcast一次:
最後回到BLE網狀網路的主題,由這篇文章的討論,可以知道雖然BLE規格目前還沒有制定Bluetooth的網狀網路架構,但是藉由BLE通訊協定的特性,仍可建立出BLE網狀網路,但建議還是必須搭配應用的需求,明確列出針對此網狀網路需要的應用,並針對應用去設計跟建立正確的網路架構,才是最好的方式。