This programme mimics a number of different people (currently 35), each with a different callsign, name and home location. I call them virtual hams or vHams. Most are male, but there are lots of female vHams, too. They are from all over the world, so get ready to look up some city names, if you’re not a world traveller.

It is meant to be used for beginners to practice a basic QSO. Getting more fluent with sending and head copying should allow a beginner to get ready to have practice QSOs with real people, or even go on air.


Set the Morserino-32 WiFi peer to be “”.

That’s it. Set the speed to something you can copy. The vHam will answer at the same speed with which you send. If you’re using a straight key, then you’ll have to set the M-32 up to expect that in the Cw Keyer config menu. I have it set up like that, and the M-32 tracks the speed of my (horrible) keying, and QSObot sends back responses from the vHam at that speed.

Connection states

There are three states you can be in with the server:

  1. Not connected. The bot programme has no knowledge of you, and anything you key in on the M-32 is ignored, except a connection request.
  2. Connected to the server, but not yet in a QSO. The server reserves a vHam for you to talk to, and keeps the connection alive, waiting for a CQ call from you.
  3. In a QSO. You key in words, and finish with a terminating prosign to pass back control to the vHam. He/she does the same to you. They will ignore anything you key in while they are ‘transmitting’, so wait for the k. This programme doesn’t do QSK (break-in).

If you’re in state 1, keying in “qrl?” (is this frequency busy?) will get you a response of either “qrl” (yes, it’s busy - try again later) or “k” (anyone can respond). If you get the k, then you’ve gone from state 1 to state 2. You’re connected. “hi” will also work, instead of “qrl?”, but don’t tell anyone, OK?

If you’re in state 2, and you key in “cq cq de user_call user_call k”, you will get a nice welcome from whichever vHam was listening. You are now in state 3. Have a QSO!

If you’re in state 2 and you key in anything with <sk> (…-.-) as the last word, the server will just say “bye <sk>”, and you’ll be back to state 1.

If you are in state 3 and, when it’s your turn to transmit, you finish with <sk>, then the vHam will say a formal goodbye, and end with <sk>, and you’re disconnected (back into state 1). Some of the vHams like to send dits after the <sk>, but not all.

Testing your connection

So, the first test is just to key in “qrl?”, and you should get a “k”. Then key in “<sk>”, and you should get “bye <sk>”.

If that works, great! You’re ready for the next test. If not, go to Troubleshooting and look for connections problem diagnostics.

The next test (and normal use) needs your callsign. If you don’t have a real-world callsign, then make something up that won’t clash with any real-world ones. Maybe the first 2 letters of your first name, followed by a digit, followed by the first three letters of your family name. E.g. for Nelson Mandela, you’d get NE7MAN.

When you’ve got the first “k”, type in “cq de ne7man k”. (1, 2 or 3 cq and callsign repeats are fine). You should get back, at the same speed you were using, something like “ne7man de q5rjs q5rjs q5rjs k”. This is one of the vHams answering your CQ! If you just key in “<sk>” again, it will say something like “ne7man de q5rjs ok cuagn 73 73 ne7man de q5rjs <sk>”.

Not a great conversation, but it all worked! You can apologise to q5rjs (Mohammad, from Muscat, Oman) when you talk with him again :-)

What’s next?

The basic aim of the QSO is to establish contact, exchange essential information (plus maybe some extras), then close down the contact, all whilst following polite and correct procedure.

The essential information to exchange is:

  1. Callsigns
  2. Readability, Strength and Tone (RST) of the transmission.
  3. Names (just first/given names are fine), and
  4. Locations (QTH).

Your aim now is to go through a complete QSO, and come out with the vHam’s callsign, name, RST report, QTH, and have him/her have received these from you.

Basic Tips

You key in a string of words, and end with a terminating prosign like k “-.-“, <kn> “-.–.”, <bk> “-…-.-“, or <sk>/<va> “…-.-“.

“kn” will be taken as a terminator, too, although kn “-.- -.” isn’t really correct to send at the end of a transmission. Try to make it a continuous <kn> with no space between the k and n. “sk” (two letters, not a prosign) won’t count as <sk>, because “sk” (meaning Silent Key - a ham who’s no longer with us) could be used in the middle of a sentence. You must key in <sk> as a continuous pro-sign.

Once you’ve sent your transmission, and ended with a prosign, the vHam will send back a transmission, which will end with k or <sk>. k for all but the last transmission. <sk> for the last transmission.

When you’ve finished your transmission, the vHam will think, and then send back its answer. While it is sending back to you, it is deaf. Anything you send before its final k will be lost.

If you make a mistake whilst sending, key in eight dits “……..” and this will delete the eight dits and the previous word you sent. If you find you made a mistake two words ago, you can type in “……..” “……..” which will delete the previous two words. Then carry on with the transmission and send your terminating prosign.

Breaking your transmission up into chunks with “<bt>” makes life easier for the vHam, and is probably good practice for communicating with humans, too. The code behind the vHam ‘thinks’ in these chunks, and looks for words like “rst” to tell if you’re sending it an RST report. If you send “rst 5 9 9”, the vHam will see “rst 5” and reject that as an invalid RST report. If you start another chunk, the later one will override the earlier one, so “rst 5 9 9 = rst 59 9 = rs t 599 = rst 599 k” would work fine. When I stumble over an important word or value, I just send a <BT> and try again, until I get it right.

Keeping words separate from following prosigns is essential (at the moment), so don’t glue your “k” or “<sk>” to the last callsign - keep it as a word on its own. The same with “<bt>”: keep it on its own, so “rst 599 = op john = wibble k” is good, but “rst 599= op john= wibble k” would confuse the programme.

If the vHam is sending too fast for you, then turn your sending speed down on the M-32, or send more slowly with your straight key; the vHam uses that speed when it sends the next transmission.

In the real world, many operators like to add “TU” or “EE” after the final “<sk>”. Currently, the vHams will ignore anything after the prosign ends the formal QSO, but you’re welcome to send it for practice.

Formality of callsign usage

Formally, every transmission has four sections:

  • starting callsigns “[receiver] de [sender]”
  • actual text e.g. “ur rst 599 599 = how cpi?”
  • ending callsigns “[receiver] de [sender]”
  • terminating prosign e,g. k or <sk>

The vHams never send <ar> or other prosigns, in this version. I understand <ar> is correct for initial exchanges, but this is a beginner practice tool.

When users prefer less formality, sometimes the starting callsigns or ending callsigns or both are omitted, apart from on the first and last transmissions.

The vHam will take its lead from the user. If you don’t use starting callsigns, then it won’t either. If you don’t use ending callsigns, it won’t either. When it says goodbye, it will use both starting and ending callsigns.

Example QSO

User vHam Comments
qrl?   user tries to connect
  k server says ‘bring it on!’
cq cq cq de ne7man ne7man ne7man k   user sends out CQ call. You can use as many CQs and Callsign repeats as you prefer.
  ne7man de q5rjs q5rjs q5rjs k hooray! q5rjs responds…
q5rjs de ne7man ur rst 5nn 5nn = q5rjs de ne7man k   user sends a made-up RST report
  ne7man de q5rjs ur rst 599 599 ne7man de q5rjs k q5rjs sends back a strong RST report
op hr is jimmy jimmy k   whoah! user has got bored of all this callsign formality, and just passes the info
  fb jimmy op hr is mohammad mohammad k vHam gives back his name, ignoring callsigns, too,
thanks mohammad = nice day = k   user just chats
  mni thx jimmy qth muscat muscat k Mohammad, q5rjs gives his location
vfb mohammad = qth is london london k   user gives location
  thnx jimmy from london fer the 5nn rpt k vHam confirms it has all the vital info.
q5rjs de ne7man mni thnx fer qso mohammad = hpe cuagn = 73 73 q5rjs de ne7man <sk>   user has info (q5rjs, Mohammad, Muscat, 599 rpt), so ends the QSO
  ne7man de q5rjs ok cuagn 73 73 ne7man de q5rjs <sk> vHam signs off with full formality. QSO is over and server connection is cleared.

To start another QSO, you must go back to “qrl?” and get reconnected. If you keep trying “cq de someone k”, no one will come back to you; you need to reconnect, because the vHams may all be busy by then, with other users.

QSO levels

The vHam has a number of levels in its QSO. You must complete a level before he/she will be happy to go further.

Firstly, it wants your callsign and an RST report. It won’t chat about the weather, or even it’s name and QTH, until it has a valid RST (and has sent one). As conditions can change during a QSO (even though this is pretend!), the vHam will ask again for RST every so often, and will give you an RST report from time to time.

Next, it wants callsign, RST, op name, and QTH. The extra details (op and qth) need to be swapped. You can send more than one of them at once. Breaking them up into chunks is best: “rst 599 5nn = my name is batman batman = qth batcave batcave k”

Once it’s had these, it will be happy to exchange details of rig, antenna, power. and local weather.

Once all these have been exchanged, it will run out of sensible conversation (in this version), and resort to sending you Mark Twain quotes, so you can practice your head copying.


  1. How do I correct my callsign/name/qth if I sent it wrong? Just send it again: “call is ne7man = name is batman = qth batcave k”
  2. How do I get a repeat of the vHam’s call/name/qth/rig/ant? Just ask them: “ur name pse? = ur op? = qth? = what is your rig pse?”
  3. Why does the vHam keep asking me how I copy?? It hasn’t received a valid RST report from you yet. Send it one: “rst 478 k”
  4. Why doesn’t the vHam understand my QTH as “orlando, fl” or my rig as “kenwood ts540g”? Because my programme is a bit lame, I’m afraid. Recognising double-word names, places and rig/ant descriptions is harder than just grabbing the following word. The programme doesn’t really understand which words ‘look’ like names or places or ham radio gear, yet. Sorry; real hams won’t have this problem, so just use a one-word description for now, OK? Using a slash, comma, or period without spaces would work, so you could say “qth orlando,fl = rig kenwood/ts540g = antenna folded/ k”
  5. How can I request a particular vHam? You can’t at the moment, sorry. It’s pot luck which one you get.
  6. I can do all this easily, now, so can you make it harder? No. It’s for beginners (like me). If this is easy, then get on the air, or try iCW, or Long Island CW Club, or CWOps.
  7. I’d like to send you a huge donation for your great work - how do I do that? You can’t. Try a Ham radio charity like, or buy some kit for a hard-up radio club, or build some useful software or hardware I can use. I benefit a lot from loads of free stuff on the Internet, and the advice of others, so this is my way of giving back, not getting paid. Thanks very much, though!