ESPhome - how to use the HLK-LD2410S?

BTW, I tried this by cloning that repo and using the yaml board config, changing the device to an nodemcu-32s (which appears to have the same pinouts, etc, and which I have successfully used the LD2410 [non-S] module).

It crashes on startup attempting to initialize the UART:

[I][app:029]: Running through setup()...
[C][uart.arduino_esp32:077]: Setting up UART...
E (5345) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (5345) task_wdt:  - loopTask (CPU 1)
E (5345) task_wdt: Tasks currently running:
E (5345) task_wdt: CPU 0: IDLE
E (5345) task_wdt: CPU 1: loopTask
E (5345) task_wdt: Aborting.

abort() was called at PC 0x400f9c74 on core 0


Backtrace:0x40083a51:0x3ffbea1c |<-CORRUPTED

again, this is with the same .yml as in the repo, except for the board: specified.

Hello.
I tried to add the component but esphome returns
binary_sensor.ld2410s: [source /config/esphome/pres-hlk2410s-1yaml.yaml:58]

Couldn’t find any component that can be used for ‘ld2410s::LD2410S’. Are you missing a hub declaration?.

do you know what i am missing ?

Hey all,
It seems that I tried everything but cannot make my LD2410s to work with my LOLIN 32.

esphome:
  name: "motion-sensor-2"
  friendly_name: Motion sensor 2
  min_version: 2024.11.0
  name_add_mac_suffix: false
  # Delay initialization to allow sensor to power up
  on_boot:
    priority: -100
    then:
    - delay: 10s

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  level: DEBUG
  logs:
    # sensor: INFO
    component: ERROR

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  networks:
    - ssid: !secret wifi_ssid
      password: !secret wifi_password
  fast_connect: true
  power_save_mode: NONE

captive_portal:

# External component configuration
external_components:
  - source: github://NovakIrs/esphome@ld2410s
    components: [ld2410s]

debug:
  update_interval: 1s

# UART configuration for LD2410S
uart:
  id: uart_bus
  tx_pin: GPIO17  # Connects to LD2410S RX
  rx_pin: GPIO16  # Connects to LD2410S TX
  baud_rate: 115200
  parity: NONE
  data_bits: 8
  stop_bits: 1
  debug:
   direction: BOTH
   dummy_receiver: false
   after:
     delimiter: "\n"
   sequence:
     - lambda: UARTDebug::log_hex(direction, bytes, ':');

ld2410s:
  uart_id: uart_bus

binary_sensor:
  - platform: ld2410s
    has_target:
      name: Presence
    has_threshold_update:
      name: Threshold update running
  - platform: gpio
    name: "Presence Sensor"
    pin:
      number: GPIO4
      mode:
        input: true
        pullup: true
      inverted: false
    device_class: presence

sensor:
  - platform: ld2410s
    target_distance:
      name : Target Distance
    threshold_update: 
      name: Threshold update progress
  - platform: wifi_signal
    name: "Motion sensor 2 WiFi Signal"
    update_interval: 180s
text_sensor:
  - platform: ld2410s
    fw_version:
      name: Firmware version
    trigger_threshold_ts:
      name: Triggers Threshold
    trigger_hold_ts:
      name: Triggers Hold
    trigger_snr_ts:
      name: Triggers SNR
    energy_values_ts:
      name: Energy Values

number:
  - platform: ld2410s
    max_distance:
      name: Max detect distance
    min_distance:
      name: Min detect distance
    no_delay:
      name: No detect report delay
    status_reporting_frequency:
      name: Status reporting frequency
    distance_reporting_frequency:
      name: Distance reporting frequency
    trigger_selected_gate:
      name: Trigger Selected Gate
    trigger_threshold:
      name: Trigger Gate Threshold
    trigger_hold:
      name: Trigger Gate Hold
    trigger_snr:
      name: Trigger Gate SNR

select:
  - platform: ld2410s
    response_speed:
      name: Response speed

button:
  - platform: restart
    name: "ESP32 Restart"
  - platform: ld2410s
    read_all:
      name: Read configuration
    write_all:
      name: Write config changes
    factory_reset:
      name: Factory reset
    calibration:
      name: Start auto calibration
    minimal_output:
      name: Toggle minimal output

Does anybody have an idea what I did wrong?
Thanks!

I should have added that only the WiFi Signal sensor is working right now.

I just add the following:

at the beggining of LD2410S.cpp
#include “esphome/core/application.h”

and in the function send_command void LD2410S::send_command(CmdFrameT frame)

below the line while (!reply) { add App.feed_wdt();

            while (!reply) {
                App.feed_wdt();
                uint8_t ack_buffer[64];

Thanks but I’m only using ESPHome through Home assistant so I don’t have a .cpp file

Working great for me
ESPHome 2025.6.3

Though I am using

esp32:
  board: esp32dev # NodeMCU
  framework:
    type: esp-idf

Do you have your logs?

If you ar taking 3.3V from the ESP-board, your will probably kille the processor

I am trying as well, can anybody please post a sample configuration which is working?

I used this one: https://github.com/NovakIrs/esphome/blob/5bac4750b39e976d03ad5259cd3014b8e9cabe59/tests/components/ld2410s/common.yaml

I guess there is much room for improvment but, in first tests it works

substitutions:
  uart_tx: GPIO7
  uart_rx: GPIO8
  presence: GPIO9

esphome:
  name: ld2410s
  friendly_name: Presence sensor
  name_add_mac_suffix: false
  # Delay initialization to allow sensor to power up
  on_boot:
    priority: -100
    then:
    - delay: 10s

esp32:
  variant: ESP32S3
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf
    
# Enable logging
logger:
  level: DEBUG
  logs:
    # sensor: INFO
    component: ERROR

# Enable Home Assistant API
api:
  encryption:
    key: 

ota:
  - platform: esphome
    password: 

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  power_save_mode: NONE

# External component configuration
external_components:
  - source: github://NovakIrs/esphome@ld2410s
    components: [ld2410s]

debug:
  update_interval: 1s

# UART configuration for LD2410S
uart:
  id: uart_bus
  tx_pin: ${uart_tx}
  rx_pin: ${uart_rx}
  baud_rate: 115200
  parity: NONE
  stop_bits: 1

ld2410s:
  uart_id: uart_bus

sensor:
  - platform: ld2410s
    target_distance:
      name: Target Distance
    calibration_progress:
      name: Calibration progress

binary_sensor:
  - platform: ld2410s
    has_target:
      name: Presence
    has_calibration_running:
      name: Calibration running
  - platform: gpio
    name: "Presence Sensor"
    pin:
      number: ${presence}
      mode:
        input: true
        pullup: true
      inverted: false
    device_class: presence

text_sensor:
  - platform: ld2410s
    fw_version:
      name: Firmware version
    threshold_triggers:
      name: Threshold Triggers
    threshold_holds:
      name: Threshold Holds
    threshold_snrs:
      name: Threshold SNRs
    energy_values:
      name: Energy Values

number:
  - platform: ld2410s
    max_distance:
      name: Max detect distance
    min_distance:
      name: Min detect distance
    no_delay:
      name: No detect report delay
    status_reporting_frequency:
      name: Status reporting frequency
    distance_reporting_frequency:
      name: Distance reporting frequency

    threshold_trigger:
      name: Threshold Trigger
    threshold_hold:
      name: Threshold Hold
    threshold_snr:
      name: Threshold SNR
    threshold_selected_gate:
      name: Threshold Selected Gate

button:
  - platform: ld2410s
    calibration:
      name: Start auto calibration
    factory_reset:
      name: Factory reset

select:
  - platform: ld2410s
    response_speed:
      name: Response speed

switch:
  - platform: ld2410s
    minimal_output:
      name: Minimal output

I bought several ld2410s because i thought the 3.3v operation might be good for some projects that could run on battery, without realising the different pin-outs and operation ( and esphome support).

I have tried this and another component but after a day or so it seems to start detecting movement when there is no activity in the room, or nearby. Its even been detecting movement when there is no one present in the house.
I have it on a ESP32-C3 that happens to have a oled display on it too, and its currently running off a USB hub so voltage should not be a problem.

I have just run a re-calibration and its gone clear again.

image