___________________________________________________________________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________________________________________________________________

16 października 2026

Monitor MMDVM z panelem CYD – konfiguracja WiFi z karty SD i sygnał dźwiękowy dla wybranych znaków.

 

Głośnik 50R/0,5W lub busser (aktywny lub pasywny) przyłączamy do fabrycznego złącza SPEAK.


    Mój monitor HotSpota oparty na panelu ESP32-2432S028R (CYD, 2,8") >> LINK << dostał dwa ulepszenia, o które prosili użytkownicy i których też mi brakowało:

  1. Dane WiFi wpisuje się na karcie SD, a nie w kodzie programu.
  2. Sygnał dźwiękowy informuje, że w eterze pojawił się znak z naszej listy.

Po co te zmiany?

Dotychczas, żeby zmienić sieć WiFi, trzeba było otworzyć szkic w Arduino IDE, znaleźć odpowiednie linie, wpisać SSID i hasło, a potem skompilować i wgrać program. Nie każdy krótkofalowiec lubi to robić, a do tego pojawia się ryzyko, że ktoś przypadkiem „wyśle w świat” własne hasło razem z kodem.

Teraz program wgrywa się raz, a całą konfigurację robi się w zwykłym pliku tekstowym.

Konfiguracja z karty SD

CYD ma fabrycznie zamontowane gniazdo microSD, więc nie trzeba niczego dolutowywać. Wystarczy karta sformatowana w FAT32.

Po włożeniu pustej karty i uruchomieniu urządzenia program sam tworzy na niej dwa pliki:

  • config.txt – ustawienia:
  WIFI_SSID=NazwaTwojejSieci
  WIFI_PASSWORD=TwojeHaslo
  WIFI_ENABLED=1
  PISTAR_HOSTNAME=pi-star
  BUZZER=1
  ALERT_COOLDOWN=30
  • znaki.txt – lista znaków, które mają uruchamiać sygnał dźwiękowy.

Wyjmujemy kartę, uzupełniamy pliki na komputerze (wystarczy Notatnik), wkładamy kartę z powrotem i gotowe. Jeśli zmienimy sieć WiFi, poprawiamy jedną linijkę w pliku, bez Arduino IDE.

Przy starcie na ekranie pojawia się krótki raport: czy karta została wykryta, czy config.txt jest wczytany, ile znaków jest na liście i czy udało się połączyć z WiFi. Przy problemie raport wisi dłużej, żeby dało się go spokojnie przeczytać.

Sygnał dźwiękowy dla wybranych znaków

W pliku znaki.txt wpisujemy po jednym znaku w linii:

# Moi koledzy
SP9ABC
SQ5XYZ
# Wszyscy z prefiksem SP9
SP9*
  • wielkość liter nie ma znaczenia,
  • linie zaczynające się od # to komentarze,
  • gwiazdka na końcu oznacza cały prefiks, np. SP9*.

Gdy MMDVM odbierze stację z listy, urządzenie gra krótką trzydźwiękową melodię, a znak na ekranie wyświetla się na żółto, więc od razu widać, kto jest w eterze.

Kilka szczegółów, które sprawiają, że rozwiązanie jest wygodne na co dzień:

  • Ten sam znak nie zagra częściej niż co 30 sekund (wartość zmienia ALERT_COOLDOWN). Stacje często puszczają i wciskają PTT, a ciągłe piszczenie byłoby uciążliwe.
  • Dźwięk nie blokuje programu. Ekran i odbiór danych z MMDVM działają płynnie w trakcie sygnału.
  • Buzzer można wyłączyć wpisem BUZZER=0.

Podłączenie głośniczka

Pierwotnie myślałem o pinie IO21, ale na CYD obsługuje on podświetlenie ekranu, więc nie może być użyty do dźwięku. Wykorzystałem IO26, czyli wyjście na wbudowane złącze głośniczka (P4) ze wzmacniaczem. Wystarczy wpiąć mały głośniczek 8 Ω, bez żadnych dodatkowych elementów.

Jeśli ktoś woli własny buzzer na innym pinie, zmienia tylko dwie linie w programie: BUZZER_PIN oraz (dla buzzera aktywnego) BUZZER_ACTIVE.

Jak uruchomić?

  1. Pobierz szkic i wgraj go na CYD (folder szkicu musi mieć taką samą nazwę jak plik .ino).
  2. Włóż kartę microSD (FAT32) i uruchom urządzenie. Program utworzy szablony plików.
  3. Wyjmij kartę, uzupełnij config.txt i znaki.txt na komputerze.
  4. Włóż kartę z powrotem. Monitor połączy się z siecią i będzie wypatrywał Twoich znajomych.

Uwagi

  • Wszystkie ustawienia i lista znaków są wczytywane przy starcie, więc po zmianie plików trzeba zrestartować urządzenie.
  • Jeśli karty SD nie ma, monitor nadal pokazuje dane z MMDVM. Wyłączone są tylko WiFi (chyba że dane są wpisane w kodzie) i sygnał dźwiękowy.
  • W wersji do pobrania pola WiFi w kodzie są puste, więc nie ma ryzyka wycieku czyjegoś hasła.


✍️ Autor: Robert HF5WWL
📅 Data projektu: październik 2026 r.
 📍 Lokalizacja: Wołomin, POLSKA
📁 Coś nie jasne? Pytaj poprzez e-mail (hf5wwl@gmail.com) lub w komentarzu 
🛠️ Poziom trudności: Łatwy

📜 Program jest jak zwykle dostępny za darmo /aktualna wersja/. Wystarczy poprosić via e-mail i napisać o który program chodzi (jest sporo różnych wersji).

 

. 




26 września 2026

PANEL 2.8" ESP32-2432S028R AS A MONITOR FOR MMDVM

 

Emulator podczas pracy. Przykładowy korespondent.

Emulator wyświetlacza NEXTION dla MMDVM DUAL — wersja na ESP32-2432S028R (CYD)

 

UWAGA !

Projekt przetestowany z HotSpotem MMDVM HS DUAL w trybie SIMPLEX.

Z innymi modelami MMDVM nie był testowany ale powinien też działać.

MMDVM HS DUAL

 

Skąd ten projekt ?

To kolejna odsłona mojej serii projektów łączących świat DMR/MMDVM z tanimi modułami ESP32 z wyświetlaczem. Tym razem zamiast dedykowanego wyświetlacza Nextion, jako panel dla hotspota MMDVM_HS_Dual_Hat posłużył popularny "żółty moduł" ESP32-2432S028R (CYD) w wersji 3, z dwoma złączami USB (micro-USB i USB-C) oraz 2,8-calową matrycą ST7789.

 Poprzednie wersje modułu CYD (Ver.1 i Ver.2) mają inny wyświetlacz i trochę inaczej zdefiniowane PIN-y a to może kolidować z transmisją z modułem MMDVM.

 

    Sam pomysł nie jest nowy — ESP32 od dawna potrafi udawać wyświetlacz Nextion, odbierając te same ramki protokołu, które Pi-Star normalnie wysyła do prawdziwego panelu dotykowego.

 https://hf5wwl.blogspot.com/2026/09/emulator-wyswietlacza-nextion-do.html

Nowością w tej wersji jest dopasowanie sprzętowe do konkretnej płytki CYD, która ma swoją specyfikę utrudniającą podłączenie.

Problem: złącze P5 jest zablokowane

Naturalnym miejscem do podłączenia hotspota wydaje się złącze P5 na płytce CYD — wyprowadzone są tam piny Vin, Tx, Rx i GND, czyli dokładnie to, czego potrzeba. Niestety w praktyce się nie da: sygnały Tx/Rx na tym złączu są blokowane przez układ obsługujący port USB i nie reagują na dane przychodzące z MMDVM.

Rozwiązaniem okazało się złącze CN1, na którym dostępne są piny +3,3V, IO22, IO27 oraz GND. Z tego zestawu wykorzystane zostały tylko IO22, IO27 i GND — pin 3,3V pozostaje niepodłączony, ponieważ na złączu SRV modułu MMDVM napięcie zasilające to +5V, a wpięcie go w pin opisany jako 3,3V uszkodziłoby płytkę. Stąd duże ostrzeżenie na schemacie: 3,3V !!!

Ostateczne połączenia wyglądają więc tak:

  • +5V (z MMDVM) → VIN na złączu P5 CYD — zasilanie całej płytki idzie tędy, mimo że linie danych na tym samym złączu są bezużyteczne
  • GND (MMDVM) → GND na P5
  • Tx / Rx (MMDVM) → IO22 / IO27 na złączu CN1 — tu faktycznie płynie komunikacja z hotspotem
  • Pin 3,3V na CN1 pozostaje wolny

To rozdzielenie zasilania (P5) i danych (CN1) jest sercem tej adaptacji — bez niego moduł CYD po prostu nie odbierałby żadnych ramek z MMDVM.

W kodzie odzwierciedla to prosta definicja pinów i inicjalizacja drugiego portu szeregowego:

#define MMDVM_RX 22
#define MMDVM_TX 27
...
Serial2.begin(9600, SERIAL_8N1, MMDVM_RX, MMDVM_TX);
 
Schemat poglądowy połączeń pomiędzy MMDVM i CYD
 
 

Połączenia wykonałem za pomocą kabelków z odpowiednimi wtyczkami:
 

 

Co potrafi program ?

Firmware (zapisane w module CYD) emuluje protokół Nextion na tyle wiernie, że Pi-Star/MMDVMHost nie widzi różnicy między prawdziwym panelem dotykowym a modułem CYD:

Parser protokołu Nextion

  • Ramki odczytywane są z terminatorem 0xFF ×3, tak jak w prawdziwym Nextionie
  • Program wysyła do MMDVM standardowy handshake (NEXTION + page0), dzięki czemu Pi-Star traktuje go jak legalny wyświetlacz
  • Parser jest świadomy aktywnej strony (page MMDVM / page DMR) — te same numery pól (t3, t5, t7...) oznaczają co innego w zależności od strony (np. t3 to na stronie MMDVM adres IP, a na stronie DMR realny talkgroup), więc rozróżnianie kontekstu jest kluczowe dla poprawnego odczytu danych

Ekran TFT

  • Tryb IDLE: zegar i komunikat o braku aktywności
  • Tryb RX: znak wywoławczy i imię korespondenta, jego miejscowość (dostępna dzięki pełnemu pipeline'owi NextionDriver), aktywny talkgroup, pasek siły sygnału RSSI (0–5 kresek) oraz kolorowany pasek jakości BER (zielony/żółty/czerwony)
  • Historia trzech ostatnio słyszanych stacji
  • Dolny pasek z temperaturą CPU Raspberry Pi (kolorowana wg progów) oraz częstotliwościami RX/TX skróconymi do czytelnego formatu (np. 439.454)
  • Delikatna animacja ikony anteny przy odbiorze, płynna aktualizacja samego zegara bez przerysowywania całego ekranu
  • Wygaszacz gasi podświetlenie po około 3 minutach bezczynności — ale ignoruje telemetrię (temperaturę, obciążenie CPU, adres IP), którą NextionDriver wysyła co 20–30 s nawet bez żadnej transmisji, więc ekran nie budzi się bez powodu

Panel WWW

  • Wbudowany serwer WWW z WebSocketem pokazuje na żywo w przeglądarce to samo, co widać na wyświetlaczu — te same dane, podobna stylistyka, automatyczne przeładowanie połączenia po jego zerwaniu
  • Automatyczne wykrywanie adresu Pi-Star przez mDNS
  • Jeśli nie chcemy łączyć się z Wi-Fi, w stopce zamiast adresu IP pojawia się po prostu "OFFLINE"  
  •  


Ważna uwaga: By wyświetlić obraz na ekranie komputera trzeba znać jego adres w sieci lokalnej. Adres można zobaczyć w monitorze portu szeregowego po resecie modułu CYD: 

 

 === EMULATOR NEXTION - MMDVM v2 ===
Laczenie z WiFi.........
Polaczono, IP emulatora: 192.168.0.203
Pi-Star (pi-star.local) nie odpowiedzial na mDNS.
Serwer WWW uruchomiony.
Serial2 9600 bps
Ready.

 

Różne moduły CYD mają różne adresy IP. W tym wypadku jest to adres 192.168.0.203

Tak więc wpisujemy do naszej wyszukiwarki: http://192.168.0.203 klikamy enter i mamy obraz monitora na naszym komputerze. Nie należy mylić tego adresu z adresem dostępu do Pi-Stara. To dwa różne adresy IP.


Podsumowanie

To praktyczny przykład, że ograniczenia konkretnej płytki (zablokowane P5) da się obejść, jeśli producent zostawił choć jedno zapasowe złącze z wolnymi GPIO — tu właśnie CN1 uratowało projekt. Kod jest w dużej mierze kontynuacją poprzednich wersji emulatora, tym razem dopasowaną pod konkretny, tani i łatwo dostępny moduł z ekranem 2,8".

 

📋 Szybka ściągawka: Konfiguracja Pi-Star dla emulatora CYD
Aby Twój Cheap Yellow Display poprawnie odbierał pełen pakiet danych z MMDVMHost, konfiguracja w panelu administracyjnym Pi-Star musi wyglądać następująco:
  1. Zaloguj się do panelu Pi-Star i przejdź do zakładki Configuration.
  2. W sekcji General Configuration odszukaj pole MMDVM Display Type.
  3. Ustaw parametry dokładnie według poniższej tabeli:
ParametrUstawienieOpis
MMDVM Display TypeNextionWłącza emulację ekranu szeregowego.
Port

/dev/ttyNextionDriver

 

 Kieruje sygnał bezpośrednio na złącze ekranu w modemie MMDVM.
Nextion LayoutON7LDS L3 HSKluczowe! Tylko ten profil wysyła pełną telemetrię (Częstotliwości, Temp CPU).

  1. Kliknij przycisk Apply Changes, aby zrestartować proces MMDVMHost z nowymi ustawieniami. 
💡 Wskazówka: Profil G4KLX wysyła jedynie podstawowe dane o znaku (Callsign). Wybór ON7LDS L3 HS jest warunkiem koniecznym, aby uruchomić zaawansowane funkcje parsowania napisane w kodzie ESP32!

 

Ustawienie konfiguracji komunikacji z wyświetlaczem CYD.

 

Na koniec krótki film prezentujący pracę CYD jako emulatora wyświetlacza NEXTION. Na początku jest trochę ciszy. Po prostu nikt nie rozmawiał. Dalej jest już normalna łączność. Przepraszam za jakość ale film był nagrywany telefonem i bez statywu. 

  
 
 
Tak wygląda praca wyświetlacza z programem w wersji EN (beta): 

Wersja PL jest taka sama tylko po Polsku :)

 

 

Pamiętaj o dobrym zasilaczu!  Ma mieć 5V i wydajność minimum 2A.

 

 Na razie to wszystko. Z pewnością będą jakieś zmiany i będę je nanosił na projekt.

73!

 

 

✍️ Autor: Robert HF5WWL
📅 Data projektu: wrzesień 2026 r.
 📍 Lokalizacja: Wołomin, POLSKA
📁 Coś nie jasne? Pytaj poprzez e-mail (hf5wwl@gmail.com) lub w komentarzu 
🛠️ Poziom trudności: Średni/trudny. Podstawy programowania w Arduino IDE.

📜 Program jest jak zwykle dostępny za darmo /aktualna wersja/. Wystarczy poprosić via e-mail. 

Jest możliwość otrzymania programu w wersji angielskiej (BETA). Testy trwają i pewnie będą jeszcze jakieś zmiany.


#ESP32 #CYD #MMDVM #DMR #PiStar #Nextion #krotkofalarstwo


24 września 2026

Monitor DMR ESP32-2432S028R

 


Monitor DMR na ESP32-2432S028R ("żółty moduł" CYD) z danymi z BrandMeister

 

Wstęp

Monitor DMR pokazujący na bieżąco, kto nadaje na wybranych grupach rozmównych, pierwotnie zbudowałem na ESP32 WROOM-32U z wyświetlaczem 480×320 i osobną kartą SD. Program pobiera dane bezpośrednio z internetu, więc nie potrzebuje modułu MMDVM ani radia. Wystarczy sieć WiFi.

 https://hf5wwl.blogspot.com/2026/07/dmr-monitor-na-esp32.html

Okazało się, że ten sam program można przenieść na popularny gotowy moduł ESP32-2432S028R, czyli tak zwany "żółty moduł" (CYD, Cheap Yellow Display). Ma on w jednej płytce ESP32, kolorowy wyświetlacz 2,8" i gniazdo karty microSD. Nie trzeba niczego lutować ani łączyć przewodami.

Jak to działa

Monitor łączy się przez WebSocket z serwerem BrandMeister (Last Heard) i odbiera informacje o aktywności w sieci. Każdy pakiet zawiera znak, imię lub alias operatora, jego ID DMR oraz numer grupy rozmównej (TG). Program odrzuca pakiety z grup, których nie monitorujesz, a resztę pokazuje na ekranie.

Co pokazuje ekran

  • Nagłówek: nazwa monitora, status połączenia z BrandMeister (BM ONLINE / OFFLINE), ikona radia zmieniająca kolor podczas odbioru oraz zegar synchronizowany przez NTP (z automatyczną zmianą czasu letni/zimowy).
  • Aktywny operator: duży znak wywoławczy, imię lub alias, numer TG i ID oraz licznik czasu trwania transmisji (MM:SS) z animacją odbioru.
  • Historia: cztery ostatnie transmisje z godziną, znakiem, imieniem i numerem TG.
  • Stan czuwania: gdy nikt nie nadaje, ekran pokazuje listę monitorowanych grup.

 

Konfiguracja z karty SD

Nic nie trzeba zmieniać w kodzie, żeby ustawić sieć i grupy. Wszystko jest w plikach tekstowych na karcie microSD (FAT32). Na karcie tworzymy dwa pliki:

plik config.txt – dane sieci WiFi:

SSID=nazwa_twojej_sieci_WiFi
PASS=twoje_haslo

plik monitored_tg.txt – lista monitorowanych grup, jedna w linii:

260
2602
# linia zaczynająca się od # jest komentarzem na przykład:
#260080
#TG lokalne
#TG podręczne 

Wpis 260* włącza monitorowanie wszystkich grup zaczynających się od 260. Jeśli pliku nie ma, program używa domyślnej grupy 260.

Plik logu powstanie automatycznie. 

WAŻNE! Stosuj karty max 32 GB sformatowane na FAT32. To powinno działać niezawodnie. 

 

Dziennik transmisji

Po zakończeniu każdej transmisji (po 5 sekundach bez pakietów) program dopisuje wiersz do pliku dmr_log.csv na karcie SD: data i godzina początku i końca, znak, imię, ID, TG oraz czas trwania w sekundach. Plik można otworzyć w Excelu lub LibreOffice i analizować aktywność.


 

Co trzeba było zmienić przy przeniesieniu na CYD

  1. Wyświetlacz: w wersji z dwoma portami USB (micro-USB i USB-C) jest to ST7789 o rozdzielczości 320×240. Użyłem biblioteki Adafruit ST7789, na magistrali HSPI (CS 15, DC 2, MOSI 13, MISO 12, SCK 14, podświetlenie GPIO 21).
  2. Karta SD: na płytce siedzi na osobnej magistrali VSPI (CS 5, SCK 18, MISO 19, MOSI 23), więc nie dzieli już SPI z wyświetlaczem. Uprościło to kod i usunęło ręczne przełączanie linii CS.
  3. Układ ekranu: z 480×320 na 320×240 przeliczyłem ręcznie wszystkie współrzędne. Nagłówek ma teraz dwa wiersze, a w historii zmieściłem czas bez sekund.
  4. Drobne poprawki: program nie zatrzymuje się, gdy brakuje karty SD (pokazuje komunikat i działa dalej z domyślną grupą), zegar odświeża się bez przerysowywania całego nagłówka, a zbyt długi tekst dobiera mniejszą czcionkę i nie zawija się na sąsiednie linie. 
Widok ekranu w starej wersji (480x320 px)

 

Na mojej płytce z dwoma portami USB trzeba było ustawić dwie stałe na początku programu:

cpp
#define TFT_INVERT false
#define TFT_ROTATION 3

Na innych egzemplarzach mogą być potrzebne inne wartości. Jeśli kolory są negatywem, zmień TFT_INVERT, a jeśli obraz jest do góry nogami, zmień TFT_ROTATION między 1 a 3.

Biblioteki

  • WebSockets (Markus Sattler)
  • ArduinoJson 7
  • Adafruit GFX
  • Adafruit ST7735 and ST7789 Library

Płytka w Arduino IDE: ESP32 Dev Module.

Możliwości rozwoju

Sam moduł oferuje jeszcze kilka rzeczy, których ten program na razie nie używa:

  • ekran dotykowy (XPT2046), np. do przełączania monitorowanych grup,
  • wbudowana dioda RGB, która mogłaby zapalać się podczas odbioru,
  • fotorezystor do automatycznej regulacji jasności ekranu.

Wersja z jednym portem USB ma zwykle inny wyświetlacz (ILI9341). Po zamianie biblioteki na Adafruit_ILI9341 i konstruktora (Adafruit_ILI9341(&tftSPI, TFT_DC, TFT_CS, -1)) reszta programu powinna działać podobnie, ale tego nie sprawdzałem. Wersja ILI9341 nie była testowana.

 


 

✍️ Autor: Robert HF5WWL
📅 Data projektu: wrzesień 2026 r.
 📍 Lokalizacja: Wołomin, POLSKA
📁 Coś nie jasne? Pytaj poprzez e-mail (hf5wwl@gmail.com) lub w komentarzu 
🛠️ Poziom trudności: Łatwy 

📜 Program jest dostępny za darmo /aktualna wersja/. Wystarczy poprosić via e-mail. Jest możliwość otrzymania programu w wersji angielskiej.

 

 #DMR #BrandMeister #ESP32 #Krotkofalarstwo #HamRadio #Arduino #Cplusplus 
#IoT #DIYelectronics #EmbeddedSystems #RadioMonitor #OpenSource

.