任何一種網路技術的優化都必須放在特定的應用場景下進行,藍芽mesh也不例外。而網路技術的優化能夠大幅提高整體可用性,形成方案優勢,本文將從功耗、延遲、拓撲等幾個維度出發講解如何設計乙個優化的藍芽mesh網路。
在筆者的其他文章中已經說到,藍芽mesh的通訊技術是借助低功耗藍芽的廣播掃瞄機制,而目前原廠的掃瞄功耗能夠在10ma作用,低功耗藍芽能夠通過連線間隔實現定時睡眠,從而降低功耗。藍芽mesh同樣設計了低功耗節點(low power node)用於實現類似藍芽連線的低功耗方案,與連線類似的是,乙個節點必須在與周圍(single hop)範圍內的朋友節點(friend node)建立紐帶(friendship),這個節點才能成為低功耗節點。這種拓撲屬於網路中的邊緣節點,低功耗節點在大部分時間進入休眠狀態,其內部維持乙個定時器會在紐帶超時前向朋友節點傳送一次請求,而朋友節點會在低功耗節點休眠時儲存其他節點傳送給其低功耗節點的訊息,每當低功耗節點請求時,朋友節點會將這些訊息傳遞給低功耗節點,低功耗節點處理完訊息後,又會進入休眠,如此周而復始,其中超時時間最大可以設定為96小時。這種設計需要確保在其周圍必須存在朋友節點並其本身對於訊息時延要求低。如果裝置由市電**,那將沒有必要考慮這種方式。
可以考慮一下方案進一步優化功耗,考慮一種情況,如果乙個網路中有五個節點,如果每個節點都是**節點並能相互收到。乙個訊息傳送給其單播位址,將會觸發其餘三個節點的**,**次數為3,看起來還好。但是如果目的地節點會傳送相應訊息,同樣三個節點又會**,**次數為3+3,還不算太糟糕。如果乙個節點傳送到組播位址並要求回應,那麼其他四個節點都會**並傳送自己單獨的回應給原位址,而這四個節點的響應訊息又會經過其它三個點的**,**次數為4+3*4,可怕吧,這就是出現廣播泛洪。我們應當避免出現這種情況的發生,首先就是選取其中的乙個或兩個節點作為**節點,而不是都是**節點。其次對於傳送給組播位址的訊息,盡量不要使用帶響應的型別。另外藍芽mesh有幾個引數需要特別注意:
網路層資料廣播次數與間隔
**廣播次數與間隔
網路層時間存活指數
網路層資料廣播次數決定了一次訊息的重複廣播事件的次數,每次在37,38,39通道傳送成為乙個廣播事件。**次數決定**該訊息的重複廣播事件的次數。間隔指的是兩個相連的的廣播事件的時間。
此外ttl表示時間存活係數,每次**該值減一,直到為1將不在進行**。值得一提的是,ttl的最大有效值為127,因此可以通過最多126次**。而ttl可以設定成0,對方節點可以獲知訊息在單跳(single hop)內。
藍芽mesh組網實踐(配網高階篇)
之前介紹了ch582微控制器在藍芽mesh組網中的兩種配網方式,有介紹到 未配網裝置不能選擇被哪個配網器配網,配網器可以選擇給哪個未配網裝置配網。接下來介紹在 可以有選擇配網。ble中有相對完善的黑白名單機制,可惜藍芽mesh並沒有沿用或是發展黑白名單,只能在收到配網信標時,由使用者來判斷是否給裝置...
藍芽那些事之通訊篇
講到通訊,主要也就是bluetoothserversocket和bluetoothsocket這兩個類,其實和serversocket和socket用法都一樣,在建立通訊時,需要建立兩個socket,乙個在客戶端,乙個在服務端。服務端 1 開啟伺服器端執行緒 2private class serve...
ORACLE Oracle提高篇之DECODE
decode含義 decode 條件,值1,返回值1,值2,返回值2,值n,返回值n,預設值 這個是decode的表示式,具體的含 釋為 if 條件 值1 then return 翻譯值1 elsif 條件 值2 then return 翻譯值2 elsif 條件 值n then return 翻譯...