Cześć! Dziś chciałbym podzielić się z Wami moim najnowszym projektem: "profesjonalnym" odbiornikiem VHF z interfejsem webowym, który zbudowałem w oparciu o moduł radiowy SA868S, mikrokontroler ESP32 oraz wyświetlacz TFT ST7789. To urządzenie, które łączy w sobie możliwości odbioru pasma VHF (134–174 MHz) z nowoczesnym sterowaniem przez przeglądarkę internetową.
📡 Główne funkcjonalności:
Odbiornik VHF – pracuje w paśmie VHF (134–174 MHz) z możliwością strojenia krokami 12.5 kHz, 25 kHz, 100 kHz i 1 MHz.
Główny interfejs: panel webowy – dostępny z każdego urządzenia w sieci WiFi (telefon, tablet, laptop). Nie potrzebujesz dodatkowej aplikacji – wystarczy przeglądarka.
Wyświetlacz lokalny TFT – pełni rolę pomocniczego ekranu technicznego, pokazującego aktualną częstotliwość, nazwę kanału, poziom sygnału (S-meter) oraz status (BUSY/SQL/SCAN).
Bank pamięci kanałów – możesz zapisywać ulubione częstotliwości z własnymi nazwami, a potem jednym kliknięciem do nich wracać.
Skaner pasma – automatyczne przeszukiwanie zadanego zakresu z pauzowaniem na aktywnych kanałach.
Regulacja audio – głośności i squelcha z poziomu panelu webowego.
Filtry odbioru – wbudowane opcje: PRE/DE-EMPHASIS, HIGH-PASS, LOW-PASS.
🛠️ Jak to działa?
Urządzenie opiera się na ESP32,
który pełni rolę serwera webowego (AsyncWebServer) i komunikuje się z
modułem radiowym SA868S poprzez UART. Połączenie WiFi działa w trybie
Access Point – urządzenie tworzy własną sieć Odbiornik_VHF, do której łączysz się bezpośrednio.
Główny interfejs to strona HTML serwowana z karty SD, która na żywo aktualizuje dane przez WebSocket (częstotliwość, poziom sygnału, status). Wyświetlacz TFT ST7789 pokazuje te same informacje w formie uproszczonej – idealnie, gdy nie chcesz otwierać przeglądarki.
🧩 Schemat podłączenia:
Moduł SA868S połączony jest z ESP32 przez UART (RX/TX) oraz pin BUSY do detekcji aktywności kanału.
Wyświetlacz ST7789 podłączony przez SPI.
Karta SD również przez SPI – przechowuje stronę HTML i banki kanałów.
Karta musi być sformatowana w systemie FAT-32 i zawierać podstawowe pliki index.html i banki.txt. Opcjonalnie config.txt
Audio – sygnał audio z SA868S trafia do wzmacniacza klasy D LTK5128, a potem do głośnika lub słuchawek.
Zasilanie przez USB-C 5V, z prostym układem stabilizatora 4.3V dla części analogowej.
Szkic połączeń toru audio.Szkic części cyfrowej.
Kluczowe uwagi montażowe:
Zasilanie: Moduł SA868S potrafi pobrać sporo prądu w momencie inicjalizacji. Warto dodać kondensator elektrolityczny (np. 470uF) blisko wyprowadzeń VCC modułu radiowego.
Antena: Pamiętaj o podłączeniu anteny (lub sztucznego obciążenia 50 Ohm) przed uruchomieniem. Nawet jeśli tylko odbierasz, dobre dopasowanie chroni czułe stopnie wejściowe przed zakłóceniami z procesora.
Separacja: ESP32 generuje sporo szumu cyfrowego (WiFi/BT). Staraj się prowadzić przewody audio z modułu SA868S jak najdalej od anteny WiFi i linii sygnałowych SPI karty SD.
💻 Oprogramowanie:
Kod napisany w Arduino IDE wykorzystuje m.in.:
AsyncWebServerdo serwowania strony i APIWebSocketdo komunikacji w czasie rzeczywistymAdafruit_ST7789do obsługi wyświetlaczaSDdo odczytu/zapisu kanałów
Panel webowy ma nowoczesny, ciemny styl z elementami inspirowanymi profesjonalnymi konsolami radiowymi. Wszystkie ustawienia można zmieniać w locie, a zmiany są natychmiast widoczne na wyświetlaczu TFT.
Słów kilka na temat panela www:
Interfejs WWW – panel operatorski ładowany z karty SD
Interfejs użytkownika odbiornika został zrealizowany jako pojedynczy plik index.html, który nie znajduje się w pamięci flash ESP32, lecz jest ładowany bezpośrednio z karty SD podłączonej do mikrokontrolera.
Takie rozwiązanie zostało wybrane świadomie i niesie ze sobą kilka bardzo praktycznych korzyści.
Dlaczego karta SD zamiast flash ESP32?
Umieszczenie interfejsu WWW na karcie SD pozwala na:
-
łatwą modyfikację wyglądu i funkcji interfejsu bez ponownego wgrywania firmware,
-
szybką edycję HTML/CSS/JS bez ryzyka „uceglenia” urządzenia,
-
przechowywanie dodatkowych plików (np. przyszłych wykresów, logów, konfiguracji),
-
oddzielenie warstwy sprzętowej od warstwy interfejsu użytkownika.
W praktyce:
ESP32 odpowiada za radio i logikę, karta SD za „twarz” urządzenia.
I to jest dokładnie ten podział, który dobrze się skaluje.
Serwowanie plików WWW z karty SD
ESP32 działa jako serwer HTTP, który:
-
przy starcie inicjalizuje kartę SD,
-
udostępnia plik
index.htmloraz zasoby statyczne bezpośrednio z systemu plików, -
obsługuje zapytania API i WebSockety równolegle.
Dla przeglądarki użytkownika:
-
strona zachowuje się jak klasyczna aplikacja webowa,
-
nie ma różnicy, czy plik pochodzi z serwera w chmurze, czy z ESP32 na biurku.
Dla konstruktora:
-
jest pełna kontrola nad zawartością,
-
zero zależności od zewnętrznej infrastruktury.
Technologia interfejsu
Interfejs został napisany w czystym HTML, CSS i JavaScript, bez frameworków i bibliotek zewnętrznych.
Zastosowane rozwiązania:
-
CSS Grid – układ dashboardu,
-
dark theme – czytelność i „techniczny” charakter,
-
JavaScript ES6 – logika interfejsu,
-
WebSocket – komunikacja czasu rzeczywistego,
-
HTTP API – konfiguracja i sterowanie odbiornikiem.
Całość działa w dowolnej nowoczesnej przeglądarce:
-
komputer,
-
tablet,
-
smartfon.
Nie ma instalacji aplikacji, nie ma parowania — wystarczy adres IP.
Komunikacja przeglądarka ↔ ESP32
Interfejs wykorzystuje dwa kanały komunikacji:
WebSocket
-
aktualna częstotliwość,
-
poziom sygnału (S-metr),
-
stan BUSY,
-
status skanera.
Zapewnia to:
-
brak opóźnień,
-
brak odświeżania strony,
-
bardzo płynną pracę interfejsu.
HTTP (REST-like API)
-
zmiana częstotliwości,
-
regulacja audio,
-
zapis i odczyt pamięci,
-
sterowanie skanerem.
To rozdzielenie upraszcza kod i zwiększa niezawodność.
Bank pamięci i dane użytkownika
Lista zapamiętanych częstotliwości:
-
przechowywana jest po stronie ESP32,
-
może być powiązana z plikami na karcie SD,
-
jest dynamicznie ładowana do interfejsu WWW.
Karta SD naturalnie nadaje się też do:
-
logowania zdarzeń,
-
zapisu historii skanowania,
-
przyszłej rozbudowy projektu.
Interfejs WWW jako „softwarowy front panel”
W tym projekcie interfejs WWW pełni rolę klasycznego panelu czołowego, tyle że:
-
bez gałek,
-
bez przycisków,
-
bez ograniczeń fizycznych.
Zmiana wyglądu lub funkcji:
-
nie wymaga lutownicy,
-
nie wymaga kompilatora,
-
wymaga tylko edytora tekstu.
A to w świecie projektów radiowych jest luksus, którego trudno się potem wyrzec.
Umieszczenie interfejsu WWW na karcie SD:
-
upraszcza rozwój projektu,
-
zwiększa elastyczność,
-
oddziela warstwę sprzętową od wizualnej.
ESP32 robi to, co potrafi najlepiej — steruje radiem i komunikuje się z siecią.
A karta SD? Ona daje projektowi przestrzeń do oddychania.
Krótko mówiąc:
to już nie jest „radio z webem”, tylko radio sterowane webem.
🚀 Możliwości rozbudowy:
Dodanie nadajnika (TX) i przejście w tryb transceivera
Integracja z zewnętrznymi źródłami częstotliwości (GPS, DDS, zewnętrzny serwer czasu)
Automatyczne logowanie odbieranych sygnałów na karcie SD
Równoległe sterowanie ręczne z poziomu samego odbiornika (enkoder obrotowy)
Wersja przenośna z baterią
📦 Podsumowanie:
To projekt, który łączy klasyczną radioamatorską elektronikę z nowoczesnym interfejsem webowym. Dzięki niemu możesz zamienić dowolne urządzenie z przeglądarką w pełnoprawny panel sterowania odbiornikiem VHF. Całość jest otwarta, modułowa i gotowa do dalszej rozbudowy.
Kod źródłowy, schematy i pliki są dostępne (pytaj poprzez e-mail hf5wwl@gmail.com – zachęcam do eksperymentowania!
Masz pytania? Chcesz zbudować własny? Zapraszam do komentowania!
✍️ Autor: Robert HF5WWL
📅 Data projektu: Czerwiec 2025 r.
📍 Lokalizacja: Wołomin, POLSKA
📁 Kod źródłowy: Pytaj poprzez e-mail (hf5wwl@gmail.com).
🛠️ Poziom trudności: Średni, średnio-trudny. (gdy masz gotowy program 😊).
Tagi: #radio #VHF #ESP32 #SA868S #IoT #webinterface #DIY #radioamator #STM7789 #websocket #hf5wwl














