A complete wireless control solution for the ACOM RF amplifier, consisting of an ESP32-S3 hardware interface and a native macOS application.
┌─────────────────┐ RS-232 ┌─────────────────┐ WiFi ┌─────────────────-┐
│ ACOM │◄───────────────►│ ESP32-S3 │◄───────────────►│ macOS App or │
│ Amplifier │ 9600 8N1 │ Controller │ WebSocket │ WebAcomControl │
└─────────────────┘ └─────────────────┘ └─────────────────-┘
The ESP32-S3 acts as a bridge between the amplifier's serial protocol and modern network interfaces, providing real-time telemetry and control via WebSocket and REST APIs.
AcomControl is a native SwiftUI application providing professional monitoring and control of the ACOM amplifier.
-
Real-Time Monitoring — 10Hz WebSocket updates for live telemetry
- Forward/Reflected Power with graphical meters
- SWR with color-coded warnings (green/yellow/red)
- PA Temperature monitoring
- Current, Voltage, Frequency display
-
Amplifier Control
- Mode switching: Standby, Operate RX, Power Off
- Band selection: 160m through 10m
- Antenna switching (Ant 1 / Ant 2)
- Error display and clearing
-
Network Features
- Automatic device discovery via mDNS/network scan
- Manual IP connection
- ESP32 WiFi configuration from the app
- Automatic reconnection with exponential backoff
-
Modern Interface
- Native SwiftUI design
- Dark mode support
- Keyboard shortcuts
- Responsive layout
- macOS 13.0 (Ventura) or later
- Xcode 15.0+ (for building from source)
cd AcomControl
open AcomControl.xcodeproj
# Select your development team in Signing & Capabilities
# Press Cmd+R to build and run- Launch the application
- Click Discover to scan for ESP32 controllers, or
- Click Settings (⚙️) to enter an IP address manually
- Once connected, the status indicator turns green and telemetry begins streaming
The ESP32 firmware provides the hardware interface to the ACOM amplifier and exposes network APIs for remote control.
-
ACOM Protocol Implementation — Full support for the ACOM serial protocol
- Automatic telemetry parsing (message 0x2F)
- Command transmission with proper checksums
- Error code decoding
-
Network Interfaces
- WebSocket server (
/ws) for real-time bidirectional communication (available on port 80 of the ESP device IP) - REST API for status and control
- Server-Sent Events (
/api/telemetry) for streaming updates - Built-in web interface for browser-based monitoring
- WebSocket server (
-
WiFi Modes
- Station Mode — Connects to existing WiFi network
- AP Mode — Creates its own network when no credentials configured
- SSID:
AcomControl - IP:
192.168.4.1
- SSID:
| ESP32-S3 Pin | Connection |
|---|---|
| GPIO16 (RX) | ACOM RS-232 TX (via level shifter) |
| GPIO17 (TX) | ACOM RS-232 RX (via level shifter) |
| GND | RS-232 Ground |
Note: The ACOM uses RS-232 voltage levels (±12V). A level shifter (e.g., MAX3232) is required between the ESP32 (3.3V logic) and the amplifier.
| Endpoint | Method | Description |
|---|---|---|
/ws |
WebSocket | Real-time telemetry and commands |
/api/status |
GET | Current amplifier state (JSON) |
/api/mode |
POST | Set amplifier mode |
/api/band |
POST | Set operating band |
/api/wifi |
POST | Configure WiFi credentials |
/api/system |
GET | ESP32 system information |
{"command": "setMode", "mode": "standby"}
{"command": "setMode", "mode": "operateRx"}
{"command": "setMode", "mode": "powerOff"}
{"command": "setBand", "band": 7}
{"command": "setAntenna", "antenna": 1}
{"command": "clearErrors"}
{"command": "saveWiFi", "ssid": "MyNetwork", "password": "secret"}The ESP32 broadcasts JSON telemetry at 10Hz:
{
"connected": true,
"mode": "OPR/RX",
"modeCode": 96,
"band": "20m",
"forwardPower": 0,
"reflectedPower": 0,
"swr": 100,
"temperature": 298,
"inputPower": 0,
"current": 0,
"frequency": 14200,
"fanSpeed": 1,
"hvVoltage": 480,
"errors": []
}Units:
temperature— Kelvin (subtract 273 for Celsius)swr— Multiplied by 100 (e.g., 150 = 1.50:1)inputPower— Multiplied by 10 (e.g., 253 = 25.3W)hvVoltage— Multiplied by 10 (e.g., 480 = 48.0V)
The ESP32 firmware uses PlatformIO:
cd ACOMESP32
pio run # Build
pio run -t upload # Upload to connected ESP32
pio device monitor # Serial monitor (115200 baud)Further ESP32 documentation, including detailed setup and configuration, is available in the ACOMESP32 directory.
The system implements the ACOM serial protocol as documented in ACOM_Protocol.pdf:
- Baud Rate: 9600, 8N1
- Start Byte: 0x55
- Checksum:
256 - (SUM of bytes 0 to N-1) & 0xFF - Main Telemetry: Message 0x2F (72 bytes, sent automatically at ~10Hz)
- Commands: Message 0x81 (8 bytes)
MIT License — See individual component directories for details.
Use this code and the app at your own risk - damage to your hardware from use will not be my responsibility, you use this code and app at your own risk.