I’ve written before about trying to use CW while commuting. I was looking into a bunch of different ways of achieving commute CW operating via the Internet.
And going back to 2016, I started thinking about how to send/receive CW via a lossy datagram-based internet connection. Lossy, because us hams can do error correction and deal with QSB already with our operating practices. And it is more like real radio if it is a bit unreliable.
The protocol
So back in 2016, I wrote down an on-the-wire protocol for this — called bitoip. Each end would send and receive packets of carrier-on and carrier-off events to communicate the CW with real timing (and therefore hand-key “fist” dynamics) — without needing to run up a pile of audio channels and all of that. I assume it this ought to be low-bandwidth and reasonably reliable but not too reliable.
Protocol details in the GitHub repo at https://github.com/G0WCZ/cwc. See bitoip.md for those details.
Equipment
Okay, so how about the equipment needed for this? There are two components:
- A station – that turns keyed morse into packets, and receives packets and turns them into a tone in headphones or can drive a separate oscillator.
- A reflector – that creates a number of channels that stations can connect to. This really just broadcasts to connected stations what it hears coming in. Plus other enhancements if needed later.
So now let’s look at equipment options:
Station
My minimal station would be a tiny box that can wifi to my phone hotspot and has a key and a headphone jack. Optionally a volume control and channel selector. That’s a minimal option. That’s a Pi Zero W with a couple of parts to add a headphone output. Other ways would be — a PC or Mac (Linux, Windows, OS/X) with a serial interface for key and using the built-in audio.
I’ve built basic Go code for a one-channel station client that will compile for most platforms. This includes the serial and Pi GPIO I/O for key interface (in/out) and PWM audio. That’s in the repo. See https://github.com/G0WCZ/cwc/tree/master/go
I’ll tidy up the hardware and publish that soon.
Reflector
I’ve built a basic one-channel-only reflector in Go that works nice on a Pi, on OS/X or Linux. That is also in the repo at https://github.com/G0WCZ/cwc/tree/master/go
There’s a basic single-channel reflector server running on cwc0.nodestone.io:7388
Initial Testing
Over this Easter break, I’ve writing Go code and have been doing some tests of the basic station and reflector. It works. I suspect some more work on time sync is needed but for now, it seems to capture, transmit, receive and reconstruct morse okay.
More on Github
I’m going to keep working on this. Feel free to join and collaborate over on GitHub at https://github.com/G0WCZ/cwc or leave a comment here.