ZephCore to firmware dla węzłów sieci MeshCore, czyli program zapisany w radiu, który steruje odbiorem, nadawaniem, ekranem i połączeniem z telefonem. Węzeł z ZephCore pracuje w tej samej sieci, łączy się z tymi samymi aplikacjami MeshCore i przyjmuje te same polecenia konsoli co oryginalny firmware. Inna jest podstawa: zamiast środowiska Arduino projekt korzysta z Zephyr RTOS, otwartego systemu operacyjnego czasu rzeczywistego dla mikrokontrolerów. Dla sąsiadów w sieci i dla telefonu taki węzeł niczym się nie wyróżnia, więc nie trzeba wymieniać oprogramowania u wszystkich uczestników sieci.

To projekt społecznościowy na licencji MIT, rozwijany niezależnie od oficjalnego MeshCore. Około 99% kodu napisała sztuczna inteligencja (Claude i Cursor), a człowiek decyduje, co powstaje, i sprawdza wyniki na prawdziwych radiach. Przed wydaniem zmiany są testowane głównie na płytkach z nRF52; płytki z ESP32 sprawdza w dużej mierze społeczność.

Węzeł działa w jednej roli, wybieranej przy wgrywaniu firmware’u. Companion to osobiste radio połączone z telefonem: w aplikacji piszesz i czytasz wiadomości, a węzeł wysyła je drogą radiową LoRa. Repeater przekazuje cudze pakiety dalej, żeby docierały na większą odległość. Do wyboru są też room server, który przechowuje wiadomości dla nieobecnych, obserwator i od wersji 1.18.0 modem KISS.

Co ZephCore dodaje do MeshCore

Repeater z ZephCore mierzy, jak zatłoczona jest okolica, i do tego dopasowuje odstępy między ponownym nadawaniem pakietów, zamiast korzystać ze stałych wartości txdelay. Na zgodnych układach radiowych odbiornik może drzemać między sprawdzeniami, czy nie zaczyna się pakiet, co zmniejsza pobór prądu przy odbiorze. Na płytkach z ESP32 dostępna jest rola obserwatora: węzeł tylko nasłuchuje i przez Wi-Fi wysyła wszystko, co usłyszy, do serwera MQTT (MQTT to protokół wymiany danych między programami i urządzeniami). Może więc zasilać danymi analizatory ruchu w sieci. Repeater na ESP32 może też raportować ruch do MQTT i jednocześnie dalej przekazywać pakiety.

Wszystkie te funkcje działają w samym węźle i nie zmieniają protokołu radiowego, więc w jednej sieci mogą pracować węzły z ZephCore i z oryginalnym MeshCore. Były dostępne już wcześniej; nowości wersji 1.18.0 opisujemy niżej.

ZephCore jest propozycją dla osób, które potrzebują takich funkcji albo chcą wypróbować inne oprogramowanie w swoim węźle. Nie jest obowiązkową aktualizacją MeshCore. Obsługuje ponad 40 płytek, m.in. RAK4631, SenseCAP T1000-E, Wio Tracker L1 oraz Heltec T114, V3 i V4, a do tego działa jako zwykły program na Raspberry Pi z podłączonym modułem radiowym SX1262. Przed instalacją sprawdź dokładny wariant swojej płytki na liście obsługiwanych urządzeń.

Wydanie 1.18.0-zephcore z 16 października 2026 roku poprawia przede wszystkim tryb Offgrid, obsługę GPS i ekran companionów z Wi-Fi. Przenosi też zmiany z oficjalnego MeshCore 1.18.0.

Tryb Offgrid nie nadaje już w zwykłej sieci

Tryb Offgrid pozwala companionowi przekazywać pakiety innych radiów, gdy w zasięgu nie ma żadnego repeatera. Każde radio w grupie przekazuje wiadomości pozostałym, więc docierają dalej niż na jeden skok. W oficjalnym MeshCore ta funkcja nazywa się client repeat, a węzły z obu firmware’ów współpracują ze sobą w tym trybie. Opisaliśmy ją w artykule „MeshCore poza publiczną siecią: klienci w roli przekaźników”.

Firmware pozwala przekazywać pakiety w tym trybie tylko na trzech zarezerwowanych częstotliwościach: 433,000 MHz, 869,495 MHz (pasmo 868 MHz w Europie) i 918,000 MHz. Companion w trybie Offgrid przekazuje bowiem wszystko, co usłyszy, bez limitu skoków, filtrów regionów i wykrywania pętli, które stosuje repeater. W grupie kilku radiów to nie przeszkadza, ale w ruchliwej sieci szkodzi. Tymczasem do wersji 1.17.7 przełącznik Offgrid na ekranie włączał przekazywanie bez zmiany częstotliwości, więc węzeł powtarzał cały ruch zwykłej sieci.

W wersji 1.18.0 włączenie trybu Offgrid z ekranu przenosi węzeł na najbliższą częstotliwość Offgrid, a wyłączenie przywraca poprzednią. Szerokość pasma, współczynnik rozpraszania (SF), współczynnik kodowania (CR) i moc nadawania zostają bez zmian, więc grupa, która przełącza się z tego samego presetu, ma zgodne ustawienia. To samo robią polecenia set repeat on i set repeat off w konsoli companiona (przez USB albo z wiersza poleceń w aplikacji, nie przez sieć), a get repeat pokazuje stan. Ekran pokazuje też zmiany wprowadzone z aplikacji. W aplikacji częstotliwość ustawia się osobno, więc po wyłączeniu przekazywania trzeba ponownie wybrać zwykły preset. Przy presecie 2,4 GHz trybu Offgrid nie da się włączyć.

Węzeł, który po wcześniejszym włączeniu przełącznika przekazywał pakiety na zwykłej częstotliwości, po aktualizacji przestaje to robić i pokazuje tryb Offgrid jako wyłączony. Kto go potrzebuje, musi włączyć go ponownie.

W Polsce dla trybu Offgrid właściwa jest częstotliwość 869,495 MHz. Leży w podpaśmie 869,4–869,65 MHz, w którym wolno nadawać z mocą do 500 mW e.r.p. (moc razem z zyskiem anteny) przez najwyżej 10% czasu. 433,000 MHz leży tuż poza pasmem 433,05–434,79 MHz, w którym można nadawać bez pozwolenia, a 918,000 MHz to częstotliwość dla regionu US 915 MHz. Z żadnej z nich w Polsce nie korzystaj.

Poprawki GPS: zegar i wykrywanie modułu

Tuż po wybudzeniu odbiornik GPS może podać ostatnią zapamiętaną pozycję i własny, czasem nieaktualny zegar, zanim potwierdzi je jakikolwiek satelita. Firmware traktował to jako ustaloną pozycję i mógł cofnąć zegar repeatera o kilka godzin. Teraz liczą się tylko pozycje wyliczone z sygnałów satelitów, pięć z rzędu, więc ustalenie pozycji trwa około dwóch sekund dłużej. Poprawka dotyczy wszystkich płytek z GPS.

Na płytkach z opcjonalnym złączem GPS (m.in. Heltec V3, V4 i V4.3, RAK4631, XIAO nRF54L15) węzeł sprawdza obecność modułu przy jego pierwszym włączeniu po restarcie. Jeśli moduł nie odpowie w ciągu 10 sekund, zostaje uznany za nieobecny do kolejnego uruchomienia węzła: polecenie gps odpowiada wtedy Can't find GPS, a odczyt telemetrii już go nie budzi. Wcześniej repeater szukał nieistniejącego modułu przez pięć minut po starcie i ponownie przy każdym odczycie telemetrii. Na ESP32 nie pozwalało to procesorowi przejść w tryb lekkiego uśpienia. Ustawienie GPS zostaje zachowane, więc moduł dołożony później węzeł znajdzie przy następnym uruchomieniu.

Ekran: strona Wi-Fi i przyciski

Companiony z Wi-Fi i wyświetlaczem obsługiwanym jednym przyciskiem dostały nową stronę Wi-Fi, obok strony Bluetooth. Widać na niej, czy Wi-Fi jest wyłączone, łączy się czy działa, a po połączeniu nazwę sieci, adres IP i port do wpisania w aplikacji. Dotyczy to m.in. Heltec V3, V4, V4.3, Heltec Wireless Tracker, LilyGO T3S3 i Station G2. W ThinkNode M9 te same dane są w menu System > Info > WiFi.

Strona główna podaje teraz, jak połączona jest aplikacja: „WiFi OK”, „USB OK” albo „BLE OK”, a wcześniej zawsze pokazywała „BLE OK”. Gdy Bluetooth jest wyłączony i żadna aplikacja nie jest połączona, wyświetla „BLE OFF”. Strona Bluetooth pokazuje „Connected” tylko przy połączeniu przez Bluetooth.

Na Station G2 przycisk działa teraz tak jak na innych płytkach z jednym przyciskiem: jedno naciśnięcie to następna strona, dwa to poprzednia, a przytrzymanie przez sekundę uruchamia wybraną pozycję. Na Heltec Mesh Node T1 i obu zestawach LR2021 LoRa Plus EVK znów da się potwierdzić wyłączenie, przejście w tryb DFU (wgrywania firmware’u) i włączenie trybu Offgrid. Na wszystkich czterech płytkach potwierdza się drugim przytrzymaniem przycisku w ciągu 3 sekund.

Nowa rola: modem KISS

Węzeł z ZephCore może teraz działać jako zwykły modem LoRa dla programu na komputerze, tak jak kiss_modem w oficjalnym MeshCore. KISS to prosty protokół znany z krótkofalarskich modemów pakietowych (TNC). Program przez USB wysyła i odbiera surowe pakiety, ustawia parametry radia i korzysta z klucza węzła do podpisywania, weryfikacji, szyfrowania i odszyfrowywania. Sam węzeł nie obsługuje w tej roli sieci mesh, Bluetooth ani konsoli. Do czego przydaje się taki modem, opisaliśmy w artykule „KISS Modem: MeshCore jako radio dla komputerów i starych maszyn”.

ZephCore używa tego samego protokołu co oficjalny modem, więc programy napisane dla niego działają też z ZephCore. Gdy kanał jest zajęty, pakiet czeka na jego zwolnienie, zamiast od razu kończyć się błędem. Ustawienia radia spoza zakresu obsługiwanego przez ZephCore modem odrzuca. Zamiast USB może korzystać z wybranego portu UART, np. pinów połączonych z Raspberry Pi; USB zostaje wtedy wolne do aktualizacji.

Gotowego pliku do wgrania jeszcze nie ma: firmware trzeba skompilować samodzielnie z fragmentem konfiguracji boards/common/kiss_modem.conf. Modem zachowuje tożsamość repeatera, room servera albo obserwatora wgranego wcześniej na ten sam węzeł. Wgrany w miejsce companiona usuwa jego dane.

Zmiany z MeshCore 1.18.0

ZephCore 1.18.0 przenosi też zmiany z oficjalnego MeshCore 1.18.0, które porównujemy w artykule „MeshCore 1.18 kontra 1.17.1”. Potwierdzenia odbioru na trasach bezpośrednich są przekazywane po krótkim losowym opóźnieniu, tak jak inne pakiety bezpośrednie, a przy ustawieniu multi.acks 1 dwie kopie wychodzą w odstępie 300 ms. Dzięki temu mniej potwierdzeń ginie po drodze. Pakiety rozsyłane do całej sieci (flood) z kodem transportu 0 są traktowane jak pakiety bez przypisanego regionu. W odróżnieniu od oficjalnego firmware’u ZephCore stosuje do nich ustawienia flood.max.unscoped i region denyf *. W room serverze polecenie set repeat on zwraca teraz błąd ERR - repeat now deprecated; room server i tak domyślnie nie przekazywał pakietów.

Aktualizacja i instalacja

Zwykła aktualizacja ZephCore zachowuje tożsamość węzła, ustawienia, kontakty i parowanie z telefonem. Przejście z oryginalnego MeshCore albo powrót do niego wymaga jednak ponownej konfiguracji, bo ustawienia nie przechodzą między tymi firmware’ami w żadną stronę. Na płytkach z nRF52 bootloader zostaje ten sam, więc nie trzeba wgrywać nic dodatkowego.

Najprościej wgrać ZephCore przez flasher w przeglądarce Chrome albo Edge: wybierasz płytkę i rolę, podłączasz radio kablem USB i wgrywasz. Te same pliki ma Mesh America Device Configurator, a ze strony wydania można je pobrać ręcznie: .uf2 dla płytek z nRF52 i -merged.bin dla ESP32. Przed instalacją zapisz ustawienia, których będziesz potrzebować. Po wgraniu companion łączy się z aplikacją MeshCore jak zwykle, a domyślny PIN Bluetooth to 123456.

Artykuł powstał na podstawie noty wydania ZephCore 1.18.0-zephcore oraz dokumentacji projektu na GitHubie: README, opisu trybu Offgrid i protokołu modemu KISS. Tej wersji nie sprawdzaliśmy na własnym radiu.