Ai-Thinker RD-03D mmWave Radar Sensor
The RD-03D is a versatile 24GHz radar sensor for multi-person detection and tracking. It supports UART data output and is well-suited for automation, smart buildings, and robotics.

On this page
RD-03D pinout
The RD-03D has 4 pins: VCC (5V), GND, and UART TXD/RXD for multi-target tracking.
| Pin | Type | Description | Notes |
|---|---|---|---|
| VCC | Power | Power supply input (5V). Requires stable regulated 5V supply. | Use external 5V regulator or ESP32 5V pin. |
| GND | Power | Ground connection. Connect to ESP32 ground. | Common ground required for UART communication. |
| TXD | UART | UART transmit pin. Outputs multi-target tracking data. | Connect to ESP32 RX pin (GPIO 16). 3.3V tolerant. |
| RXD | UART | UART receive pin. Accepts configuration commands. | Connect to ESP32 TX pin (GPIO 17). |
24GHz mmWave radar for multi-target tracking
Detection range: 0.5 to 8 meters
Field of view: ±60° horizontal
Tracks up to 3 targets simultaneously
Provides distance, speed, and position data
Binary UART protocol at 256000 baud (default)
UART signals are 3.3V compatible
Wiring the RD-03D to ESP32
To interface the RD-03D with an ESP32, connect VCC to 5V, GND to ground, TXD to GPIO 16 (ESP32 RX), and RXD to GPIO 17 (ESP32 TX).
| RD-03D pin | ESP32 pin | Purpose |
|---|---|---|
| VCC | 5V | Power supply (5V). Use ESP32 5V pin or external regulated supply. |
| GND | GND | Ground connection. |
| TXD | GPIO 16 (RX2) | Radar transmits tracking data to ESP32. |
| RXD | GPIO 17 (TX2) | ESP32 sends commands to configure radar. |
UART baud rate: 256000 bps (8N1 format)
UART signals are 3.3V compatible - direct connection to ESP32 safe
Use UART2 (GPIO 16/17) to avoid USB serial conflicts
Tracks up to 3 human targets simultaneously with distance/speed data
Binary protocol - use RD-03D library or parse manually
Mount with clear line of sight to detection area
For testing: use USB-to-Serial adapter to view raw output
Firmware updates may be available - check manufacturer website
Detection range: 0.5-8m depending on target size and environment
RD-03D code examples
RD-03D Arduino example
Copy// Basic example for RD-03D UART output
#include <HardwareSerial.h>
HardwareSerial RadarSerial(2);
void setup() {
Serial.begin(115200);
RadarSerial.begin(256000, SERIAL_8N1, 16, 17);
}
void loop() {
while (RadarSerial.available()) {
Serial.write(RadarSerial.read());
}
}This example connects the RD-03D to ESP32 via UART2 (GPIO16/17) and outputs all received bytes to the Serial Monitor. The data consists of binary frames which must be parsed according to the RD-03D protocol. For real-time tracking and distance/speed parsing, refer to decoding routines at Electronic Clinic.
RD-03D ESP-IDF example
Copy#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
// Rd-03 on UART2: module TX -> GPIO16 (RX2), RX -> GPIO17 (TX2), 115200 baud
#define RADAR_UART UART_NUM_2
void app_main(void)
{
uart_config_t config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
};
ESP_ERROR_CHECK(uart_param_config(RADAR_UART, &config));
ESP_ERROR_CHECK(uart_set_pin(RADAR_UART, 17, 16, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
ESP_ERROR_CHECK(uart_driver_install(RADAR_UART, 1024, 0, 0, NULL, 0));
uint8_t buf[64];
while (1) {
int len = uart_read_bytes(RADAR_UART, buf, sizeof(buf), pdMS_TO_TICKS(200));
if (len > 0) {
for (int i = 0; i < len; i++)
printf("%02X ", buf[i]);
printf("\n");
}
}
}There is no established library for the Rd-03, so this example reads its UART stream (115200 baud on UART2) and prints each burst as hex - decode it with the frame tables in Ai-Thinker's Rd-03 serial protocol manual.
RD-03D ESPHome example
Copyuart:
id: uart_bus
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 256000
rd03d:
uart_id: uart_bus
sensor:
- platform: rd03d
target_1:
x:
name: "Target 1 X"
y:
name: "Target 1 Y"
speed:
name: "Target 1 Speed"
distance:
name: "Target 1 Distance"ESPHome has native Rd-03D support: the core rd03d component parses the radar's multi-target stream over UART2 at its fixed 256000 baud, tracking up to three targets - each target_N exposes X/Y position, speed and distance entities. Add target_2 and target_3 blocks for the other slots.
RD-03D PlatformIO example
Copy[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200#include <HardwareSerial.h>
HardwareSerial RadarSerial(2);
void setup() {
Serial.begin(115200);
RadarSerial.begin(256000, SERIAL_8N1, 16, 17);
}
void loop() {
while (RadarSerial.available()) {
Serial.write(RadarSerial.read());
}
}This PlatformIO sketch reads raw binary output from the RD-03D sensor using UART2 and relays it to the Serial Monitor. Use a parser to decode target coordinates, speed, and distance.
RD-03D MicroPython example
Copyfrom machine import UART
import time
# Rd-03: module TX -> GPIO16 (RX2), RX -> GPIO17 (TX2), 115200 baud
uart = UART(2, baudrate=115200, tx=17, rx=16)
while True:
data = uart.read()
if data:
print(" ".join("{:02X}".format(b) for b in data))
time.sleep(0.2)There is no established library for the Rd-03, so this example reads its UART stream (115200 baud on UART2) and prints each burst as hex - decode it with the frame tables in Ai-Thinker's Rd-03 serial protocol manual.
RD-03D specifications
About the RD-03D
This page documents Ai-Thinker’s RD-03D, the multi-target tracking member of Ai-Thinker’s radar lineup - not to be confused with the simpler base RD-03 despite the near-identical name. The two share a product family but little else: RD-03D uses the S5KM312CL radar chip with a 1T2R antenna and needs a stable 5V supply, while the base RD-03 runs on 3.0-3.6V through a different S3KM1110 chip and reports only single-target presence, trading multi-target tracking for a longer 10-meter range on wall mounts. It streams a binary multi-target report over UART at a default 256000 baud, tracking up to 3 targets at once - both figures straight from Ai-Thinker’s specification and mirrored by ESPHome’s native rd03d component.
What the RD-03D does deliver, per Ai-Thinker’s own specification, is a radar that distinguishes movement, micro-motion and rest rather than needing constant motion - though ESPHome’s rd03d documentation notes that because its multi-target mode relies on Doppler shift, a target that stops moving entirely can drop out of the X/Y/speed stream it reports. Range runs to 8 meters across a ±60 degree horizontal by ±30 degree vertical field, slightly farther and wider than the LD2450, the only other UART radar in this list with native ESPHome multi-target tracking.
At a similar price to the RD-01, the RD-03D is the pick when a project needs per-person coordinates rather than a single presence flag; the RD-01’s built-in Wi-Fi/BLE and lower-voltage operation make more sense for a simple, standalone occupancy sensor instead.
RD-03D troubleshooting
No Serial Output
›
Issue: ESP32 doesn't receive any data.
Verify TXD/RXD wiring. Ensure the baud rate is set to 256000 (the RD-03D default). Use a USB-to-Serial adapter to confirm data output manually.
Inaccurate or Frozen Data
›
Issue: Detected target positions or speeds do not change.
Ensure there is line-of-sight movement in the detection area. Check for firmware version compatibility and reset the device if needed.
Where to buy the RD-03D

Resources
Similar sensors





