Library: CAT (computer aided transceiver) control of Yaesu FT-857D ham radio

Hi all,

After many hours of work, I am ready to release my FT-857D CAT control library for the Arduino IDE.
This library allows the user to control various functions of the radio via serial connection and the CAT control (computer aided transceiver) protocol.
I looked extensively for a library, or even an example sketch which could help me get started but came up empty. I then decided to tackle this challenge and provide a library to encourage other hams to interface their Arduino to their Yaesu (or other) radios.

Please visit my website to download the library, or for additional information (including command structure):

As an example, here is a simple sketch which makes use of the FT857D library:

  Created:  2012.08.16
   Author:  James Buck, VE3BUX

  If you use this code and / or the associated library, all I ask is that you "give a nod" by making a small mention
  in your code's documentation section. I've worked hard on getting this working, so a little recognition is appreciated. :)


  This example sketch demonstrates how to use the FT-857D library to control a Yaesu FT-857D radio by calling various commands.
  Attach your radio's CAT interface to the following arduino pins to begin:

    Radio CAT port GND -> Arduino GND
    Radio CAT port TX  -> Arduino pin 3
    Radio CAT port RX  -> Arduino pin 2

  If once you compile and upload the code, you are unable to see the lock icon on the radio's LCD display, try reversing
  pins 2 and 3. It may be necessary to power down the radio and to reset the Arduino prior to powering the radio back on.


#include <SoftwareSerial.h>
#include "FT857D.h"     // the file FT857D.h has a lot of documentation which I've added to make using the library easier

FT857D radio;           // define "radio" so that we may pass CAT commands
void setup() {
  radio.begin(9600);    // as with Serial.begin(9600); we wish to start the software serial port
                        // so that we may control a radio via CAT commands

void loop() {         
  int dly = 500;            // delay for x milliseconds between commands

  radio.lock(false);        // unlock the radio's controls
  radio.setMode("FM");      // set mode to FM
  radio.setMode("pkt");     // set mode to PKT (note these mode names are NOT case sensitive!)
  radio.setFreq(1407000);   // set VFO frequency to 14.070MHz
  radio.lock(true);         // lock the radio's controls
  delay(60000);             // delay for one minute

Fantastic work!

I don't have an FT857, I do have some of their other rigs though (mobile & handhelds).

It's also great to see a fellow ham on here!

Cheers & 73 de Stephanie va3uxb

Awesome work. I have ICOMs. Will have to come up with a few projects.

It's a very nice job James!!! 8)

Hello everyone, I am newbie with Arduino and I have a question? Why with Arduino LEONARDO the command “radio.getFreqMode ()” always returns me the number 166 666 665 even when the radio (FT857d) is connected? Thanks in advance for the answer …

Vy 73 de Luigi IZ7PDX

When the library reads the frequency and mode data from the rig, it does not check to see if the data are valid. If the rig is not connected, the library reads four bytes anyway and it will get ff ff ff ff (hex) for the frequency (whereas a valid value would be e.g. 14 02 50 00). The code which converts this to a frequency treats this data as if it were valid hex digits and the result of converting that is 166 666 665. If you get that value when you connect your rig, then it isn't wired properly.


Thanks for the reply Pete. I assumed something like that, but the connections are correct. The test was done with Arduino Leonardo but then I tried to connect the Arduino One and everything is ok. So I think that the reading of frequency conflicts with Leonardo ... Am I wrong?

Link video on Youtube :

Watch this video, how can I divide the frequency digits with periods and commas? To display the operating mode (USB-LSB-AM-FM-CW..) What should I do? Those squares on the display are really bad!

you have to be patient with me, I am a novice! :grin: best regards ... Luigi IZ7PDX

You'll have to post your code (in code tags using the # icon)