Morse-it BLE Hardware CW Key

*Link to the more complete project

This project utilizes (at minimum):

  1. An iOS device with Bluetooth LE capabilities
  2. Morse-it
  3. Adafruit Feather 32u4 Bluefruit LE
  4. And a physical CW key of your choice.
  5. Various bits of wire and a micro USB cable
  6. Soldering iron and solder, wire strippers and other basic electronics tools.


  1. Update the firmware on Feather
    1. Easiest way is to download BlueFruit Connect
    2. Open the app, find the “Adafruit Bluefruit LE” device and click the “Connect” button
    3. Scroll down the list, find the “Update” menu option and install the latest firmware
    4. Download and install the Arduino IDE
      Firmware Update
  2. Follow the Adafruit Arduino setup guide to add the Adafruit boards to the IDE.
  3. Connect the board to the computer with a micro USB cable
  4. Create new project in the Arduino IDE
  5. Copy the 3 files from the project into your new project.
  6. Compile the project
  7. Upload the project to the board
    Arduino IDE
  8. Wire the CW key to the board. In my case I used an old mobile 3.5 mm headphones adapter so I could quickly move the key between the Bluetooth module and the radio. I used a 4 pin Dupont connector for quick connection to the breadboard. If you want you can mount the feather on a breadboard. You can order the board with headers already installed, I chose to solder the header pins myself.
    1. GND – Common on the CW key
    2. PIN A0 – Dit( . ) for iambic keys or for straight keys
    3. PIN A1 – Dah( _ ) for iambic keys
      * I’ve updated the code to move from pins A0 and A1 to A4 and A5 so that the unit can be mounted in a case.
      Feather Wiring
  9. On your iOS device, go to “Settings” -> “Bluetooth” and discover “MorseKey”
  10. Open Morse-it, go the “Tap” tab and test sending.

I’ve programmed the Feather so that it sends only the default key mappings. I haven’t bothered to measure latency as it is imperceptible. If you do experience timing issues, toggle the “Reduce delays” option in the Settings>Global>KeyType, depending on how you send, this can improve the decode. 

Other uses include using it a logging devices and checking the quality of your sending while on the air.

To use a Straight Key:

In Morse-It, open “Settings” -> “Key Type” and select “Straight Key”.  This sets up Morse-It to work with a straight key.  Then go back one menu level and select “Hardware Interface” -> “Straight Key” under the “Keyboard” option at the bottom ensure that the “Enabled” toggle switch is green and then select “- Key” and set it to “Left Arrow”.  This is the standard configuration, if that doesn’t work, change “- Key” to “Right Arrow”. 

M7BVC tests out the finished project.

A huge thanks to the work done by Chris Young on his tutorials and GitHub page. This project is adapted and modified from his original work and is licensed under Creative Commons ShareALike.


  1. Joshua, great write up. I had ordered the ipac board to use with Morse-it. But now just ordered the Bluefruit LE. Thanks for putting this together and sharing it.

  2. Built it, thanks for the write-up! This is a nice little project.

    You mentioned that the delay is imperceptible, but I wonder if I’m doing something wrong.. Trying this at around 20 wpm on a paddle, it is noticeably throwing me off. I’ve double checked that “reduce delays” is enabled on Morse-it.

    Heads up for anyone else building: It looks like the latest source code has moved dit and dah from A0 and A1 to A4 and A5.

    1. Hi Mike,
      Thanks for your comment. I’m wondering what iPad hardware and software you are running? I’ve tested on an iPad Pro running iOS 14.3 with Morse-it version 9.2.2. And yes, I did move the pinouts to ease a case design which I hope to write a post about soon.

  3. Absolutely a wonderful and fun project. Marvel was quick to reply and help me when I didn’t read deep enough into the directions. He was a great help and pleasant to interact with. Now I have no excuses to not complete my CW training. The fact that I can put on my Bluetooth ear pods while connected to the paddles makes it all the better. I can bang away and not bother anyone else. Looking forward to the project box, though it looks pretty cool with the flashing lights and wires. I did add the battery for more portable use. I also used a stereo plug on the breadboard for direct connection without an adapter.

  4. Great little project. I’ve had cw key input for my iPhone in mind for some time and recently successfully developed a system using the Leonardo Beetle plugging into a camera adaptor. This is the cheapest method of cw input, and particularly if you already have the camera adaptor, although it lacks the convenience of BT.
    So i have put together the Adafruit and managed to get it working but am finding that the system is too keen to process the next dot or dash, which puts excessive timing constraints on key release, almost like its buffering. For example, if holding down the key for 2 dahs a 3rd dah will be produced even when release is close to the start time of the previous dah. And same with the dits, although the timing is obviously more critical with them anyway because they are shorter. I’m keying at 20wpm btw.
    I don’t have this issue with my Beetle version, nor when I’m in Tap mode using the phone’s screen. I’m wondering whether it’s in the programming. Any thoughts?
    Peter vk2cpd

    1. Hi Peter,
      Thanks for building the key. I’m wondering what iOS device model (iPhone 8, etc) and OS version (14.3, etc) you are running? Also, in Morse-It, under Settings -> Key Type -> Reduce Delays should be off, could please confirm that for me too?

      Josh M0WYP/N9JDM

      1. Hi Josh
        IPhone is XR with the latest update v 14.2. Also tried it on my iPad Air which is 6 or 7 years old running v 12.6. Same issue.
        So I completely rewrote the program myself. No problems.
        I find that turning on the Delay setting helped a little when running your version, but what was even better was moving the de-bounce delay a line lower so that it was inside the while (readSwitches()) loop.
        I find this situation intriguing. Keying, particularly at faster speeds, is so sensitive. Even over BT its affected because of the very slight delay in transmission. It changes the feel just a little.
        Anyway, all this is academic if no one else has experienced any issue. And I’m ok too because of the rewrite. If I get time I may further investigate why i was getting the problem, and whether it is related to the programming.
        All the best
        Peter VK2CPD

        1. Hi Peter,
          Thanks for the update. I’m looking into it. Also, there was a change in iOS back when version 14 was released that allowed for continuous key presses (iOS <14 Bluetooth key presses were only sent once, even if held), therefore, no need to debounce. I'm working on updating the existing code to take advantage of that.
          Josh M0WYP/N9JDM

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.