System komunikacji bezprzewodowej z użyciem modułów ESP32 oraz protokołu ESP-MESH (1)

System komunikacji bezprzewodowej z użyciem modułów ESP32 oraz protokołu ESP-MESH (1)
Pobierz PDF Download icon

Słowo „mesh” – określające sieci bezprzewodowe o topologii kratowej – przylgnęło do technologii Bluetooth. Organizacja Bluetooth SIG na swojej stronie internetowej reklamuje się hasłem „Mesh networking is blue”. Choć topologia kratowa wykorzystywana jest z powodzeniem od czasów powstania pierwszych sieci komputerowych, to dopiero wprowadzenie standardu Bluetooth Mesh w połowie 2017 roku zaowocowało wzrostem zainteresowania konstruktorów urządzeń IoT tą technologią. Czy zatem przystępując do budowy sieci czujników, połączonych w łatwo konfigurowalną i skalowaną sieć Mesh, jesteśmy „skazani” na Bluetooth? Oczywiście, że nie!

W artykule zostanie zaprezentowany projekt prostej i taniej sieci zbudowanej w oparciu na komunikacji Wi-Fi, popularnych modułach ESP32[1] oraz protokole ESP-MESH[2]. Choć określenie „mesh” użyte w nazwie protokołu stanowi spore nadużycie (sieć pracuje w typowej topologii drzewa), to skalowalność, zaimplementowane mechanizmy autokonfiguracji (self-forming) oraz samouzdrawianie sieci (self-healing) pozwalają nam, w pewnym stopniu, rozpatrywać ją w charakterze typowej sieci kratowej.

Topologie sieci bezprzewodowych

Nie wchodząc w szczegóły, związane z budową oraz zaletami/wadami poszczególnych konfiguracji sieci, możemy wyróżnić topologie (rysunek 1):

  • liniową (Linear Topology),
  • gwiazdową (Star Topology),
  • pierścieniową (Ring Topology),
  • kratową (Mesh Topology),
  • drzewa (Tree Topology).
Rysunek 1. Topologie sieci

Dochodzą jeszcze topologie hybrydowe, będące połączeniem ww. konfiguracji. Wymieniona lista nie wyczerpuje tematu, a każda z topologii może występować w kilku wariantach. Przykładowo, sieci Mesh mogą pracować w tzw. pełnej siatce (Full Mesh), w której każdy węzeł sieci ma fizyczne połączenie z dowolnym innym węzłem. Co innego w konfiguracji siatki częściowej (Partial Mesh), gdzie nie wszystkie węzły sieci mają tę samą liczbę połączeń do innych węzłów.

Jednym z najlepszych przykładów typowej sieci gwiazdowej jest połączenie pomiędzy punktem dostępowym (AP) a wszystkimi urządzeniami bezprzewodowymi, pracującymi w ramach jednej lokalnej sieci Wi-Fi. Rozwiązanie to – dobrze spisujące się w typowych zastosowaniach tworzenia sieci lokalnej w domach lub biurach – nie jest najlepszą architekturą dla obszernych sieci czujników pomiarowych (często do 1000 węzłów), rozmieszczonych na dużym obszarze (znacznie przekraczającym zasięg komunikacji na poziomie AP ↔ węzeł). W typowej konfiguracji gwiazdowej pojedynczy punkt dostępowy (koordynator) jednoznacznie ogranicza maksymalną liczbę węzłów, które mogą zostać podłączone do sieci (255 dla sieci Wi-Fi), jednocześnie definiuje obszar działania takiej sieci, wynikający z maksymalnego zasięgu komunikacji pomiędzy koordynatorem a najdalej oddalonym węzłem – rysunek 2.

Rysunek 2. Ograniczenia zasięgu dla typowej sieci gwiazdowej

Węzły oznaczone numerami 6, 7, 8 oraz 9 znajdują się poza zasięgiem komunikacji koordynatora i nie mogą zostać przyłączone do sieci.

Architektura sieci ESP-MESH

Jak łatwo zauważyć na rysunku 2, problemy i ograniczenia zasięgu występujące w typowej konfiguracji gwiazdowej mogą zostać rozwiązane poprzez wprowadzenie możliwości komunikacji na poziomie węzeł-węzeł, bez konieczności zestawienia bezpośredniego połączenia z koordynatorem sieci. Takie rozwiązanie nie tylko eliminuje problemy związane z ograniczeniem liczby węzłów, które mogą zostać podłączone bezpośrednio do sieci, ale pozwala jednocześnie uzyskać nieograniczony (teoretycznie) zasięg komunikacji – rysunek 3. Przy wykorzystaniu technologii Wi-Fi, protokołu ESP-MESH oraz modułów ESP32 maksymalna odległość, na jaką mogą zostać oddalone poszczególne węzły, wynosi około 200 metrów, co przy tysiącu węzłów w sieci pozwala na pokrycie zasięgiem bardzo dużego obszaru.

Rysunek 3. Rozszerzenie działania sieci poprzez wprowadzenie komunikacji węzeł-węzeł

Protokół ESP-MESH bazuje na typowej komunikacji Wi-Fi. Jak zatem uzyskano połączenia na poziomie węzeł-węzeł? Idea rozwiązania jest dość prosta i najłatwiej zobrazować ją jako zestawienie wielu podsieci typu Star w jedną sieć. W takim rozwiązaniu każdy z węzłów, oprócz typowych funkcji (nadawanie/odbiór danych pomiarowych), pełni jednocześnie rolę punktu dostępowego (softAP) dla kolejnych węzłów oraz pośrednika w przekazywaniu wiadomości z niższych warstw. Schemat takiej sieci pokazuje rysunek 4, na którym widać także, że w przypadku frameworku ESP-MESH mamy do czynienia z typową architekturą drzewa.

Rysunek 4. Architektura sieci ESP-MESH

Pokazana na rysunku 4 konfiguracja sieci pozwala nam zdefiniować cztery typy węzłów:

  1. Węzeł ROOT. W ramach sieci ESP-MESH może występować wyłącznie jeden węzeł tego typu, odpowiedzialny za ewentualne połączenie z bramą zewnętrzną i komunikację z siecią Internet. Wybór węzła ROOT może być realizowany automatycznie (poprzez formę wyborów opartych na sile sygnału) lub poprzez wybór użytkownika na etapie budowania i konfiguracji sieci.
  2. Węzły LEAF. Mogą wyłącznie wysyłać lub odbierać własne pakiety. Nie mają połączeń typu child, a tym samym nie pośredniczą w przekazywaniu pakietów danych w sieci. Tworzone są w momencie osiągnięcia przez sieć maksymalnej liczby warstw lub węzłów.
  3. Węzły PARENT. Podłączone są do węzła ROOT lub PARENT. Nawiązują jednocześnie 0 lub więcej połączeń typu child. Wysyłają lub odbierają komunikaty oraz pośredniczą w przekazywaniu komunikatów dla połączeń typu child.
  4. Węzły IDLE. Są to węzły, które nie dołączyły do sieci. Spróbują uzyskać połączenia do węzłów typu PARENT, działających w ramach ustalonego ID sieci lub, o ile nastąpi taka konieczność, uzyskać status węzła ROOT.

Formowanie sieci ESP-MESH

Zanim przejdziemy do praktycznej realizacji sieci, przyjrzyjmy się chwilę dwóm użytecznym funkcjom, udostępnianym przez protokół ESP-MESH:

  • automatyczne formowanie i konfigurowanie sieci (self-forming),
  • automatyczna naprawa sieci w przypadku odłączenia węzła typu ROOT lub PARENT (self-healing).

Proces automatycznego formowania sieci może zostać podzielony na cztery etapy:

  • wybór węzła typu ROOT – realizowany w sposób automatyczny lub manualny,
  • formowanie drugiej warstwy – proces podłączenia pierwszych węzłów do węzła typu ROOT,
  • formowanie kolejnych warstw – proces podłączania kolejnych węzłów IDLE do węzłów PARENT,
  • ograniczanie liczby warstw – tworzenie węzłów typu LEAF w przypadku osiągnięcia maksymalnej pojemności sieci lub liczby warstw.

W pierwszym etapie formowania sieci realizowany jest proces wyboru węzła ROOT. Na etapie konfiguracji i kompilacji programu użytkownik może zdecydować, czy proces ten powinien zostać zrealizowany automatycznie (w procesie „wyborów” bazujących na wartości współczynnika RSSI), czy poprzez wskazanie wybranego węzła na etapie kompilacji programu. W pierwszym z przypadków, za pomocą ramek Wi-Fi Beacon, każdy z węzłów IDLE rozsyła rozgłoszeniowo swój adres MAC (będący jednocześnie unikatowym identyfikatorem węzła) oraz wartość współczynnika RSSI, dla połączenia z routerem/bramą dostępową. Jeżeli węzeł stwierdzi, że wartość współczynnika RSSI dla sąsiadującego węzła jest wyższa, wówczas zaczyna przesyłać ramkę „silniejszego” sąsiada. Tak skonstruowane wybory kończą się w chwili osiągnięcia określonej liczby iteracji (bardziej rozbudowane sieci wymagają większej liczby iteracji) i po uzyskaniu przez jeden z węzłów zdefiniowanego „progu wyborczego”, określonego współczynnikiem – liczba zdobytych głosów/liczba głosujących.

Zarówno liczba iteracji, jak i próg mogą zostać skonfigurowane na etapie kompilacji programu. Użytkownik może również dokonać wyboru węzła typu ROOT samodzielnie, poprzez wywołanie w kodzie programu funkcji esp_mesh_set_parent() (dla węzła ROOT) oraz funkcji esp_mesh_fix_root() dla pozostałych węzłów, pomijając tym samym proces głosowania na etapie formowania sieci. Przykładowy wybór węzła ROOT w sposób automatyczny został pokazany na rysunku 5.

Rysunek 5. Automatyczny wybór węzła ROOT [5]

Kolejnymi etapami formowania sieci jest organizacja drugiej i kolejnych warstw połączeń. Całość procesu realizowana jest automatycznie w ramach protokołu ESP-MESH. Wybór węzłów PARENT, do których zostaną podłączone węzły IDLE, realizowany jest poprzez wskazanie tzw. Preferred Parent Node – a więc węzłów wybieranych na podstawie aktualnego numeru warstwy, jak i liczby już nawiązanych połączeń typu child. Węzły IDLE preferują węzły PARENT o niższej wartości numeru warstwy. Tak dobrane kryteria wyboru pozwalają zminimalizować liczbę warstw tworzonej sieci. Użytkownik może również w sposób programowy wykonać manualną konfigurację sieci w postaci określenia preferowanych węzłów typu PARENT. Przykład programowej realizacji takiej sieci został przedstawiony w Mesh Manual Networking Example [3]. Przedstawiony powyżej przypadek tworzenia sieci przyjmuje założenie, że wszystkie węzły sieci zostały włączone w tej samej chwili, a w momencie wyboru węzła typu ROOT pozostawały węzłami typu IDLE. W przypadku asynchronicznego dołączenia nowych węzłów do sieci nie jest przeprowadzany nowy proces wyborów nawet w przypadku, gdy nowe węzły mają lepszą wartość współczynnika RSSI. Nowy proces wyborów może zostać rozpoczęty wyłącznie po wywołaniu przez obecny węzeł ROOT funkcji esp_mesh_waive_root().

Piętą achillesową systemów komunikacji, zbudowanych w oparciu na topologii gwiazdy, jest awaria koordynatora, która jest jednoznaczna z utratą komunikacji w całym systemie. W przypadku sieci w architekturze drzewa awaria węzła typu PARENT powoduje utratę łączności wyłącznie z częścią systemu. Rozległość awarii zależy od warstwy, w której obecnie znajduje się węzeł. Natomiast awaria węzła typu ROOT uniemożliwia nawiązanie łączności z siecią przez bramę dostępową. Komunikacja typu węzeł-węzeł wciąż może być realizowana w wybranych fragmentach sieci. W praktycznych realizacjach sieci Mesh węzły często pełnią funkcję urządzeń mobilnych, które mogą okresowo znikać z zasięgu działania sieci. Tym samym programiści protokołu ESP-MESH zdecydowali się zaimplementować funkcje związane z naprawą sieci i udostępnili mechanizmy automatycznego przełączania węzłów typu ROOT oraz PARENT w przypadku ich awarii lub opuszczenia sieci. W przypadku awarii węzła typu ROOT węzły w drugiej warstwie sieci automatycznie wykryją brak koordynatora. Po kilku nieudanych próbach połączenia przeprowadzą wybory nowego węzła ROOT, analogicznie jak w procesie pierwszej konfiguracji sieci, bazując na wartościach współczynnika RSSI. Zbliżony mechanizm zastosowano w przypadku awarii węzłów typu PARENT.

W praktyce

W kolejnej części artykułu opiszemy, jak skonfigurować środowisko esp-idf oraz jak w praktyce realizować proces automatycznej konfiguracji sieci i wymiany danych pomiędzy węzłami w ramach protokołu ESP-MESH. Od strony sprzętowej wykorzystamy do tego celu zestawy deweloperskie ESP32-DEVKITC-32 [4], wyposażone w moduł ESP-WROOM-32D oraz konwerter USB-UART (bazujący na układzie Silabs CP2102).

Fotografia 1. Zestaw deweloperski ESP32-DEVKITC-32

Całość zmontowana jest na płytce PCB z rastrem wyprowadzeń 2,54 mm – fotografia 1.

Łukasz Skalski
contact@lukasz-skalski.com

Bibliografia:
https://bit.ly/3jO9Zqe
https://bit.ly/2XbOy8P
https://bit.ly/33boD54

Przypisy:
[1] ESP32, 22.07.2020, https://bit.ly/3gfQMvl
[2] ESP-Mesh Programming Guide, 22.07.2020, https://bit.ly/3jO9Zqe
[3] Mesh Manual Networking Example, 22.07.2020, https://bit.ly/2DguxHk
[4] kamami.pl, 22.07.2020, https://bit.ly/2D2n1Qr
[5] Espressif technical documents, 22.07.2020, https://bit.ly/338osY9

Artykuł ukazał się w
Elektronika Praktyczna
sierpień 2020
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich styczeń 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów