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
- GPS provides position
- ESP32 encodes position into APRS packet (AX.25 frame with AFSK 1200 baud)
- DRA818V transmits the packet on 144.390 MHz
- 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
- Record contest exchanges as WAV files on your computer
- Upload via ESP32 web interface (drag-and-drop)
- During contest: press F1-F4 buttons → ESP32 keys PTT, plays message, releases PTT
- 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.
Reader field notes — share yours
Log in to share your field notes and photos.