Remote prevádzka rádiostaníc je čoraz bežnejšia, no pre CW operátorů přinášela jedno nepohodlné omezení: klíčování přes síť zpravidla znamenalo buď softwarový klíč na obrazovce, nebo kompromis s latencí, který při vyšších rychlostech degradoval kvalitu vysílané CW. Dan Pech OK1HRA, český rádioamatér a vývojár v Prusa3D, tento problém riešil od základov – výsledkom je Paddle2IP, open-source hardvérové zariadenie, ktoré pripojí klasickou iambickou pastičku k remote station přes IP síť s kontrolovanou latencí a zachováním přesného časování značek.
V článku se dočtete
Hardwarový základ: M5Stack M5Dial
Paddle2IP stojí na modulu M5Stack Dial v1.1 s mikrokontrolérem ESP32-S3. Modul v kompaktním kruhovém těle integruje Wi-Fi, 1,28“ dotykový displej, otočný enkodér s tlačítkem a dva Grove konektory. Port B (GPIO2/GPIO1) slouží k připojení pastičky – dit a dah kontakty s interními pull-up rezistory, 100 Ω sériovým odporem a 10 NF filtračním kondenzátorem na každém vstupu. Port A je volitelný: GPIO13 pro rovný klíč, GPIO15 pro sluchátkový boční tón přes RC filtr a DC-oddělovací kondenzátor. Interní bzučák na GPIO3 generuje boční tón přímo v zařízení, s hlasitostí nastavitelnou v rozsahu 0 – 100 (krok 5 odpovídá 2 dB). Zařízení je napájeno z baterie, firmware udržuje napájení přes GPIO46. Důležité upozornění: červený 5 V vodič Grove konektoru se nesmí připojit k pastičce.
Proč právě M5Dial
Volba M5Dial není náhodná. Otočný enkodér slouží k přímému nastavování rychlosti klíčování, dotykový displej zobrazuje aktuální stav spojení a parametry, a Wi-Fi konektivita je integrována bez externích modulů. Celé zařízení má rozměry disku o průměru necelých 5 cm – jedná se o jednu z nejkompaktnějších platforem pro tento účel. Kompromis je v omezené výdrži baterie a absenci Ethernet portu – pro stacionární použití existuje alternativa v podobě USB síťového režimu.
Ukázka fungování Paddle2IP
Síťový protokol a latence
Paddle2IP nepřeposílá syrové stisknutí kontaktů. Iambický klíčovač (portu z 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 – začátek a konec každé značky a mezery – a tyto značky s časovým razítkem odesílá přes UDP (port 5690) na server u radiostanice. 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í.
Server přijme pakety a přehrává hrany po pevném playout zpoždění D, čímž kompenzuje síťový jitter. Doporučené hodnoty D závisí na typu připojení: v LAN kolem 30 ms, při dobrém internetovém spojení nebo VPN 80 – 150 ms, přes LTE 200 ms a více. RTT (round-trip time) se zobrazuje na displeji zařízení – aktuální hodnota i 5sekundové minimum. Každý paket opakuje hrany z posledních 500 ms, což zajišťuje odolnost vůči ztrátě jednotlivých paketů. Autentifikace používá SipHash-2-4 se 128bitovým sdíleným klíčem, nonce se rotuje každých 5 sekund a sekvenční čísla zabraňují replay útokům.
Proč je lokální klíčovač klíčový
Mnohá remote řešení posílají syrové stisky pastičky na vzdálený server, kde klíčovač běží. Při kolísání latence to vede k nepravidelným značkám a mezerám. Paddle2IP obrací tento princip: klíčovač běží lokálně a server dostává hotové, správně načasované hrany. I při výpadku jednoho paketu zůstává CW čistá, neboť následující paket obsahuje všechny hrany z poslední půl sekundy. Limit nastává při playout zpoždění nad 500 ms – operátor sice slyší lokální boční tón okamžitě, ale kontrolní potvrzení od rádia je zpožděno, což při rychlém provozu vyžaduje přizpůsobení návyků.
Uživatelské rozhraní a nastavení
Otočný enkodér M5Dial slouží k nastavování parametrů přímo na zařízení bez počítače. Rychlost klíčování (WPM) je nastavitelná od 5 do 60, výška zázní od 300 do 1 200 Hz (krok 10 Hz). K dispozici je volba iambického režimu A nebo B, přehození dit/dah kontaktů, otočení displeje o 180° a testovací funkce, která odvysílá „TEST“ nastavenou rychlostí. Playout zpoždění D je nastavitelné od 10 do 1 000 ms (krok 10 ms), nebo se ponechá na výchozí hodnotě serveru.
Webové rozhraní na portu 80 (přístupné přes http://paddle2ip.local) umožňuje konfiguraci Wi-Fi sítí (až čtyři uložené), generování autentifikačního klíče, kontrolu stavu a aktualizaci firmwaru. Sériová konzola na 115 200 baud poskytuje příkazy pro diagnostiku a správu.
Připojení a síťové možnosti
Primární způsob připojení je Wi-Fi. Zařízení při startu provede jeden sken kanálů (přibližně 1,5 s) a připojí se k nejsilnější uložené síti. Pokud žádná uložená síť není dostupná do 20 sekund, aktivuje se záložní přístupový bod „Paddle2IP-XXXX“ s konfiguračním portálem. Modem sleep je vypnutý – latence má přednost před úsporou energie.
Alternativou je USB síťový režim: M5Dial se enumeruje jako CDC-NCM Ethernet zařízení přes TinyUSB 0.15.0. Počítač mu sdílí internetové připojení přes DHCP s NAT. Tento režim je ověřen na Linuxu (Debian 13, GNOME), na Windows a macOS zatím není testován. Pokud USB síť nezíská DHCP adresu do 20 sekund nebo server neodpoví do 10 sekund, zařízení automaticky přejde na Wi-Fi.
Pro přístup přes internet je potřebný UDP port forward na straně serveru. Na straně Paddle2IP žádný inbound port není nutný, protože zařízení iniciuje komunikaci. Carrier-grade NAT není podporován – v takovém případě je řešením VPN tunel. Komunikace probíhá výhradně přes IPv4.
Podporované servery
Paddle2IP není uzavřen ekosystém. Dokumentace definuje kompletní komunikační protokol, což umožňuje implementaci vlastních serverů. Referenční implementací je Open Interface III (OI3) s ATmega2560 a W5500, který klíčuje CW linku přes PTT sekvencer. Druhou možností je WIFILT – webové rozhraní pro Icom transceivery s LAN připojením, běžící na ESP32 nebo jako nativní PC program, schopné klíčovat přes CI-V protokol rádia bez dodatečného kabelu. Volba serveru závisí na transceiveru a způsobu připojení – pro Yaesu, Kenwood nebo Elecraft s klasickým CW vstupem je vhodný OI3, pro Icom s LAN rozhraním WIFILT.
3D tištěná krabička
Pro mechanické dokončení zařízení je na portálu Printables dostupný model závitové krabičky (Threaded housing for M5Dial, model 1886030). Krabička je navrhnutá priamo pre modul M5Dial a poskytuje ochranu displeje a konektorů při portablovém provozu. Závitový uzávěr umožňuje rychlý přístup k modulu bez nářadí – praktické při výměně baterie nebo připojení USB kabelu.
Stavba, firmware a další vývoj
Firmware se kompiluje v Arduino IDE 2.x nebo arduino-cli s balíkem M5Stack (testován s verzí 2.1.3) a knihovnami M5Dial 1.0.2, M5Unified 0.2.2 a M5GFX 0.2.3. Alternativou k vlastní kompilaci je webový flasher na GitHub Pages, který funguje v Chrome nebo Edge a nevyžaduje instalaci vývojového prostředí. K testování bez hardwaru slouží Python skript rkey_test.py (falešný server, zátěžové testy, SipHash self-test) a hostitelská simulace klíčovače kompilovatelná přes g++ se standardem C++17.
Zdrojový kód je veřejně dostupný na GitHube (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 paměti se odkládá, dokud je klíčovač nečinný alespoň 2 sekundy – aby zápis nenarušil časování CW. Projekt je aktivně vyvíjen a dokumentace zahrnuje kompletní popis drátového protokolu, což otevírá cestu pro integraci do stávajících remote systémů i mimo ekosystémy OI3 a WIFILT.
