ESP32 Ham Radio Projects: Beyond the Blink Sketch

Practical ESP32 projects for ham radio: CW keyer, antenna switch controller, band decoder, APRS tracker, remote station monitor, and more with code examples.

· 6 min read · By HamPost Editorial Team

Part of our guide: Raspberry Pi Ham Radio Projects: 10 Things You Can Build This Weekend

The ESP32 is a $5 microcontroller with WiFi, Bluetooth, dual cores, 12-bit ADC, DAC, and enough GPIO to control a small radio station. For ham radio projects, it fills a gap between "Arduino is too limited" and "Raspberry Pi is overkill." It runs on 3.3V, fits in your palm, and connects to your home network without additional hardware.

Here are projects I've built or seen built that solve real ham radio problems.

Project 1: WiFi-Enabled Band Decoder and Antenna Switch

The Problem

You have multiple antennas and want automatic switching when you change bands. Commercial band decoders cost $100-200.

The Solution

ESP32 reads your radio's band data (via CI-V serial, CAT, or BCD output) and activates relays for the appropriate antenna.

Hardware

  • ESP32 DevKit ($5)
  • 8-channel relay module ($8)
  • Level shifter for radio interface (if needed)
  • 12V power supply

How It Works

// Simplified band decoder logic
void loop() {
  int band = readBandFromRadio(); // CI-V parse or BCD read
  switch(band) {
    case BAND_160M: selectAntenna(ANT_INVERTED_L); break;
    case BAND_80M:  selectAntenna(ANT_DIPOLE_80); break;
    case BAND_40M:  selectAntenna(ANT_DIPOLE_40); break;
    case BAND_20M:  selectAntenna(ANT_YAGI); break;
    case BAND_15M:  selectAntenna(ANT_YAGI); break;
    case BAND_10M:  selectAntenna(ANT_YAGI); break;
    default:        selectAntenna(ANT_DUMMY_LOAD); break;
  }
  // Serve web interface for manual override
  server.handleClient();
}

WiFi Bonus

The ESP32 serves a web page showing current band, selected antenna, and allows manual override from your phone. No physical access needed to change antenna mapping.

Project 2: Iambic CW Keyer with Memory

The Problem

A quality CW keyer with memories costs $100+. You want one that also sends contest exchanges and integrates with your logger.

The Solution

ESP32 as an iambic keyer with:

  • Adjustable speed (5-50 WPM)
  • Message memories (8 programmable via web interface)
  • USB serial for computer keying from N1MM/logging software
  • OLED display showing speed and current message
  • Bluetooth option for wireless paddle connection

Hardware

  • ESP32 DevKit
  • 0.96" OLED display (I2C, $4)
  • 3.5mm stereo jack for paddle input
  • Transistor + optocoupler for radio keying output
  • Rotary encoder for speed adjustment

Key Code Concepts

// Iambic Mode B keying
void processKeyer() {
  bool ditPaddle = !digitalRead(DIT_PIN);
  bool dahPaddle = !digitalRead(DAH_PIN);
  
  if (ditPaddle && !sending) {
    sendDit();
    if (dahPaddle) queueDah(); // Iambic squeeze
  }
  if (dahPaddle && !sending) {
    sendDah();
    if (ditPaddle) queueDit(); // Iambic squeeze
  }
}

void sendDit() {
  keyDown(ditDuration);
  keyUp(ditDuration); // Inter-element space
}

The web interface lets you program messages: "CQ CQ CQ DE W3ABC W3ABC K" — press one button and it sends perfectly-timed CW.

Project 3: Remote Station Monitor

The Problem

You want to know your station's status when you're away: temperature, SWR, power status, antenna position.

The Solution

ESP32 with sensors reporting to your phone via MQTT or a simple web dashboard.

Sensors

  • DS18B20 temperature sensors ($2 each): Monitor amplifier, shack, and outdoor antenna box temperatures
  • ACS712 current sensor ($3): Monitor 12V line current (is the radio drawing normal power?)
  • Voltage divider on analog input: Monitor battery/power supply voltage
  • SWR bridge output: Connect a voltage from your SWR bridge's detector to an ADC pin. Continuous SWR monitoring.
  • Door/window sensors: Reed switches on shack door for security

Data Reporting

void reportStatus() {
  float shackTemp = readTemp(SHACK_SENSOR);
  float ampTemp = readTemp(AMP_SENSOR);
  float voltage = readVoltage();
  float current = readCurrent();
  
  // Send to MQTT broker (or Telegram bot, or email)
  mqtt.publish("station/temp/shack", String(shackTemp));
  mqtt.publish("station/temp/amp", String(ampTemp));
  mqtt.publish("station/power/voltage", String(voltage));
  mqtt.publish("station/power/current", String(current));
  
  // Alert if abnormal
  if (ampTemp > 60.0) sendAlert("Amp overheating!");
  if (voltage < 11.5) sendAlert("Battery low!");
}

Home Assistant integration: ESP32 speaks MQTT natively, integrates with HA dashboards for logging, graphing, and automation.

Project 4: APRS Tracker (Mobile/Portable)

The Problem

Dedicated APRS trackers cost $100-300. You want position reporting for a fraction of the cost.

The Solution

ESP32 + GPS module + small VHF transmitter module (SA818 or DRA818V) = complete APRS tracker.

Hardware

  • ESP32
  • Neo-6M GPS module ($5)
  • DRA818V VHF transceiver module ($15) — transmits on 144.390 MHz
  • Audio amplifier for AFSK modulation
  • Small antenna (1/4 wave whip for 2m)

How It Works

  1. GPS provides position
  2. ESP32 encodes position into APRS packet (AX.25 frame with AFSK 1200 baud)
  3. DRA818V transmits the packet on 144.390 MHz
  4. Digipeaters and iGates relay to aprs.fi

Total cost: ~$30. Runs on a USB battery pack for hours.

Project 5: Automatic Antenna Tuner Controller

The Problem

You have a manual L-network or T-network tuner and want to add automatic memory tuning.

The Solution

ESP32 drives stepper motors attached to the tuner's variable capacitors and inductor switch. It memorizes settings per frequency and recalls them automatically when you change bands.

Hardware

  • ESP32
  • 2-3 stepper motors (28BYJ-48, $3 each) with ULN2003 drivers
  • Mechanical coupling to tuner controls (3D-printed gears or direct-drive)
  • SWR sensing circuit (directional coupler + detector diodes)

Algorithm

1. Read current frequency from radio (CI-V)
2. Look up stored tuner settings for this frequency (±10 kHz)
3. If found: move steppers to stored positions, verify SWR < 1.5:1
4. If not found: run automatic tune cycle
   a. Sweep inductor settings
   b. At each inductor position, sweep capacitor(s)
   c. Find minimum SWR
   d. Store positions for this frequency
5. Report results on web interface

Project 6: Contest Voice Keyer

The Problem

Contest voice keyers (DVK) in software require the computer to be running specific software. Hardware DVKs cost $80-150.

The Solution

ESP32 with audio DAC plays pre-recorded messages and keys PTT. Messages uploaded via web interface (WAV or MP3).

Hardware

  • ESP32 (with built-in DAC on GPIO25/26)
  • Audio output circuit (op-amp buffer for clean audio)
  • PTT switching transistor
  • SD card module for message storage (optional, can use SPIFFS)
  • 4 buttons for message triggers

Workflow

  1. Record contest exchanges as WAV files on your computer
  2. Upload via ESP32 web interface (drag-and-drop)
  3. During contest: press F1-F4 buttons → ESP32 keys PTT, plays message, releases PTT
  4. Timing adjustable: PTT lead time, message delay, hang time

Bonus: Serial protocol compatible with N1MM/logging software voice keyer commands.

Project 7: Power/SWR Meter with Logging

The Problem

You want a permanent inline power/SWR display that logs data over time.

The Solution

ESP32 reads forward and reflected power from a directional coupler (Stockton bridge or Tandem Match) and displays on OLED + logs to internal storage + serves web dashboard.

Features

  • Real-time power and SWR display
  • Peak hold (shows maximum power during transmission)
  • Historical graph (power over last hour/day)
  • SWR alarm (alert if SWR exceeds threshold — antenna problem!)
  • Web dashboard accessible from any device on your network

General ESP32 Tips for Ham Projects

Power Supply

  • ESP32 runs on 3.3V logic but most dev boards accept 5V via USB or VIN
  • For battery projects: ESP32 deep sleep draws ~10µA, wakes periodically
  • Don't power from the same supply as your radio — shared ground loops cause RFI

RFI Hardening

  • The ESP32 itself can radiate 2.4 GHz WiFi interference — keep it away from sensitive receivers
  • Decouple all power rails with 100nF + 10µF capacitors close to the ESP32
  • Use ferrite beads on GPIO lines running to external circuits
  • Shield the ESP32 in a grounded metal enclosure for RF-dense environments
  • WiFi can be disabled in code when not needed (reduces emissions and power draw)

Programming

  • Arduino IDE with ESP32 board package: easiest start
  • PlatformIO (VS Code): better for complex projects
  • Libraries: ESPAsyncWebServer (web interface), ArduinoJson (config files), PubSubClient (MQTT)

Connectivity

  • WiFi: connect to home network for web interface/MQTT/NTP time
  • Bluetooth: wireless paddle, wireless PTT foot switch
  • Serial: direct connection to radio CAT/CI-V
  • I2C: displays, sensors
  • SPI: SD cards, fast displays

Start With One Project

Order an ESP32 dev board ($5 on Amazon/AliExpress). Pick the project that solves your most annoying ham radio problem. Build it on a breadboard first. When it works, solder it onto perfboard and put it in an enclosure.

The ESP32 isn't just for IoT gadgets and LED strips. With WiFi, dual ADCs, DAC, and plenty of GPIO — it's a ham radio station controller waiting to be programmed.

Read next Raspberry Pi as a Ham Radio Computer: Projects Beyond the Hotspot Raspberry Pi ham radio projects beyond DMR hotspots. APRS digipeater, FT8 station, SDR server, contest logger, and complete shack computer builds.

Frequently asked questions

Why choose an ESP32 over an Arduino or a Raspberry Pi for ham projects?
The ESP32 sits between them. It brings WiFi, Bluetooth, dual cores, a 12-bit ADC and a DAC for about $5, which an Arduino lacks, without the operating system overhead and power draw of a Raspberry Pi. For a station controller that needs network access and a handful of analogue inputs, it is the better fit.
Will an ESP32 cause interference to my radio?
It can. The onboard 2.4 GHz WiFi radiates, so keep the board away from sensitive receivers and disable WiFi in code when a project does not need it. Decouple the power rails with 100nF and 10uF close to the chip, fit ferrite beads on GPIO lines leaving the board, and use a grounded metal enclosure in an RF-dense shack.
Can I power the ESP32 from my radio power supply?
Avoid it. Sharing a supply with the radio creates ground loops that show up as RFI. Give the microcontroller its own supply, or run it from USB or a battery pack.
How much does an ESP32 APRS tracker cost to build?
About $30 in parts: the ESP32 itself, a Neo-6M GPS module around $5, a DRA818V VHF module around $15, an audio stage for AFSK modulation and a quarter-wave whip. A commercial tracker runs $100-300, and the homebuilt version runs for hours from a USB battery pack.
Which development environment should I use?
Start with the Arduino IDE and the ESP32 board package, which is the quickest route to a working sketch. Move to PlatformIO under VS Code once projects grow. Useful libraries are ESPAsyncWebServer for the web interface, ArduinoJson for config files and PubSubClient for MQTT.
Do I need to solder to get started?
Not at first. Build on a breadboard and confirm the project works, then move it to perfboard and into an enclosure. Some projects such as an antenna switch need only a relay module and jumper wires to prove the concept.

Put it into practice

Reader field notes — share yours

Log in to share your field notes and photos.