ESP32 UART connection to LD2410 mmWave sensor fails

Hi everyone,

I have a problem and I don’t understand it anymore, and even AI hasn’t been able to help me further :frowning:

I had the following setup:

How I connected it:
XIAO-S3 on the GroveShield
Grove-to-Dupont cable in slot 6, assuming the following layout on the GroveShield:

1 2 3 4
5 6 7 8
Black -> GND
Red -> 5v (effectively supplies 3.3v)
White -> RX
Yellow -> TX

I had the following in my xiao-s3.yaml:

xiao-s3.yaml
esphome:
  name: mmwave-sensor
 
logger:
  level: DEBUG
 
esp32:
  variant: esp32s3
  board: seeed_xiao_esp32s3
  framework:
    type: esp-idf
 
 
# UART Bus ->
uart:
  id: mmwave_uart
  tx_pin: GPIO43
  rx_pin: GPIO44
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
  # debug:
  #   direction: BOTH
  #   dummy_receiver: false
  #   debug_prefix: "[MODBUS] "
  #   after:
  #     delimiter: "\n"
  #   sequence:
  #     - lambda: UARTDebug::log_string(direction, bytes, debug_prefix);
 
# register the mmwave radar sensor on the UART bus
ld2410:
  id: seeed_mmwave
  uart_id: mmwave_uart
 
binary_sensor:
  - platform: ld2410
    has_target:
      name: "Detected someone"
      internal: true
 
      on_press:
        - logger.log:
            level: INFO
            format: "👉👉👉 RADAR: someone found!"
        # - switch.turn_on: display_backlight
 
      on_release:
        - logger.log:
            level: INFO
            format: "👋👋👋 RADAR: someone leaved."
        # - switch.turn_off: display_backlight
 
sensor:
  - platform: ld2410
    moving_distance:
      name: "distance moving object"
      internal: true
      # filters:
      #   - delta: 1.0 # Sendet nur bei Änderung von mind. 1 cm
      on_value:
        - logger.log:
            level: INFO
            format: "🏃 RADAR: moving object at %.0f cm."
            args: ["x"]
 
    still_distance:
      name: "distance static object"
      internal: true
      # filters:
      #   - delta: 1.0 # Sendet nur bei Änderung von mind. 1 cm
      on_value:
        - logger.log:
            level: INFO
            format: "🧍 RADAR: static object at %.0f cm."
            args: ["x"]

With that I was able to configure the sensor via the app and everything worked perfectly.

Then I switched to an ESP32-S3-DEV-KIT-N8R8, because I needed more pins. I simply took 4 Dupont cables and connected the pins correctly, and now nothing works anymore event with the following minimal example:

devkit.yaml
esphome:
  name: mmwave-devkit
 
logger:
  level: DEBUG
 
esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf
 
uart:
  id: mmwave_uart
  tx_pin: GPIO15
  rx_pin: GPIO13
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
  debug:
    direction: BOTH
    dummy_receiver: false
    debug_prefix: "[MODBUS] "
    after:
      delimiter: "\n"
    sequence:
      - lambda: UARTDebug::log_string(direction, bytes, debug_prefix);
 
ld2410:
  id: seeed_mmwave
  uart_id: mmwave_uart
 
binary_sensor:
  - platform: ld2410
    has_target:
      name: "Detected someone"
      internal: true
 
      on_press:
        - logger.log:
            level: INFO
            format: "👉👉👉 RADAR: someone found!"
        # - switch.turn_on: display_backlight
 
      on_release:
        - logger.log:
            level: INFO
            format: "👋👋👋 RADAR: someone leaved."
 
sensor:
  - platform: ld2410
    moving_distance:
      name: "distance moving object"
    still_distance:
      name: "distance static object"

Even with switchting RX/TX (GPIO13/14)

Log:

INFO Successfully uploaded program.
INFO Starting log output from /dev/tty.usbmodem11101 with baud rate 
115200
[23:28:48.940][C][component:246]: Setup ld2410 took 251ms
[23:28:48.940][I][app:117]: setup() finished successfully!
[23:28:48.945][D][uart_debug:157]: [MODBUS] >>> 
"\xFD\xFC\xFB\xFA\x04\x00\xFF\x00\x01\x00\x04\x03\x02\x01\xFD\xFC\xFB\xF 
A\x02\x00\xA0\x00\x04\x03\x02\x01\xFD\xFC\xFB\xFA\x04\x00\xA5\x00\x01\x0 
0\x04\x03\x02\x01\xFD\xFC\xFB\xFA\x02\x00\xAB\x00\x04\x03\x02\x01\xFD\xF 
C\xFB\xFA\x02\x00\xAE\x00\x04\x03\x02\x01\xFD\xFC\xFB\xFA\x02\x00a\x00\x 
04\x03\x02\x01\xFD\xFC\xFB\xFA\x02\x00\xFE\x00\x04\x03\x02\x01"
[23:28:48.973][I][app:151]: ESPHome version 2026.5.3 compiled on 
2026-07-18 23:28:04 +0200
[23:28:48.973][I][app:158]: ESP32 Chip: ESP32-S3 rev0.2, 2 core(s)
[23:28:48.974][C][logger:219]: Logger:
[23:28:48.974][C][logger:219]:   Max Level: DEBUG
[23:28:48.974][C][logger:219]:   Initial Level: DEBUG
[23:28:48.975][C][logger:226]:   Log Baud Rate: 115200
[23:28:48.975][C][logger:226]:   Hardware UART: USB_SERIAL_JTAG
[23:28:48.976][C][logger:235]:   Task Log Buffer Size: 768 bytes
[23:28:49.008][C][uart.idf:254]: UART Bus 0:
[23:28:49.009][C][uart.idf:152]:   TX Pin: GPIO14
[23:28:49.009][C][uart.idf:152]:   RX Pin: GPIO13
[23:28:49.010][C][uart.idf:259]:   RX Buffer Size: 256
[23:28:49.010][C][uart.idf:259]:   RX Full Threshold: 120
[23:28:49.010][C][uart.idf:259]:   RX Timeout: 2
[23:28:49.011][C][uart.idf:268]:   Baud Rate: 256000 baud
[23:28:49.011][C][uart.idf:268]:   Data Bits: 8
[23:28:49.011][C][uart.idf:268]:   Parity: NONE
[23:28:49.011][C][uart.idf:268]:   Stop bits: 1
[23:28:49.061][D][uart_debug:157]: [MODBUS] <<< "\x00\x00\x00\x90"
[23:28:49.087][C][ld2410:185]: LD2410:
[23:28:49.088][C][ld2410:185]:   Firmware version: 0.00.00000000
[23:28:49.088][C][ld2410:185]:   MAC address: unknown
[23:28:49.088][C][ld2410:191]: Binary Sensors:
[23:28:49.089][C][ld2410:016]:   Target 'Detected someone'
[23:28:49.090][C][ld2410:232]:     Device Class: 'occupancy'
[23:28:49.090][C][ld2410:198]: Sensors:
[23:28:49.091][C][ld2410:017]:   MovingTargetDistance 'distance moving 
object'
[23:28:49.091][C][ld2410:017]:     State Class: ''
[23:28:49.091][C][ld2410:017]:     Unit of Measurement: 'cm'
[23:28:49.092][C][ld2410:017]:     Accuracy Decimals: 0
[23:28:49.092][C][ld2410:232]:     Device Class: 'distance'
[23:28:49.093][C][ld2410:223]:     Icon: 'mdi:signal-distance-variant'
[23:28:49.094][C][ld2410:017]:   StillTargetDistance 'distance static 
object'
[23:28:49.094][C][ld2410:017]:     State Class: ''
[23:28:49.094][C][ld2410:017]:     Unit of Measurement: 'cm'
[23:28:49.094][C][ld2410:017]:     Accuracy Decimals: 0
[23:28:49.095][C][ld2410:232]:     Device Class: 'distance'
[23:28:49.096][C][ld2410:223]:     Icon: 'mdi:signal-distance-variant'

Back on the XIAO-ESP32, nothing happens anymore either. So I soldered my 3 spare mmWave sensors, same result, nothing happens. I can’t even configure them via the app anymore.

I’m totally desperate because I no longer understand why absolutely nothing is happening at all. I also can’t imagine that 4 sensors are broken.

Sounds pretty chaotic. Why you post code that doesn’t match logs?
How is your soldering and jumpers? Post a good photo..

just in time I found the solution..

Looking at the picture from the “Hardware Overview” it must be 3v3 + GND and not the 5V input. What a dumb way to let grey hair grow.

More time could have fried your board.
Anyway, nice you solved it!