Meshtastic – co to, po co i jak?

Nazwę Meshtasatic słyszałem już jakiś czas temu, proszono mnie bym spróbował przybliżyć ten temat. Wcześniej sam nie miałem z nim doświadczeń, więc zacząłem pierwsze eksperymenty. Tutaj napiszę o swoich wrażeniach, bo mimo, że dokumentacji dużo, materiałów sporo to jednak nie wszystkie koncepty dla mnie na początku były oczywiste.

Zacznijmy od hasła Meshtastic: An open source, off-grid, decentralized, mesh network built to run on affordable, low-power devices. Spróbujmy przetłumaczyć – Otwarto-źródłowa, poza-sieciowa, zdecentralizowana sieć kratowa zbudowana z użyciem niedrogich urządzeń nie używających dużych mocy.

Nie wiem czy dobrze mi wyszło ale co to znaczy? Meshtastic to sieć do przesyłania niewielkich wiadomości. Zdecentralizowana – czyli nie ma żadnej sztywnej struktury/hierarchii. Nie ma stacji bazowych, bramek, operatora, firm telekomunikacyjnych. Otwarto-źródłowa – całość kodu jest dostępna, działa na prostych i dostępnych dla każdego (bez licencji) urządzeniach radiowych. Każde urządzenie w sieci przekazuje dalej wiadomości od innych – dodanie nowego urządzenia zwiększa zasięg sieci i poprawia pokrycie terenu.

Czy już nieco jaśniej? Czujecie teraz nieco lepiej czym w ogóle jest ten Meshtastic?

Całość komunikacji jest zaszyfrowana, każdy może utworzyć własny kanał w którym mogą się komunikować wszystkie urządzenia w zasięgu. Klucze szyfrujące przekazuje się postaci kodu QR, który trzeba zeskanować by urządzenie mogło dołączyć do kanału.

Co to znaczy być w zasięgu sieci? Tutaj są dwa aspekty. Pierwszy to fizyczny zasięg transmisji radiowej. Chyba to oczywiste że twoje urządzenie musi być w stanie wymieniać wiadomości z co najmniej jednym urządzeniem w sieci. Tutaj zasięg zależy od warunków terenowych i może to być od kilkuset metrów do wielu kilometrów. Ale to drugie to oczywiście przy bardzo sprzyjających warunkach – otwarty teren i urządzenia w linii wzroku (LOS – Line of Sight). Ale to określa zasięg tylko między dwoma urządzeniami. Ponieważ jest to sieć kratowa (mesh), każdy węzeł sieci transmituje wiadomości od innych. Więc wystarczy że masz w zasięgu jedno urządzenie, które ma łączność z kolejnymi i możesz wymieniać wiadomości ze znaczną ilością węzłów.

Ale to rozszerzenie zasięgu nie jest w nieskończoność. Jak łatwo sobie wyobrazić, każde urządzenie w zasięgu wysyła jeszcze raz twoją wiadomość, przez co liczba wiadomości w sieci rośnie lawinowo. Protokół Meshtastic ma wbudowany bezpiecznik – hop count. Każda wiadomość ma taki licznik, domyślnie o wartości 3. Gdy węzeł przekazuje cudzą wiadomość zmniejsza ten licznik o 1. Gdy któryś węzeł słyszy wiadomość o hop count równym 0 nie przekazuje jej dalej. W ten sposób propagacja wiadomości jest ograniczona.

W tym kontekście zasięg wynosi 4 węzły – to jest najdalej jak twoja wiadomość w sieci może się oddalić. I od razu powiem – w konfiguracji urządzenia jest pole w którym wpisać można startową wartość dla hop count. Nie wpisuj większej wartości niż 3, zostaw wartość domyślną!

Do czego może służyć Meshtastic?

Skoro jest to zdecentralizowane, poza-sieciowe rozwiązanie oparte o niedrogie urządzenia to jest to świetne narzędzie do budowania kanałów komunikacji elektronicznej tam gdzie nie ma „tradycyjnych” możliwości łączności. Pomyśl o grach terenowych, zwiedzanie odludnych terenów, różnego rodzaju wydarzenia na rozległych terenach. Ale również w przypadku katastrof naturalnych. Wiem, że są wśród nas ludzie angażujący się w pomoc w przypadku różnych zdarzeń losowych. Łączność jaką może zapewnić Meshtastic w takich sytuacjach jest nieoceniona.

No dobra, to jak skorzystać z Meshtastic?

Do wymiany wiadomości tekstowych potrzeba dwóch rzeczy. Pierwsza to smartfon z Bluetooth, który będzie tym fizycznym urządzeniem na którym działa aplikacja wysyłająca i wyświetlająca wiadomości. Druga to sparowany z telefonem nadajnik radiowy, który jest właściwym węzłem w sieci Meshtastic.

Oparta ona jest o komunikację radiową w standardzie LoRa i tak się składa, że dla urządzeń Heltec są gotowe wsady binarne (firmware).

Konkretnie dla Heltec WiFi LoRa 32 v3. Podejrzewam że znany z wcześniejszych artykułów Heltec Wireless Stick Lite v3 też by zadziałał (ten sam procesor i moduł radiowy) ale WiFi LoRa 32 ma przewagę w postaci dostępnej obudowy plastikowej, dzięki czemu użycie będzie wygodniejsze.

Wgrywanie Meshatastic na Heltec’a

Są dwie ścieżki wgrania wsadu na płytkę. Pierwsza wydaje się być łatwiejsza dla osób nie mających doświadczenie z wgrywaniem na płytki z ESP32 – oficjalny webowy wgrywacz firmware. Działa w przeglądarce wspierającej WebSerial API (obecnie Google Chrome oraz Edge).

Wybierz urządzenie Heltec v3, najnowszy firmware stabilny i naciśnij Flash.

Otworzy się okienko:

Zanim podepniesz płytkę do komputera kablem USB – pamiętałeś o podpięciu anteny LoRa, która jest w zestawie? Nie podłączaj póki tego nie zrobisz – zasilony moduł bez anteny może uszkodzić swój tor radiowy LoRa.

O ile pamiętam konieczne było manualne wprowadzenie ESP32 w tryb ładowania firmware. Zanim podłączysz kable USB wciśnij przycisk PRG na Heltec. Jeśli masz założoną już obudowę to na przyciskach są słabo widoczne litery – ten z literą P to PRG. Drugi (R) to reset. Po podłączeniu możesz już puścić przycisk PRG. Ewentualnie, gdy operacje z kablem nie są wygodne – na podłączonym już module wciśnij i przytrzymaj PRG i wciśnij reset. Puść reset i po sekundzie możesz zwolnić PRG.

Kliknij Update i otworzy się okno z listą portów szeregowych – wybierz właściwy i kliknij Confirm. Gdy nie potrafisz rozpoznać portu (powinien być opisany) – zobacz listę portów przed podłączeniem Helteca kablem USB i sprawdź drugi raz po podłączeniu – ten który się pojawił to ten właściwy.

Po kliknięciu Confirm zaczyna się ładowanie. Gdy wyniki prezentowane w oknie utkną na komunikacie Connecting........ poczekaj jeszcze chwilę i w razie czego powtórz całość (czy pamiętałeś o wprowadzeniu ESP32 w tryb ładowania firmware?).

Prawidłowy obraz powinien zawierać kolejne komunikaty po Connecting z procentowym postępem ładowania. Całość przeszła – wciśnij reset na płytce Heltec i powinno pojawić się na ekranie logo Meshtastic.

Druga ścieżka, na wypadek gdy pierwsza zawiedzie, albo dla tych dla których esptool to codzienność. Ten „tool” to taki multitool dla ESP8266/ESP32, ale działa z linii poleceń. Nie będę tutaj się rozpisywał jak go zainstalować, w sieci znajdziesz łatwo przewodnik dla swojego systemu operacyjnego. Ja tutaj zostawię dwie wskazówki. Pierwsza to przykładowe wywołanie, którego użyłem na swoim komputerze z Ubuntu:

esptool.py --port /dev/ttyUSB1 -b 921600 write_flash 0  firmware-heltec-v3-2.5.14.f2ee0df.bin 

Druga wskazówka to jak znaleźć właściwy wsad. Idź na stronę z plikami do pobrania Meshtastic i w sekcji Firmware kliknij na Download stable. Przekieruje cię na stronę GitHub z plikami do pobrania. Szukaj właściwej paczki – skoro Heltec v3 (zarówno WiFi LoRa i wspomniany Wireless Stick Lite) korzystają z ESP32-S3, to ściągnij paczkę firmware-esp32s3-VERSION.zip.

Rozpakuj i znajdziesz w środku firmware-heltec-v3. Plik bin, który należy wskazać esptool do wgrania w Helteca.

Meshtastic – aplikacja na smartfon

Zainstaluj Meshtastic na smartfonie. Tutaj załączę kilka zrzutów ekranu z wersji na Android. Po uruchomieniu, kliknij w ostatnią zakładkę i potem znak + na dole by sparować nowe urządzenie. Końcówka nazwy jest częścią MAC adresu BT urządzenia. Jeśli masz więcej niż jedno urządzenie Meshtastic w zasięgu BT smartfona możesz się upewnić które urządzenie jest które klikając kilkakrotnie przycisk P na obudowie. Zmienia on ekran wyświetlany na OLED. Na jednym z nich znajdziesz znaczek [i] i 4 cyfry/litery. To właśnie ten kawałek nazwy (na tych przykładach poniżej jeden będzie miał d4c8 a drugi b1ac). Sparuj urządzenie z telefonem, spyta się o PIN, zobaczysz go na ekranie OLED.

Po udanym sparowaniu nazwij swój węzeł (tutaj to Nettigo HQ) oraz wybierz region pracy (EU_868). Zwróć uwagę, że tutaj możesz włączyć przekazywanie lokalizacji z telefonu do węzła. Ma to sens, jeśli urządzenie będzie mobilne i używane zawsze razem z telefonem.

Przejdź do konfiguracji kanałów (zakładka druga od prawej). Kanał, którego kod QR który widzisz na zdjęciach już nie działa, więc nie łącz się by wysłać Cześć! :)

OK, teraz temat rzeka, szczegółowa konfiguracja. Jako że nadal jestem w miejscu, które bym opisał jako „początkujący”, więc postaram się tylko najważniejsze rzeczy poruszyć. Polecam czytanie dokumentacji Meshtastic, bo możesz doprowadzić do tego, że urządzenia ze sobą nie będą się komunikować.

Po kliknięciu Edit możesz zmienić szczegóły ustawień kanału. Kanał z włączonym uplinkiem/downlinkiem będzie przekazywał do internetu (uplink) jak i z internetu (downlink) wiadomości na danym kanale (wymaga wspólnej konfiguracji MQTT w urządzeniach z uplink/downlink). Jak się domyślasz – korzystanie z uplinków/downlinków może łączyć kawałki sieci mesh przez interenet nawet na duże dystanse. Oczywiście ta część działa tylko jeśli węzeł ma dostęp do internetu (jest WiFi albo telefon robi jako pośrednik do MQTT – ale tym razem tym tematem nie będziemy się zajmować).

Kolejny ważny szczegół – to wysyłanie pozycji razem z komunikatem. Zwróć uwagę, że jeżeli pole PSK pozostanie takie jak na przykładzie (AQ==) będzie to kanał z pustym kluczem szyfrującym. Każdy może się do niego dołączyć. Wysyłanie swojej lokalizacji przez taki kanał może prowadzić do problemów z prywatnością – nie zachęcam do włączania lokalizacji na takim kanale.

Kanał możesz zaszyfrować klikając okrągłą strzałkę przy polu PSK – wygeneruje losowy, nowy klucz. Zawsze możesz go skasować i wpisać AQ== by zrobić z niego ponownie kanał otwarty.

Niezależnie od tego czy kanał jest czy nie jest szyfrowany, jeśli włączysz wysyłanie lokalizacji to w kolejnym kroku możesz wybrać stopień dokładności przekazywanej lokalizacji. Może to być tak dokładna lokalizacja jaką ma urządzenie do dokładności rzędu setek metrów lub nawet kilometrów. W ten sposób możesz chronić swoją prywatność i wysyłać tylko przybliżoną lokalizację.

Na urządzeniu możesz mieć skonfigurowane kilka kanałów (bodajże do 8), kanał o numerze 0 ma pewne znaczenie techniczne. Jeśli masz kilka kanałów, dobrze by urządzenia miały jako kanał 0 ten sam kanał skonfigurowany.

Po utworzeniu kanału (lub kilku) kod QR widoczny w tym miejscu będzie niósł informacje o wszystkich kanałach które są włączone („ptaszek” z prawej strony nazwy kanału).

Teraz możesz dodać kolejną parę urządzeń (telefon + Heltec). Sparuj kolejny telefon z drugim Heltec’em, i w zakładce z kanałami, pod kodem QR (na zrzucie ekranu wyżej tego nie widać, trzeba przewinąć) jest przycisk Scan. Naciśnij go by zeskanować kod QR z pierwszego telefonu. W ten sposób konfiguracja kanałów zostanie zduplikowana.

Zmiana konfiguracji kanału (w tym chyba nazwy, nie jestem pewien) wymaga ponownego skanowania kodu QR przez aplikacje które moją wysyłać/odbierać wiadomości.

Jedną z istotniejszych opcji w konfiguracji kanału jest jego szybkość/zasięg. Masz do wyboru od Short Range/Turbo do Long Range/Slow ale sugeruję zostawić domyślny Long Range/Fast i zmienić to gdy będziesz miał więcej doświadczenia i wiedział jakie to ma konsekwencje (może ugryźć wybieranie największego zasięgu w zatłoczonych sieciach np na konferencjach czy jakiś meetupach).

Szczegółową konfigurację samego urządzenia możesz przeprowadzić po kliknięciu w trzy kropki w prawym górnym rogu. Przejrzyj konfiguracyjne opcje, ale sugeruję pozostawienie domyślnych wartości, dopóki nie zdobędziesz więcej doświadczenia. No i zawsze czytaj dokumentację!

Krótkie podsumowanie

By móc wysyłać wiadomości między kilkoma osobami potrzebujesz po jednym Heltecu dla każdego użytkownika.

Po wgraniu firmware, sparuj telefon dla każdej osoby z urządzeniem Helec. Na pierwszej parze skonfiguruj kanał/kanały które planujecie używać. Na kolejnych parach telefon/Heltec kopiuj konfigurację przez skanowanie kodu QR.

Minimum to dwa zestawy – będą się ze sobą komunikować o ile są w zasięgu, nawet jeśli jesteście pierwszymi użytkownikami Meshtastica w swojej okolicy.

No pokaż te wiadomości!

OK, to po kolei. W konfiguracji urządzenia (trzy kropki/Radio config) jest jedna sekcja, o której nie wspomniałem wcześniej – User config. Wypełniasz tam pełną i skróconą nazwę twojego węzła. Będą się one wyświetlać innym odbiorcom.

Na drugim zrzucie – tak wygląda konwersacja, nic nowego, jak każdy czat… Gdy klikniesz w etykietę ze skróconą nazwą użytkownika przeniesie cię do listy węzłów, które twoje urządzenie słyszało – dostaniesz parę informacji o węźle. Te informacje są związane z ostatnio słyszanym pakietem od tego urządzenia, nie związane z tą konkretną wiadomością.

No dobra, ale jak z zasięgiem?

Ostatnimi dniami testuję zasięg w Meshtasticu. Używam dwóch Helteców ze standardowymi antenami w plastikowych obudowach. Pierwszego Helteca powiesiłem na klamce okna nad moim biurkiem. Z drugim chodze na spacery albo jeżdżę samochodem. Urządzenie odbiorcze trzymam w kieszenie kurtki albo leży na siedzeniu pasażera/desce rozdzielczej.

Czerwona kropka pokazuje miejsce gdzie wisi nadajnik

Pierwsze testy pokazują, że nawet z tak prostym, niewyżyłowanym układzie zasięg wynosił 700-800 metrów. Naprawdę nieźle. Mogę powiedzieć wam, że mam już więcej danych z kolejnych dni i jest nawet lepiej. Ale o szczegółach to już w następnym wpisie.