ESP32 Kenwood Band Data Interface

The Problem

I’ve had a Kenwood TS-990S for a good number of years, it’s a great rig but one thing that’s always struck me as odd is the lack of any kind of Band data output. Band data is often used for many station automation tasks, controlling filtering and switching antenna’s being two of the most common which is why the lack of Band data output on a flagship base station rig like the Kenwood TS-990S is in my opinion unusual.

In my case I have a requirement to control the 5B4AGN Band Pass filters I built some time ago and these require a Yaesu format BCD input for automatic filter selection.

The Solution

After spending far too long studying the available outputs from the TS-990S and chat GPT insisting that there was a band data port when there isn’t (Large Language Model AI’s are an exciting technology but they do seem to make things up occasionally), luckily the TS-990S still has a DB9 Serial port so I settled on using a micro controller to communicate with the rig using this and then output the BCD band data for use with the filters.

The Hardware

I could have  gone with any number of micro controllers such as one of the many Arduino’s, however I chose to use the ESP32-WROOM-32/ESP32 DevKit v1 (It’s overkill for this I know). This was primarily due to it having multiple hardware UARTs, plenty of power (way more than this project will ever need) and WiFi and Bluetooth should it ever be necessary to provide the band data to a computer or other device in the future. They’re also cheap and I happened to have a few of them laying around.

Additionally I’d need an RS-232 to TTL interface, I chose the MAX2323 as it performs the task excellently and can deliver the TTL output at 3.3v which the ESP32 requires saving the need for an additional level converter had I gone with the older but venerable MAX232. Whilst I ended up using a very tiny MAX2323 board in the final build, I used a larger MAX2323 board with pin headers and integral DB9 connector for prototyping.

The final circuit was very simple

I chose to use a female DB9 and cross the RX and TX pins within the box which would allow the use of a straight through serial cable. I also chose to use a 9 Pin DIN connector for the output to the BPF filters as this would mean I could use a standard 5 pin MIDI cable for the connections. I prefer off the shelf cables wherever possible as they’re almost always more robust than home brew ones.

I breadboarded the whole thing first in order to write the firmware and debug any issues.

The Firmware

The tricky part of this project isn’t the hardware though, this comes in the firmware.

I’d use UART2 for communication with the TS-990S which allows me to retain UART0 which is connected to the onboard Micro USB port for programming and debug output. I am aware of the Arduino based Kenwood band decoder firmware written by Ondrej Kolonicny OK1CDJ however I didn’t end up using this, the firmware I wrote was produced from scratch. Whilst I’m sure Ondrej’s code would be perfectly adequate in most situations, I wanted to ensure as much fault tolerance as possible with no specific power on sequence and the ability to recover from disconnections. The firmware also ensures that the transmit VFO is tracked so when switching to VFO B for TX the band data output follows accordingly.

I’m very please with what I produced, the full code for which can be found here on GitHub.

The Case

I’m a firm believer in every project like this having at least a functional if not nice case. I’m lucky enough to have a Bambu Labs 3D printer so a printed case seemed the way to go. It would have been nice to house everything in a metal case but that wasn’t really an option for me. Printing the case would also allow me to include all the necessary cut outs for the connectors along with the stand-offs for the ESP32 to be mounted on (although I ultimately ended up not using these and drilling holes for metal stand-offs instead).

I’m terrible at 3D modelling but the final design was at least functional and I’m mostly happy with it.

The Final Interface

Overall I’m very happy with the final product. It works well and is very reliable and tolerant of cable disconnections, unexpected rig power off’s etc.



The Parts List

For anyone wanting to reproduce this project, below is the full parts list

ESP32 Devkit v1 (ESP32-WROOM-32) – Amazon UK
Mini MAX2323 RS232 to TTL Board – Amazon UK
5 Pin DIN Sockets – Amazon UK
MAX2323 Board suitable for prototyping – Amazon UK
Straight Through RS-232 Cable – Amazon UK
5 Pin MIDI Cable – Amazon UK
Panel Mount Micro USB Cable – Amazon UK

GitHub Link to Firmware

Additional Thoughts

Other Kenwood Radio’s

Whilst this project was developed primarily for the TS-990S, this should work just as well for other Kenwood radios such as the TS-590, the old shack in a box TS-2000 or indeed any that have a regular DB9 Serial port for CAT control and use the standard Kenwood CAT protocol.

Sniffing the CAT Protocol

The TS-990S has the advantage of having two serial ports, one is the physical DB9 I’m using for this interface, the other being a virtual one over the USB connection. For radios with only a single DB9 serial port it should be possible to modify this project to provide an in and out serial port and to “sniff” the communication with the computer. This would still allow CAT control as well as handling the band decoding.