(dead bts? this is fomo cure) by jackis

alt

Metro 2033 scenario

Artem dawno nie był na powierzchni. Wiele się zmieniło od ostatniego razu, gdy czuł w płucach filtrowane, mroźne powietrze. Rozejrzał się dookoła, szukając czegokolwiek, co przykułoby jego uwagę. Było pusto. Młynarz nie będzie zadowolony z kolejnego pustego raportu zwiadowcy.

Daleko na horyzoncie wyłonił się szkielet, z tej odległości przypominający tanią karykaturę wieży Eiffla. Jednak na jego szczycie coś błyszczało - solarny przekaźnik wiadomości - Nowy.

Artem rozłożył małą teczkę obłożoną zużytymi panelami fotowoltaicznymi. W środku powitały go niebieskie literki ekranu OLED. Próbując nawiązać łączność z zaprzyjaźnioną stacją metra, mimowolnie pomyślał o potworach wyczulonych na najmniejszy dźwięk; o starych radiach, których szum przyciągał śmierć.

Ekran zamrugał. A potem ożył. NODE: WIEŻA_01 (SNR: 7dB) - Direct NODE: POLIS_BRAMA (SNR: -5dB) - 1 hops NODE: HANZA_HQ (SNR: -12dB) - 2 hops

Na ekran wylała się lawina zakolejkowanych wiadomości. Dane telemetryczne, raporty o ruchach mutantów, prośba o filtry z Czerwonej Linii.

Raport: Powierzchnia czysta. Znalazłem nowy węzeł. Sieć działa.

Hej!

Po krótkim post-apo wstępie zacznę od tego, że nie chcę romantyzować końca świata, chcę zarazić czytelnika radością z budowania alternatywnej komunikacji, Dreszczyku emocji, gdy widzisz, że twoja pierwsza wiadomość leci w eter bez pośrednictwa jakiegokolwiek operatora.

Terminy, w artykule: “płytka”, “urządzenie”, “węzeł” dotyczą płytki z mikrokontrolerem z wbudowanym modułem LoRa.

Meshtastic na początku brzmi jak zajęcie dla preppersów. To połączenie krótkofalarstwa z internetem rzeczy. Okazuje się że te światy nie są od siebie tak odległe. Każda osoba, z którą rozmawiałem o tym projekcie dowiaduje się czegoś nowego (razem ze mną).

Jest to projekt open-source umożliwiający budowę off-gridowej, szyfrowanej sieci mesh na tanich ogólnodostępnych urządzeniach. Zagłębienie się w tym temacie zaowocuje lepszym zrozumieniem działania sieci, transmisji bezprzewodowej, a może także programowania.

Jak to właściwie działa?

W największym skrócie:

  1. Masz telefon (z aplikacją Meshtastic).
  2. Łączysz go przez Bluetooth z małą płytką (np. Heltec, RAK).
  3. Ta płytka to Twój modem LoRa (Long Range).
  4. Wysyłasz wiadomość. Płytka wysyła ją w eter.
  5. Inne płytki (nazywane węzłami) w okolicy ją odbierają i przekazują dalej.

alt

W ten sposób budowana jest sieć utrzymywana przez społeczność. Niektóre urządzenia to węzły klienckie (te, które nosimy przy sobie). Inne to routery - umieszczone w strategicznych miejscach, stacjonarnie (np. na dachach), żeby zapewniać jak najlepsze pokrycie sieci.

Po co i jak tego używać?

To nie jest zamiennik internetu - ma ograniczoną przepustowość, jednak spełnia zadanie jako odporny system ratunkowy i platforma do zadań krytycznych w warunkach gdy brakuje tradycyjnej infrastruktury.

Niezależność w Sytuacjach Kryzysowych

Sieć Meshtastic służy jako zapasowy system komunikacji w przypadku awarii zasilania (blackout) lub katastrof naturalnych, gdy sieci komórkowe (GSM) zawodzą lub są przeciążone. Ponieważ węzły mogą być zasilane solarnie, zachowują operacyjność znacznie dłużej niż 72 godziny. Sieć żyje w każdym większym mieście i jest utrzymywana przez społeczność, której celem jest zapewnienie komunikacji w obrębie miasta.

alt alt

Pakiet startowy

Zawsze kupuj płytkę wspieraną przez projekt i wymienioną w oficjalnej dokumentacji. Ułatwi to instalację stabilnego oprogramowania i ominięcie konieczności samodzielnej kompilacji.

Sprzęt

  • Heltec V3 lub Wireless Stick Lite V3 - najpopularniejsze i dobrze wspierane, niestety prądożerne. Wifi pozwala na łatwą integrację z innymi urządzeniami, np. skrypt bota napisany w Pythonie. Pewny wybór do testów.
  • Płytki nRF52 (np. RAK, Seeed SenseCAP T114) - idealne dla długiej pracy na baterii. Są droższe i nie mają wifi, stosowane do urządzeń solarnych, w terenie.

Oprogramowanie

Sprawdź w Menedżerze Urządzeń, czy po podłączeniu płytki pojawia się “Nieznane urządzenie” lub port COM. Jeśli płytka nie jest widoczna, zainstaluj odpowiedni sterownik dla:

Po instalacji w Menedżerze Urządzeń poszukaj sekcji “Porty (COM i LPT)”. Powinieneś tam widzieć np. Silicon Labs CP210x USB to UART Bridge (COM3).

alt

Skorzystaj z web flasher.

Konfiguracja

  1. Przed uruchomieniem podłącz antenę, w innym wypadku ryzykujesz uszkodzeniem transmitera.
  2. Połącz się z urządzeniem po bluetooth. Jeśli twoja płytka ma ekran OLED, to zobaczysz na nim PIN potrzebny do parowania urządzeń. Jeśli jednak płytka nie ma ekranu, możesz odczytać PIN w monitorze portu szeregowego (serial monitor).
  3. Ustaw właściwą rolę:
    1. Urządzenie mobilne lub w pomieszczeniu Ustaw rolę CLIENT_MUTE. Takie urządzenie odbiera i wysyła, ale nie retransmituje dalej. Retransmisja ze słabej lokalizacji (np. w mieszkaniu) tylko pogarsza jakość sieci.
    2. Węzeł stacjonarny z anteną na zewnątrz? Ustaw rolę CLIENT
    3. Unikaj Router/Repeater: Tych ról używaj tylko, jeśli montujesz węzeł bardzo wysoko (np. na maszcie), masz świetny zasięg i wiesz, co robisz, ponieważ źle umiejscowiony Router może zaszkodzić sieci.
  4. Włącz Szyfrowanie: Komunikacja odbywa się w wirtualnych kanałach. Domyślny kanał publiczny (często “LongFast”) jest szyfrowany łatwo dostępnym kluczem (AQ==), więc w praktyce nie zapewnia poufności. Aby zapewnić prywatność, musisz utworzyć nowy kanał prywatny i zmienić klucz szyfrujący.

alt

Szyfrowanie wiadomości

Pakiet Meshtastic ma:

  • Nagłówek (niezaszyfrowany) - zawiera informacje o routowaniu, NodeID nadawcy, etc.
  • Payload (zaszyfrowany) - zależy od kanału i PSK

Wiadomości na kanale

Są szyfrowane symetrycznie AES-CTR. Obce węzły (które nie znają PSK) będą retransmitować Twoje pakiety nawet jeśli nie potrafią ich odszyfrować.​

W Meshtastic hash kanału jest obliczany zarówno z nazwy kanału i PSK. źródło uint8_t h = xorHash((const uint8_t *)name, strlen(name));

Uwaga! Jeśli zmienisz tylko nazwę kanału (zachowując PSK), węzły nie będą się komunikować - bo generują inny hash kanału.

DM

Są szyfrowane asymetrycznie algorytmem X25519 + klucz publiczny. W wersji 2.5+ Meshtastic każde urządzenie generuje losowy klucz prywatny i klucz publiczny (X25519)

  • Gdy wysyłasz DM do konkretnego węzła, szyfruje się go kluczem publicznym odbiorcy. źródło
  • Tylko odbiornik z kluczem prywatnym może odszyfrować wiadomość.

alt

Kompilacja Firmware

Zaczynałem przygodę w lutym 2024 z płytką Heltec v2, minęło już sporo czasu, a projekt rozwija się tak dynamicznie, że wsparcie dla starszych układów wygasa, lub gotowe pliki instalacyjne (.bin) przestają być publikowane.

Kompilowanie nie jest takie trudne, jak mogłoby się wydawać.

Pomocne komendy Linux

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# Build meshtastic firmware (2.5.16.c3d60342) for Heltec LoRAa 32 v2
# Using esptool.py v4.5.1 and Ubuntu 24

mkdir -p /tmp/pio # Tworzy katalog tymczasowy na projekt.
cd /tmp/pio # Wchodzi do tego katalogu.
virtualenv . # Tworzy wirtualne środowisko Pythona (izolacja bibliotek).
source bin/activate # Aktywuje środowisko wirtualne Python

pip install esptool
pip install -U platformio # Instaluje narzędzie PlatformIO

git clone https://github.com/meshtastic/firmware.git --recurse-submodules 
# Pobiera kod źródłowy Meshtastic z GitHuba wraz z podmodułami (bibliotekami zależnymi).
cd firmware # Wchodzi do folderu z pobranym kodem.
pio run -e heltec-v2_0 # Uruchamia kompilację dla środowiska 'heltec-v2_0'.

# --- Instrukcja wgrania skompilowanego pliku (Linux) ---

$ cd .pio/build/heltec-v2_0
# Wejście do folderu z gotowym plikiem.

$ esptool.py --port /dev/ttyUSB0 --chip esp32 --baud 460800 write_flash 0x0 firmware.factory.bin 
# Wgranie pliku na urządzenie (Linuxowa ścieżka /dev/ttyUSB0).

# --- Opcja alternatywna: edycja pliku konfiguracyjnego ---

# edytuj plik
vim /variants/heltec_v2/platformio.ini

# Dodaj do pliku konfiguracyjnego platformio.ini

monitor_speed = 115200
upload_protocol = esptool
upload_speed = 460800
# zapisz zmiany

# Uruchomienie kompilacji z natychmiastowym wgraniem (--target upload)
$ pio run -e heltec-v2_0 --upload-port /dev/ttyUSB0 --monitor-port /dev/ttyUSB0 --target upload

Pomocne komendy na Windows

Korzystam z gotowych skryptów udostępnionych w repozytorium (device-update.bat) meshtastic.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Wylistowanie aktywnych portów szeregowych
Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description

# Aktualizacja: .\device-update.bat -p [PORT] -f [PLIK_FIRMWARE]
.\device-update.bat -p COM3 -f .\firmware-heltec-v3-2.4.2.5b45303-update.bin

# Czysta instalacja: .\device-install.bat -p [PORT] -f [PLIK_FIRMWARE]
.\device-install.bat -p COM3 -f .\firmware-heltec-v3-2.4.2.5b45303.bin

# Jeśli występują problemy korzystam z esptool.exe
esptool --port COM4 --chip esp32-s3 --baud 460800 write_flash 0x0 .\.pio\build\heltec-v3\firmware.factory.bin

# Wymaga zainstalowanego PlatformIO Core, odczytuje serial monitor
pio device monitor -b 115200

Bibliografia i baza linków Meshtastic

Na początek

Oficjalna Dokumentacja i Narzędzia Projektu

  • Meshtastic.org – Oficjalne źródło dokumentacji, plików firmware oraz głównych informacji o projekcie.
  • GitHub Meshtastic – Główne repozytorium kodu, miejsce zgłaszania błędów i śledzenia rozwoju projektu.

Społeczności i Fora Lokalne (Polska i Świat)

Mapy, Statystyki i Wizualizacja Sieci

Hardware, Projekty DIY i Modyfikacje

Wiedza Techniczna, Firmware i Integracje

alt

Zrozumieć dBm

Wartości RRSI (sygnał)

czyli moc sygnału w dBm

Moc z jaką urządzenie nadaje naszą wiadomość.

Sygnał -30dBm? Jak moc może być ujemna? Nie przykładałem do tego wagi, aż do momentu gdy znajomy wyjaśnił o co tak naprawdę chodzi. Zacznijmy od tego, że dBm to skala logarytmiczna, odnosząca się do 1 miliwata (mW). Moc nadawania urządzenia wygląda następująco:

dBm mW
+6 4
+3 2
0 1
-3 0.5
-6 0.25
-90 0.000000001

SNR (szum)

Jak usłyszeć szept w panującym dookoła hałasie?

SNR (signal to noise ratio) to stosunek sygnału od szumu.

  • SNR 0 dB: Siła sygnału (szeptu) jest taka sama jak siła szumu tła (gwaru w pokoju).
  • SNR 10 dB: Sygnał jest 10 razy silniejszy od szumu. Czysty odbiór.

Tu pojawia się ujemny SNR - jakim cudem odbieram transmisję z -12 dB. To znaczy, że sygnał był wielokrotnie słabszy (ok. 16x) niż otaczający go szum.

To jest właśnie sedno modulacji LoRa. Sygnał jest rozłożony w czasie i paśmie w tak unikalny sposób, że odbiornik, który zna ten wzór, potrafi go “wyciągnąć” spod poziomu szumu. To jak usłyszeć kogoś szepczącego konkretną melodię po drugiej stronie głośnego stadionu - ignorujesz cały gwar i skupiasz się tylko na tej melodii.

Połączenie Kropek (Czułość, Prędkość i Kompromisy)

Teraz łączysz obie te wartości (RSSI i SNR) z realiami sprzętu, używając drugiego fragmentu

Czułość Odbiornika" (Sensitivity): To jest najcichszy szept (najniższe RSSI), jaki odbiornik jest w ogóle w stanie próbować usłyszeć. Maksymalna czułość LoRa to aż -149 dBm. źródło Jeśli jednak chcesz korzystać z takiej czułości Musisz zwolnić transmisję do 0.02 kbit/s, ale taka prędkość nadaje się do wysłania czujnika temperatury raz na godzinę, nie do rozmowy.

Zrozumienie RSSI, SNR i Czułości pokazuje, że nie ma “najlepszych” ustawień. Jest tylko fizyka i kompromisy. Wybierasz między zasięgiem, prędkością a zużyciem baterii.