ESP32 WiFi Mesh開發(一):ESP WiFi Mesh簡介(譯文)

ESP WiFi Mesh是樂鑫基於其芯片實現的一種WiFi網狀網。

喫飽了撐的,剛開始瞭解ESP-MESH,據說要做項目,恰巧又沒中文文檔,就翻譯翻譯。

ESP-MDF的無線通信協議基礎

https://esp-idf.readthedocs.io/en/latest/api-guides/mesh.html

譯文:

1 OverView

ESP-MESH是一種多跳網絡,至少需要兩個無線hops網絡設備中間連接)用於從源設備到目的設備傳遞信息。ESP-MESH是一種設備傳輸自身數據同時也作爲其它設備數據傳輸中繼的技術。成功的MESH網絡的先決條件是所有的MESH節點首先在物理層連接成功,其後MESH網絡算法通過物理連接選擇數據傳輸路徑。作爲一種高可靠度,廣覆蓋度的WLAN網絡,ESP-MESH是理想的覆蓋大區域的無線解決方案。

ESP-MESH與傳統無線網絡不同。傳統無線技術提供點對點或者多點的拓撲結構。通常,會有一箇中心節點,例如手機通訊系統中的基站或者802.11 WLAN中的AP節點。這個中心節點與每一個無線終端通過單獨hop路由連接。除此之外,中心節點通過有線連接到骨幹網絡(backbone)。相對照的,ESP-MESH採用樹狀拓撲結構,具有根節點(root node),中間節點(intermediate node)與葉子節點(leaf node),這使得網絡更具有擴展性與容錯性。所有ESP-MESH網絡內的節點都可以成爲根節點,如果根節點異常,網絡會自動選擇一個新的根節點。這些有效減少了樹狀拓撲結構對於單個節點的依賴,並且允許ESP-MESH內每個節點都參與信息的轉發。

ESP-MESH網絡拓撲結構示意:

 

2 Introduction

ESP-MESH定義了一種自組織,自恢復,快速組網,便於控制的的網絡。

ESP-MESH內包含有三類節點:

<1> RootNode:根節點,ESP-MESH樹狀拓撲結構的頂端節點,也是ESP-MESH與外部IP網絡的唯一接口。它的功能是作爲網關轉發外部數據包。

<2> IntermediateNode:中間節點,中間節點可以接收、發送、傳遞來自其父節點與子節點的數據包。

<3> LeafNode:葉子節點,葉子節點可以接收、發送數據,但不能進行傳遞(forward)。

每個ESP-MESH內的節點與其他節點根據其在MESH網絡內的位置構成父子節點關係傳遞數據。根節點,作爲ESP-MESH與外部IP網絡連接節點,與路由器直連且可以在其子節點與路由器之間傳輸數據。ESP-MESH網絡內設備數量與路由器帶寬直接影響到根節點的數據吞吐量(throughput)。

如下圖所示,節點C/D作爲中間節點,同時也是根節點的的子節點。葉子節點A/B/E沒有子節點。其數據流向如圖所示:

 

3 Function Description

3.1 ESP-MESH網絡

3.1.1網絡配置

路由器在ESP-MESH網絡中是強制需求的。用戶需要爲ESP-MESH內每個節點需要配置SSID,密碼與通信信道。如果路由器被隱藏,用戶需要爲節點配置BSSID。(關於ESP-MESH配置方法,詳見《the link to Mesh IoT solutions》,即將推出)

ESP-MESH網絡需要的信息包含在“供應商信息元素VIE”信標幀內。這些信息包括有:

節點類型、節點在網絡內的層信息、網絡各層最大節點數信息、子節點數信息、單個節點允許連接的最大節點數等。

3.1.2根節點選擇

若網絡內不存在根節點,ESP-MESH內的所有設備都會廣播“實時信號強度RSSI”

信號。每個節點的網絡信息,包括信號強度,都會傳輸在整個ESP-MESH網絡內,ESP-MESH網絡內的設備會根據這些信息選擇信號強度最高的節點作爲根節點。

POR,所有ESP-MESH設備被分別掃描。每個都會設備比較其接受到的其他設備相對於路由器的信號強度以及自身相對於路由器的信號強度,並選擇其中信號強度最高的設備進行廣播,作爲根節點申報(root-node candidate)。

接下來,每個ESP-MESH再次掃描MESH網絡,選擇此時信號強度最高的節點作爲根節點申報,這個選擇將被再次廣播。這個過程會重複直到只剩一個根節點申報。

ESP-MESH也提供方法用於加速根節點選舉。

3.1.3 父節點選擇

ESP-MESH提供一種用於在MESH網絡內選出最優父節點的方法。根據該方法,一個節點會通過VIE消息獲取其它節點的信息,並且生成父節點集合。如果父節點集合包括至少兩個節點,具有更優表現參數的一個會被選擇爲父節點。根據該方法,首選的父節點的選擇是基於父節點集合內所有節點類型與表現參數。基於這種選擇父節點的機制,可以保證首選的父節點是最優的選擇,以此來減少丟包提高網絡功能。

3.2  ESP-MESH路由生成與維護

       TODO

3.3  ESP-MESH網絡管理

3.3.1自恢復

自恢復特性使得基於路由的網絡能夠在節點異常或者連接變得不穩定時繼續工作。

如果根節點異常,與根節點直連的第二層節點會很快檢測根節點失敗並初始化新一輪的根節點選舉。如果根節點以及第二層節點全部異常,第三層節點也會進行根節點選舉並選出根節點。

若中間節點或者葉子節點出現異常,異常節點會在預設時間內分別重新連接其父節點,(重連失敗?)然後重新選擇父節點來加入ESP-MESH網絡。

3.3.2 根節點轉換

用戶可以通過調用esp_mesh_waive_root() 轉換ESP-MESH內的根節點。根節點可以被用戶指定或者由網絡自身產生。

3.3.3 根節點衝突處理(?)

多個根節點連接同一個路由器的衝突情況已被處理。多個根節點具有相同的路由SSID不同BSSID的衝突情況未進行處理。

3.3.4 父節點轉換

改變ESP-MESH內一個節點的物理位置會導致父節點信號強度下降與通訊出現不確定性(?)。一旦檢測到這種情況,父節點轉換功能會自動選擇一個更優的父節點。

當手機節點(?)不斷改變其位置,其與父節點的通訊可能會減弱或者丟失,這種情況被檢測到時,手機節點的父節點會被重新選擇,以維持與手機節點的通訊

3.4.5 迴環規避檢測與處理

某節點父節點選擇期間,該節點路由表內的節點會被排除,所以迴環節點的情況可以避免。路徑檢測機制(path verification mechanism)與能量傳輸機制(energy transfer mechanism)會檢測通訊路徑是否出現迴環。當檢測到迴環通路出現,父節點會斷開與子節點的通訊並通知子節點出現迴環的(預設)原因。

3.4.6 信道選擇

TBD

3.4.7 孤立節點的規避與處理

TBD

 

4 DATA Transmission

4.1可靠性

ESP-MESH在MESH層內提供點對點P2P重傳機制

4.2 上傳數據流控制

當ESP-MESH內某節點被選擇爲父節點,其會爲每個子節點的上傳數據分配一個可以動態調整大小的接收窗口。子節點在發送數據包之前會首先向父節點發送窗口請求,父節點將對比窗口請求內的序列號與最近從該子節點收到的數據包序列號。接收窗口的大小經過計算返回給子節點,子節點根據接收到的窗口大小發送數據包給父節點。

除此之外,考慮到ESP-MESH內只有根節點可以與外網進行通訊,如果ESP-MESH內的其他節點無法獲知根節點與外網的連接情況,與此同時仍不停地向根節點發送數據包,可能會導致數據包丟失或者不必要的數據包發送動作。ESP-MESH提供了一種上傳數據的流控機制。流控機制通過監控根節點與外部網絡的連接情況穩定ESP-MESH的外出流量,以避免數據包丟失或者不必要的數據包發送。

4.3 組播包支持

只有指定的設備可以接收組播包,因此,用戶需要指定這些設備通過配置esp_mesh_send()的相關參數。

4.4 廣播包支持

ESP-MESH提供避免帶寬浪費的機制:

<1> 當中間節點接收到來自其父節點的廣播包時,會將廣播包進行傳輸並拷貝發送給它的子節點們。

<2> 當中間節點傳輸自身產生的廣播包時,會將廣播包發送給它的父節點與子節點。

<3> 當中間節點接收到來自子節點的廣播包時,會將廣播包傳輸併發送給父節點與剩餘的子節點。

<4> 當葉子節點產生廣播包時,直接發送給其父節點。

<5> 根節點自身產生的廣播包,發送給其所有子節點。

<6> 根節點接收來自其子節點的廣播包,發送給其它子節點

<7> 當節點接收到來自自身地址的廣播包時,丟棄

<8> 當節點接收來自父節點的廣播包,且該包的源頭是該節點的子節點,丟棄

4.5 組控制

用戶通過esp_mesh_set_group_id()接口設置設備的組ID,當數據包的發送目的地址是組時,只有組內設備能接收到它。

 

5  Performance

<1> 組網時間:50個設備低於15S

<2> 自恢復時間:如果根節點異常,10秒內檢測到問題並且產生新的根節點。如果某個父節點異常,5秒內子節點檢測到問題並找到新的父節點。50個設備測試。

<3> 層際延時:100個設備組網且所有設備不打開AMPDU的情況下測試30ms

<4> 丟包率:100個設備組網測試,從第二層到第四層最大0.32%最低0%

<5> 網絡能力:決定於每個softAP模式允許連接的最大設備數以及網絡內允許的最大層數。默認配置爲支持最大6個連接,最大6層連接。

 

6  ESP-MESH編程指南

軟件協議棧如下:

https://esp-idf.readthedocs.io/zh_CN/latest/_images/mesh_software_stack.png

 

系統事件分發:

https://esp-idf.readthedocs.io/zh_CN/latest/_images/mesh_events_delivery.png

 

<1> 用戶應用任務需要通過esp_mesh_set_config註冊一個MESH事件回調處理接口。該接口用於處理MESH協議棧與LwIP協議棧的事件回調。

<2> 用戶應用可以訪問除根節點外的節點並且不經過LwIP協議棧,根節點需要運行LwIP協議棧的原因是需要與外網通訊,esp_mesh_send()與esp_mesh_recv()用於發送/接收來自於MESH的數據

<3> 雖然目前ESP-IDF不建議在初始化系統時不調用tcpip_adapter_init(),應用任務仍然需要執行LwIP初始化,並且停止DHCP服務端與客戶端服務。執行順序:

tcpip_adapter_init -> tcpip_adapter_dhcps_stop -> tcpip_adapter_dhcpc_stop

由於根節點連接到路由器,所以一旦一個節點變爲根節點,會直接啓動DHCP客戶端服務獲取IP,除非已經設置了靜態IP。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章