Remote prevádzka rádiostaníc je čoraz bežnejšia, no pre CW operatorzy mieli jedno niewygodne ograniczenie: kluczowanie sieciowe zazwyczaj oznaczało albo klucz programowy na ekranie, albo kompromis z opóźnieniami, który pogarszał jakość nadawanego CW przy wyższych prędkościach. Dana Pecha OK1HRA, český rádioamatér a vývojár v Prusa3D, tento problém riešil od základov – výsledkom je Wiosło2IP, open-source hardvérové zariadenie, ktoré pripojí klasyczna pułapka jambiczna do stacji zdalnej poprzez sieć IP z kontrolowanym opóźnieniem i zachowaniem dokładnego taktowania znaczników.
Przeczytasz w artykule
Baza sprzętowa: M5Stack M5Dial
Paddle2IP oparty jest na module M5Stack Dial v1.1 z mikrokontrolerem ESP32-S3. Moduł w kompaktowej, okrągłej obudowie integruje Wi-Fi, ekran dotykowy 1,28", enkoder obrotowy z przyciskiem i dwa złącza Grove. Port B (GPIO2/GPIO1) służy do podłączenia pułapki - styki dit i dah z wewnętrznymi rezystorami podciągającymi, rezystancją szeregową 100 Ω i kondensatorem filtrującym 10 NF na każdym wejściu. Port A jest opcjonalny: GPIO13 dla klucza płaskiego, GPIO15 dla tonu bocznego słuchawek przez filtr RC oraz kondensator sprzęgający DC. Wewnętrzny brzęczyk na GPIO3 generuje sygnał boczny bezpośrednio w urządzeniu, z regulacją głośności w zakresie 0-100 (krok 5 odpowiada 2 dB). Urządzenie zasilane jest z baterii, oprogramowanie utrzymuje zasilanie poprzez GPIO46. Ważna uwaga: czerwony przewód 5 V złącza Grove nie może być podłączony do pułapki.
Dlaczego M5Dial?
Wybór M5Dial nie jest przypadkowy. Enkoder obrotowy służy do bezpośredniej regulacji szybkości kluczowania, ekran dotykowy wyświetla aktualny stan i parametry połączenia, a łączność Wi-Fi jest zintegrowana bez modułów zewnętrznych. Całe urządzenie ma wymiary dysku o średnicy niespełna 5 cm – jest to jedna z najbardziej kompaktowych platform do tego celu. Kompromisem jest ograniczona żywotność baterii i brak portu Ethernet – do użytku stacjonarnego istnieje alternatywa w postaci trybu sieciowego USB.
Demo Paddle2IP w akcji
Protokół sieciowy i opóźnienie
Paddle2IP nie przekazuje surowych pras kontaktowych. Klucz jambiczny (port K3NG, CMOS Super Keyer timing) beží lokálne na jadre 1 ESP32-S3 ako neblokujúci stavový automat s tikom 1 ms. Generuje ideálne časové značky hrán - początek i koniec każdego znaku i spacji - i wysyła te znaki ze znacznikiem czasu poprzez UDP (port 5690) do serwera w stacji radiowej. Tón sa ozve lokálne do 1 ms od stlačenia kontaktu, takže operátor počuje sám seba bez oneskorenia, zatiaľ čo sieťový prenos prebieha na pozadí.
Serwer odbiera pakiety i odtwarza krawędzie po ustalonym opóźnieniu odtwarzania D, aby skompensować drgania sieci. Zalecane wartości D zależą od rodzaju połączenia: w sieci LAN około 30 ms, przy dobrym połączeniu internetowym lub VPN 80-150 ms, poprzez LTE 200 ms i więcej. Na wyświetlaczu urządzenia wyświetla się RTT (czas podróży w obie strony) - zarówno wartość bieżąca, jak i minimum 5-sekundowe. Każdy pakiet powtarza krawędzie z ostatnich 500 ms, co zapewnia odporność na utratę poszczególnych pakietów. Uwierzytelnianie wykorzystuje SipHash-2-4 ze 128-bitowym kluczem współdzielonym, wartość nonce zmienia się co 5 sekund, a numery sekwencyjne zapobiegają atakom polegającym na powtarzaniu.
Dlaczego lokalny posiadacz kluczy jest kluczowy?
Wiele rozwiązań zdalnych wysyła surowe naciśnięcia klawiszy do zdalnego serwera, na którym działa moduł kluczowania. Zmieniające się opóźnienia prowadzą do nieregularnych znaków i przerw. Paddle2IP odwraca tę zasadę: moduł kluczowania działa lokalnie, a serwer otrzymuje gotowe krawędzie o prawidłowym czasie. Nawet jeśli jeden pakiet spadnie, CW pozostanie czyste, ponieważ następny pakiet zawiera wszystkie krawędzie z ostatniej połowy sekundy. Granica występuje, gdy opóźnienie odtwarzania przekracza 500 ms – operator natychmiast słyszy lokalny ton boczny, ale potwierdzenie sterowania z radia jest opóźnione, co wymaga dostosowania przyzwyczajeń w szybkiej obsłudze.
Interfejs użytkownika i ustawienia
Enkoder obrotowy M5Dial służy do ustawiania parametrów bezpośrednio na urządzeniu bez użycia komputera. Szybkość kluczowania (WPM) można regulować w zakresie od 5 do 60, a częstotliwość kluczowania od 300 do 1200 Hz (krok 10 Hz). Istnieje możliwość wyboru trybu jambicznego A lub B, przełączania styków dit/dah, obracania wyświetlacza o 180° i funkcji testowej, która nadaje „TEST” z ustaloną prędkością. Opóźnienie odtwarzania D można regulować w zakresie od 10 do 1000 ms (w krokach co 10 ms) lub pozostawić na poziomie domyślnym serwera.
Interfejs sieciowy na porcie 80 (dostępny pod adresem http://paddle2ip.local) umożliwia konfigurację sieci Wi-Fi (do czterech zapisanych), generowanie klucza uwierzytelniającego, sprawdzanie statusu i aktualizację oprogramowania sprzętowego. Konsola szeregowa o szybkości 115 200 bodów udostępnia polecenia diagnostyczne i zarządzające.
Opcje połączeń i sieci
Podstawową metodą połączenia jest Wi-Fi. Przy uruchomieniu urządzenie wykonuje skanowanie jednego kanału (około 1,5 s) i łączy się z najsilniejszą zapisaną siecią. Jeśli w ciągu 20 sekund nie będzie dostępna zapisana sieć, zostanie aktywowany zapasowy punkt dostępu „Paddle2IP-XXXX” z portalem konfiguracyjnym. Uśpienie modemu jest wyłączone — opóźnienie ma pierwszeństwo przed oszczędzaniem energii.
Alternatywą jest tryb sieciowy USB: M5Dial określa się jako urządzenie Ethernet CDC-NCM poprzez TinyUSB 0.15.0. Komputer udostępnia swoje połączenie internetowe poprzez DHCP za pomocą NAT. Ten tryb jest zweryfikowany w systemie Linux (Debian 13, GNOME), nie został jeszcze przetestowany w systemie Windows i macOS. Jeżeli sieć USB nie uzyska adresu DHCP w ciągu 20 sekund lub serwer nie odpowie w ciągu 10 sekund, urządzenie automatycznie przełączy się na Wi-Fi.
Aby uzyskać dostęp do Internetu, wymagane jest przekierowanie portu UDP po stronie serwera. Po stronie Paddle2IP nie jest potrzebny żaden port wejściowy, ponieważ urządzenie inicjuje komunikację. NAT klasy operatorskiej nie jest obsługiwany – w takim przypadku rozwiązaniem jest tunel VPN. Komunikacja odbywa się wyłącznie poprzez protokół IPv4.
Obsługiwane serwery
Paddle2IP nie jest zamkniętym ekosystemem. Dokumentacja definiuje kompletny protokół komunikacyjny, który umożliwia realizację własnych serwerów. Implementacją referencyjną jest Open Interface III (OI3) z ATmega2560 i W5500, które kluczują linię CW poprzez sekwencer PTT. Drugą opcją jest WIFILT - interfejs sieciowy dla transceiverów Icom z połączeniem LAN, działający na ESP32 lub jako natywny program PC, umożliwiający kluczowanie poprzez protokół CI-V radia bez dodatkowego kabla. Wybór serwera zależy od transceivera i sposobu połączenia - OI3 jest odpowiedni dla Yaesu, Kenwood lub Elecraft z klasycznym wejściem CW, WIFILT dla Icom z interfejsem LAN.
Pudełko wydrukowane w 3D
Mechaniczne uzupełnienie urządzenia znajduje się na portalu Dostępne materiały do nadruku model z gwintowaną obudową (Gwintowana obudowa do M5Dial, model 1886030). Krabička je navrhnutá priamo pre modul M5Dial i zapewnia ochronę wyświetlacza i złączy podczas pracy przenośnej. Zakręcana zakrętka umożliwia szybki i beznarzędziowy dostęp do modułu – przydatna przy wymianie baterii lub podłączeniu kabla USB.
Budowa, oprogramowanie sprzętowe i dalszy rozwój
Firmware jest kompilowany w Arduino IDE 2.x lub arduino-cli z pakietem M5Stack (testowany z wersją 2.1.3) i bibliotekami M5Dial 1.0.2, M5Unified 0.2.2 i M5GFX 0.2.3. Alternatywą dla niestandardowej kompilacji jest flasher internetowy na GitHub Pages, który działa w przeglądarce Chrome lub Edge i nie wymaga instalacji środowiska programistycznego. Do testowania bez sprzętu używany jest skrypt Pythona rkey_test.py (fałszywy serwer, testy obciążenia, autotest SipHash) i symulacja hosta klucza kluczującego kompilowana przez g++ ze standardem C++17.
Kod źródłowy jest publicznie dostępny pod adresem GitHub (github.com/ok1hra/paddle2ip). Verzie firmvéru používajú dátumovú schému YYYYMMDD, nastavenia sú uložené v NVS a zápis do Flash pamięć jest opóźniana do momentu, gdy moduł kluczujący będzie bezczynny przez co najmniej 2 sekundy - tak aby zapis nie zakłócał taktowania CW. Projekt jest aktywnie rozwijany, a dokumentacja zawiera pełny opis protokołu przewodowego, co toruje drogę do integracji z istniejącymi systemami zdalnymi nawet poza ekosystemem OI3 i WIFILT.
