Zostań w domu, zamów taniej!
Nie wychodź z domu i zamów online swoje ulubione pisma 20% taniej. Skorzystaj z kodu rabatowego: czytajwdomu

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 luty 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio luty 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje luty 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna luty 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich styczeń 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów