Po co powsta艂 ten projekt?
Je艣li dzia艂asz w cyfrowym radiu DMR i chcesz mie膰 sta艂y podgl膮d aktywno艣ci na wybranym kanale (TalkGroup) bez potrzeby odpalania komputera, ten projekt jest dla Ciebie.
Zbudowa艂em przeno艣ny monitor DMR oparty o ESP32, kt贸ry 艂膮czy si臋 przez WiFi z sieci膮 BrandMeister, wy艣wietla na kolorowym ekranie TFT 4″ aktualnie nadaj膮cego operatora, histori臋 ostatnich transmisji, czas trwania nadawania i zapisuje logi na kart臋 SD. Wszystko w jednym, kompaktowym urz膮dzeniu.
Co dok艂adnie robi ten program?
Program dzia艂a w p臋tli, nas艂uchuj膮c na WebSocketach danych z BrandMeister i reaguj膮c na pojawiaj膮cy si臋 ruch w TalkGroup 260. Oto jego g艂贸wne funkcjonalno艣ci:
馃摗 艁膮czno艣膰 z BrandMeister przez WebSocket
Nawi膮zuje bezpieczne po艂膮czenie (SSL) z API BrandMeister.
Subskrybuje wszystkie zdarzenia (
join everything).Automatycznie wznawia po艂膮czenie w razie przerwania.
馃懁 Wy艣wietlanie aktywnego operatora
Pokazuje znak wywo艂awczy (np.
SP5XYZ).Wy艣wietla imi臋 operatora lub alias TalkerAlias.
Podaje ID operatora oraz numer TalkGroup.
Mierzy i wy艣wietla czas trwania bie偶膮cej transmisji (format MM:SS).
馃摐 Historia ostatnich operator贸w
Przechowuje w pami臋ci ostatnich 4 operator贸w (maksymalnie).
Wy艣wietla ich znak, nazw臋, TG oraz godzin臋 transmisji.
Unika duplikowania tego samego operatora z rz臋du – je艣li ten sam wraca, aktualizuje tylko znacznik czasu.
馃捑 Logowanie do pliku CSV na karcie SD
Ka偶da zako艅czona transmisja jest zapisywana w pliku
/dmr_log.csvna karcie SD.Log zawiera: dat臋 i godzin臋 rozpocz臋cia, dat臋 i godzin臋 zako艅czenia, znak, nazw臋, ID, TG oraz czas trwania w sekundach.
Automatycznie tworzy nag艂贸wek pliku, je艣li nie istnieje.
Zapisane dane mo偶emy odczyta膰 w programie kt贸ry czyta pliki *.csv.
Przyk艂adowe dane zapisane na karcie SD:
馃帹 Przyjazny interfejs u偶ytkownika
Wy艣wietlacz TFT 4″ (480×320 px) z p艂ynn膮 obs艂ug膮 graficzn膮.
Ikona radia zmienia kolor w zale偶no艣ci od stanu RX.
Wizualizacja trwania transmisji za pomoc膮 animowanego paska (fale radiowe).
Zegar NTP (synchronizacja czasu z Internetu) w prawym g贸rnym rogu.
Status po艂膮czenia z BrandMeister – zielone/czerwone k贸艂ko.
馃敡 Konfiguracja z karty SD
Dane WiFi (SSID i has艂o) s膮 odczytywane z pliku
config.txtna karcie SD – nie musisz ich hardkodowa膰 w programie. W ten spos贸b nie musisz ingerowa膰 w program by zalogowa膰 si臋 do swojej sieci WiFi. Wystarczy zmieni膰 dane na karcie SD.Format pliku:
SSID=moja_siec PASS=moje_haslodane te zapisujemy na karcie SD w pliku o nazwie config.txt
Co znajduje si臋 w 艣rodku? – zagl膮damy do kodu
Kod ma oko艂o 1800 linii i jest podzielony na logiczne sekcje. Oto najwa偶niejsze fragmenty:
馃敼 Komunikacja z BrandMeister
Sercem programu jest obs艂uga WebSocket. Funkcja webSocketEvent()
odbiera dane JSON, kt贸re przychodz膮 w dw贸ch zagnie偶d偶onych warstwach –
najpierw wyci膮ga w艂a艣ciwy payload, potem deserializuje go i sprawdza,
czy DestinationID pasuje do monitorowanego TG (260). Je艣li tak – wywo艂uje nowaAktywnosc().
馃敼 Logika ko艅ca transmisji
Funkcja sprawdzKoniecRX()
sprawdza, czy od ostatniego odebranego pakietu min臋艂o wi臋cej ni偶 2500
ms. Je艣li tak – uznaje transmisj臋 za zako艅czon膮, zapisuje log na SD i
prze艂膮cza ekran w stan czuwania.
馃敼 Efektowny interfejs
U偶y艂em bibliotek Adafruit GFX i ST7796S do obs艂ugi wy艣wietlacza. Funkcja rysujIkoneRadia() rysuje ikon臋, kt贸ra 艣wieci na zielono podczas odbioru, a na ciemnoszaro w stanie czuwania. Animacja RX (animacjaRX()) to paski imituj膮ce fale radiowe – od艣wie偶ane co 150 ms.
馃敼 Historia i logika deduplikacji
dodajDoHistorii()
przesuwa starsze wpisy w d贸艂 i wstawia nowego operatora na pierwsz膮
pozycj臋. Co wa偶ne – je艣li ten sam operator pojawia si臋 ponownie, nie
jest dodawany drugi raz, a jedynie aktualizowany jest jego znacznik
czasu.
Jak uruchomi膰 ten projekt na swoim ESP32?
Potrzebne elementy
ESP32 (np. Wemos D1 R32, NodeMCU-32S) Ja zrobi艂em to na ESP32 WROOM-32U.
Wy艣wietlacz TFT z kontrolerem ST7796S (lub kompatybilny, 4″ 480×320 px SPI)
Karta microSD (do zapisu log贸w i konfiguracji)
Kabel USB, zasilanie 5V
Nie zamieszczam schematu bo na podstawie definicji pin贸w mo偶na to zrobi膰 bez problemu.
Konfiguracja
Sformatuj kart臋 SD jako FAT32.
W katalogu g艂贸wnym karty utw贸rz plik
config.txto zawarto艣ci:SSID=TwojaNazwaWiFi PASS=TwojeHasloWiFiZainstaluj wymagane biblioteki w Arduino IDE lub PlatformIO:
WiFi.hWebSocketsClient.hArduinoJson.h(wersja 6.x)Adafruit_GFX.hAdafruit_ST7796S_kbv.hSD.htime.h
Sprawd藕 piny w sekcji
KONFIGURACJA SPRZETOWA– dopasuj do swojej p艂ytki.Skompiluj i wgraj na ESP32.
Niekt贸re piny s膮 zdublowane dla wy艣wietlacza i karty SD. To nie jest b艂膮d. TAK MA BY膯!
Dla kogo jest ten projekt?
Kr贸tkofalowc贸w i pasjonat贸w 艂膮czno艣ci cyfrowej DMR.
Tw贸rc贸w projekt贸w IoT szukaj膮cych ciekawego zastosowania dla ESP32.
Programist贸w embedded, kt贸rzy chc膮 zobaczy膰, jak integrowa膰 WebSocket, JSON i wy艣wietlacz w jednym urz膮dzeniu.
Podsumowanie
Projekt pokazuje, jak z pozornie prostego mikrokontrolera mo偶na zbudowa膰 zaawansowane urz膮dzenie monitoruj膮ce z graficznym interfejsem, zapisem danych i komunikacj膮 przez Internet. Kod jest napisany przejrzy艣cie, z podzia艂em na funkcje, co u艂atwia modyfikacje – na przyk艂ad mo偶na zmieni膰 monitorowany TalkGroup, doda膰 wi臋cej historii lub zintegrowa膰 z w艂asnym API.
Ca艂y kod (ok. 1800 linii) w formacie *.bin mo偶esz otrzyma膰 bezp艂atnie po kontakcie przez e-mail
- Je偶eli do mnie napiszesz mo偶esz dosta膰 program z usuni臋tym moim znakiem (wpisz臋 Tw贸j znak).
✍️ Autor: Robert HF5WWL
馃搮 Data projektu: Lipiec 2026 r.
馃搷 Lokalizacja: Wo艂omin, POLSKA
馃搧 Co艣 nie jasne? Pytaj poprzez e-mail (hf5wwl@gmail.com) lub w komentarzu
馃洜️ Poziom trudno艣ci: 艁atwy (jak si臋 ma oprogramowanie) 馃槉
#HamRadio
#DMRradio
#TalkGroup260
#AmateurRadio
#DigitalRadio
#RadioMonitor
#SP5WWL



















