Compact 24 GHz FMCW radar presence sensor for reliable human/motion detection. Works in all lighting, senses micro-motion (breathing/movement) where PIR fails, and offers a digital OUT pin plus UART for advanced tuning. Ideal for smart lighting, HVAC occupancy control, security triggers and IoT projects with ESP32/Arduino.
Radar Module Pin → Microcontroller (example: ESP32) ----------------------------------------------- VCC → 3.3V or 5V (confirm marking) GND → GND (common ground) OUT → Digital input (e.g. GPIO14) TX → MCU RX (optional, UART) RX → MCU TX (optional, UART) Notes: • Confirm module voltage before powering. • Tie grounds between radar and MCU. • Keep connection wires short (<30 cm) for reliable signalling.
Tip: use a USB extension cable or PCB standoff to position the module away from metal and USB 3.0 ports for better performance.
Minimal setup to get presence into Home Assistant quickly. Wire OUT → GPIO14 (or change pin).
LD2410 VCC → ESP32 3.3V / 5V (check module marking)
LD2410 GND → ESP32 GND
LD2410 OUT → ESP32 GPIO14
esphome:
name: radar_presence_quickstart
platform: ESP32
board: esp32dev
wifi:
ssid: "YOUR_SSID"
password: "YOUR_PASSWORD"
logger:
api:
ota:
binary_sensor:
- platform: gpio
name: "Radar Presence"
pin:
number: GPIO14 # change to your wiring
mode: INPUT
inverted: false # set true if output is active LOW
device_class: occupancy
filters:
- delayed_on: 100ms
- delayed_off: 500ms
If behavior is inverted, use inverted: true. For advanced tuning use the UART section below.
Full ESPHome example that reads ADC/UART or digital OUT and includes debounce & timer logic. Change pins/calibration to match your hardware.
esphome:
name: radar_presence
platform: ESP32
board: esp32dev
wifi:
ssid: "YOUR_SSID"
password: "YOUR_PASSWORD"
logger:
api:
ota:
binary_sensor:
- platform: gpio
name: "Radar Presence"
pin:
number: 14 # change to wiring
mode: INPUT
inverted: false
filters:
- delayed_on: 100ms
- delayed_off: 1000ms
device_class: occupancy
# Optional: expose raw UART lines as text sensor for advanced parsing
uart:
id: uart_radar
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 115200
text_sensor:
- platform: uart
name: "Radar UART Raw"
id: radar_uart_raw
on_value:
then:
- logger.log:
format: "RADAR UART: %s"
args: [ '!' + id(radar_uart_raw).state ]
Use Home Assistant automations to act on UART content or create ESPHome lambdas to parse messages into sensors.
Standalone sketch: reads digital OUT and prints status to serial. Suitable for initial testing and integration with relay control.
Radar VCC → ESP32 3.3V / 5V (check)
Radar GND → ESP32 GND
Radar OUT → ESP32 GPIO14
/*
HLK-LD2410 / LD2410 — basic presence read example
OUT -> GPIO14
*/
const int PRESENCE_PIN = 14; // change if needed
const int LED_PIN = 2;
void setup() {
Serial.begin(115200);
pinMode(PRESENCE_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.println("Radar presence test starting...");
}
void loop() {
int state = digitalRead(PRESENCE_PIN);
if (state == HIGH) {
Serial.println("Presence detected!");
digitalWrite(LED_PIN, HIGH);
} else {
Serial.println("No presence");
digitalWrite(LED_PIN, LOW);
}
delay(500);
}
If OUT is active-LOW invert the test or use INPUT_PULLUP and inverted logic.
Use UART for telemetry, sensitivity tuning and advanced diagnostics. Always inspect raw output before sending commands.
Radar TX → MCU RX (e.g. GPIO16)
Radar RX → MCU TX (e.g. GPIO17)
Radar VCC → 3.3V or 5V (confirm)
Radar GND → MCU GND
Note: Most modules use 3.3V UART. Use level shifter if module is 5V.
/* Radar UART diagnostic — ESP32 Serial1 */
#include <HardwareSerial.h>
HardwareSerial RadarSerial(1);
const int RADAR_RX = 16; const int RADAR_TX = 17;
const unsigned long BAUD = 115200;
void setup() {
Serial.begin(115200);
RadarSerial.begin(BAUD, SERIAL_8N1, RADAR_RX, RADAR_TX);
Serial.println("Radar UART diagnostic started");
}
void loop() {
while (RadarSerial.available()) {
Serial.write(RadarSerial.read());
}
// Example send (illustrative only) — replace with documented command:
// RadarSerial.print("SET SENS 3\n");
delay(200);
}
esphome:
name: radar_uart
platform: ESP32
board: esp32dev
uart:
id: uart_radar
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 115200
logger:
api:
ota:
text_sensor:
- platform: uart
name: "Radar UART Raw"
id: radar_uart_raw
on_value:
then:
- logger.log:
format: "RADAR UART LINE: %s"
args: [ id(radar_uart_raw).state ]
Safety: DO NOT send unknown binary frames. If unsure, share a sample of raw UART output and we can help parse commands.
LD2410, HLK-LD2410C, 24GHz radar sensor, human presence sensor, room presence, ESP32 radar, ESPHome LD2410, occupancy automation, Home Assistant sensor.
Ready to add to your automation or IoT project — order now.