Pracuję nad siecią opartą na ESP8266 i wszystko wydaje się działać dobrze, używając przykładowego kodu z EasyMesh firmy Coopdis . W jego przykładzie 3 ESP8266 zarejestrowało się w siatce i obsługuje prosty interfejs WWW. To też działa idealnie dla mnie.
Jednak w moim rozwiązaniu potrzebuję jednego z tych węzłów, aby połączyć się z Internetem, aby cała siatka mogła uzyskać do niego dostęp (lub przynajmniej dostęp do siatki). Jest to również wspomniane w dokumentacji ESP8266 Mesid User Guid (strona 4) z Espressif . Znalazłem również kilka innych dokumentów, które publikują, wszystkie mówią o tym, ponieważ jest to po prostu normalne, ale bez żadnego przykładowego kodu, który mógłbym łatwo zrozumieć.
Jak skonfigurować siatkę, aby łączyła się również z routerem. Czy to tak proste, jak użycie tego samego identyfikatora SSID i klucza dostępu do sieci kratowej, tak jak w przypadku routera Wi-Fi, czy też muszę zrobić coś takiego jak Raspberry Pi jako część sieci Wi-Fi, którą można następnie podłączyć do mojego routera przez połączenie Ethernet? Nie sądzę jednak, aby ta ostatnia była wymagana od badań, które przeprowadziłem.
Potrzebuję do tego przykładowego kodu hello world. Wydaje mi się, że polecenia AT mi nie pomogą.
źródło
Odpowiedzi:
Inną opcją łatwej siatki jest użycie bezbolesnej siatki BlackEdder i wprowadzenie mostu do dojazdów do świata zewnętrznego.
Występuje problem z połączeniem z inną siecią z siatki w bezbolesnym gitlabie, który wyjaśnia cztery różne rozwiązania. Rozwiązania mogą również działać w easyMesh, ponieważ problem był początkowo tam poruszany, ale na pewno w bezbolesnyMesh.
Spojrzałem na nie, a najbardziej działające rozwiązania wymagały obu dodatkowych urządzeń do siatki, aby obsłużyć faktyczne połączenie z siecią zewnętrzną.
Pierwszy wprowadziłby czwarty esp8266 dla twojego projektu. Zostałby podłączony do Internetu i komunikował się z jednym z twoich węzłów poprzez połączenie szeregowe.
Innym byłoby użycie urządzenia Raspberry PI do zbierania danych i łączenia się z inną kartą Wi-Fi do innej sieci.
Pozostałe dwa nie były dobre, jeden był zniechęcony przez autora, a drugi tak skomplikowany i ograniczony przez esp8266, że nie spróbowałbym.
Cały przewodnik w gitlab .
źródło
Zmodyfikowałbym trochę istniejącą implementację EasyMesh, ponieważ obecnie nie wydaje się ona implementować ról węzłów. Każdy węzeł jest równy i mogą budować połączenia tylko ze sobą. Jak widzę, nie ma sposobu, aby dodać serwer do ich tabel routingu, ani zaznaczyć konkretnego rekordu połączenia w tabelach, które mają łączność z serwerem.
Węzły używają listy połączeń do kierowania / przekazywania wiadomości. Potrzebny jest węzeł, który ma rekord połączenia z serwerem, taki właśnie jest węzeł główny.
Teraz, gdy węzeł jest zasilany, skanuje dostępne punkty dostępowe (punkty dostępu), odfiltrowuje te, które nie zaczynają się od prefiksu siatki, a następnie łączy się z punktem dostępowym z najlepszym RSSI. Również każdy węzeł tworzy swój AP z nazwą prefiksu siatki + unikalnym identyfikatorem chipa węzła .
Jeśli żaden inny węzeł nie jest dostępny, będzie po prostu czekał na połączenie innych. I to jest pierwszy punkt, w którym należy zastosować zmiany. Możesz zaprogramować na stałe lub w jakiś sposób skonfigurować unikalny AP o nazwie takiej jak prefiks siatki + „Serwer”, a jeśli żaden inny AP EasyMesh nie jest dostępny, węzeł powinien połączyć się z tym AP i zapisać wcześniej zdefiniowany
meshConnectionType
obiekt na liście połączeń.espconn
Pole tego obiektu nie zostanie określone na podstawie wymiany komunikatów między serwerem a węzłem, ale można ustalić stałe wartości, z wyjątkiem pola. Ten należy nabyć jak w innych przypadkach. W poniższej strukturze będziesz potrzebować tylko zmiennej pierwszy do członka.chipId
Będzie adres serwera w sieci kratowej. Powinieneś wybrać jedną wartość, która nie może być identyfikatorem układu ESP8266.Tak więc w zasadzie pierwszym węzłem, który włącza się w twojej sieci, będzie węzeł „root”. Jeśli inne węzły chcą wysyłać wiadomości do serwera, wiadomość zostanie wysłana do węzła „root” na podstawie rekordów połączeń bezpośrednich (nazywanych podpodłączami w kodzie).
Węzeł „root” dowie się wtedy, że ma bezpośrednie połączenie z serwerem (z routerem / Internetem) i ponieważ jest to komunikat do serwera, że powinien przekazać tę wiadomość w inny sposób (nie w sposób podobny do siatki) . Oczywiście potrzebne są tutaj dodatkowe informacje, takie jak adres IP serwera i użyty port. Powinny one również być przechowywane domyślnie lub za pomocą jakiejś metody konfiguracji w węźle (na każdym węźle).
Zatem na koniec węzeł „root” wyśle wiadomość IP do serwera, którą należy ponownie wdrożyć.
TL; DR; Wniosek:
destId
), który będzie używany w sieci kratowej podczas wysyłania wiadomości do serwera. Informacje te powinny być domyślnie dostępne dla wszystkich węzłów.destId
do listy połączeń węzła głównego.To tylko teoretyczny pomysł, który wpadłem na pomysł, czytając implementację EasyMesh. Mogłem przeoczyć jakiś ważny fakt, który uczyniłby to trudnym lub niemożliwym do wdrożenia. Może to również nie być najskuteczniejszym sposobem rozwiązania problemu. Nie jestem ekspertem od sieci kratowych.
Posiadanie węzła głównego w sieci pyta „Co się stanie, jeśli root zostanie rozłączony? Jak zostanie wybrany nowy root?”.
źródło