Heya
I’m trying to get the Seeed Studio 24GHz mmWave for XIAO working with the Seeed ESP32-C6.
I know the ESP32-C6 is not officially supported but I’ve seen posts from people saying it works and even a whole product (Seeed Studio 60GHz mmWave Breathing and Heartbeat Detection Sensor), using it, which has an ESPhome config here (which I’ve tried, does not work).
The problem is that my sensors are always “Unknown” or “Unavailable” in home assistant. The ESP32-C6 gets data from the sensor via UART
Things I’ve tried:
Tested the sensor with the Seeed ESP32-C3 and it works fine
Tried all sorts of UART pins
Set the UART baud rate to 115200 via the app, connected with bluetooth to the sensor and this speed works with the ESP32-C3
I’ve read all these examples or threads (I had to remove/break these links as I’m a new user):
https://github.com/Seeed-Studio/wiki-documents/discussions/802
https://community.home-assistant.io/t/esphome-esp32-c6-with-mmwave-ld2410/835009/2
https://community.home-assistant.io/t/seeed-60ghz-mmwave-integration-using-esphome/533442/20
https://community.home-assistant.io/t/mmwave-human-presence-for-under-20/414389/118
https://community.home-assistant.io/t/esphome-esp32-c6-with-mmwave-ld2410/835009/3
I feel like I’m making some basic error here but can’t work out what it is!
My config:
esphome:
name: esp32-c6-one
friendly_name: esp32-c6-one
platformio_options:
board_upload.maximum_size: 4194304
min_version: "2024.3.2"
esp32:
board: esp32-c6-devkitc-1
variant: esp32c6
flash_size: 4MB
framework:
type: esp-idf
logger:
level: DEBUG
# api:
# ota:
# wifi:
uart:
baud_rate: 115200
rx_pin: 17
tx_pin: 16
parity: NONE
stop_bits: 1
ld2410:
binary_sensor:
- platform: ld2410
has_target:
name: Presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
out_pin_presence_status:
name: out pin presence status
The logs from startup:
INFO Upload took 4.42 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.178.184 using esphome API
INFO Successfully connected to esp32-c6-one @ 192.168.178.184 in 19.415s
INFO Successful handshake with esp32-c6-one @ 192.168.178.184 in 0.078s
[13:50:17][I][app:100]: ESPHome version 2024.12.2 compiled on Feb 18 2025, 13:48:32
[13:50:17][C][wifi:600]: WiFi:
[13:50:17][C][wifi:428]: Local MAC: 8C:BF:EA:CC:BD:78
[13:50:17][C][wifi:433]: SSID: [redacted]
[13:50:17][C][wifi:436]: IP Address: 192.168.178.184
[13:50:17][C][wifi:439]: BSSID: [redacted]
[13:50:17][C][wifi:441]: Hostname: 'esp32-c6-one'
[13:50:17][C][wifi:443]: Signal strength: -84 dB ▂▄▆█
[13:50:17][C][wifi:447]: Channel: 11
[13:50:17][C][wifi:448]: Subnet: 255.255.255.0
[13:50:17][C][wifi:449]: Gateway: 192.168.178.1
[13:50:17][C][wifi:450]: DNS1: 192.168.178.1
[13:50:17][C][wifi:451]: DNS2: 0.0.0.0
[13:50:17][C][logger:185]: Logger:
[13:50:17][C][logger:186]: Level: DEBUG
[13:50:17][C][logger:188]: Log Baud Rate: 115200
[13:50:17][C][logger:189]: Hardware UART: UART0
[13:50:17][C][uart.idf:159]: UART Bus 1:
[13:50:17][C][uart.idf:160]: TX Pin: GPIO16
[13:50:17][C][uart.idf:161]: RX Pin: GPIO17
[13:50:17][C][uart.idf:163]: RX Buffer Size: 256
[13:50:17][C][uart.idf:165]: Baud Rate: 115200 baud
[13:50:17][C][uart.idf:166]: Data Bits: 8
[13:50:17][C][uart.idf:167]: Parity: NONE
[13:50:17][C][uart.idf:168]: Stop bits: 1
[13:50:17][C][ld2410:022]: LD2410:
[13:50:17][C][ld2410:024]: TargetBinarySensor 'Presence'
[13:50:17][C][ld2410:024]: Device Class: 'occupancy'
[13:50:17][C][ld2410:025]: MovingTargetBinarySensor 'Moving Target'
[13:50:17][C][ld2410:025]: Device Class: 'motion'
[13:50:17][C][ld2410:026]: StillTargetBinarySensor 'Still Target'
[13:50:17][C][ld2410:026]: Device Class: 'occupancy'
[13:50:17][C][ld2410:027]: OutPinPresenceStatusBinarySensor 'out pin presence status'
[13:50:17][C][ld2410:027]: Device Class: 'presence'
[13:50:18][C][ld2410:075]: Throttle_ : 1000ms
[13:50:18][C][ld2410:076]: MAC Address :
[13:50:18][C][ld2410:077]: Firmware Version :
[13:50:18][C][mdns:116]: mDNS:
[13:50:18][C][mdns:117]: Hostname: esp32-c6-one
[13:50:18][C][esphome.ota:073]: Over-The-Air updates:
[13:50:18][C][esphome.ota:074]: Address: esp32-c6-one.local:3232
[13:50:18][C][esphome.ota:075]: Version: 2
[13:50:18][C][esphome.ota:078]: Password configured
[13:50:18][C][safe_mode:018]: Safe Mode:
[13:50:18][C][safe_mode:019]: Boot considered successful after 60 seconds
[13:50:18][C][safe_mode:021]: Invoke after 10 boot attempts
[13:50:18][C][safe_mode:022]: Remain in safe mode for 300 seconds
[13:50:18][C][api:140]: API Server:
[13:50:18][C][api:141]: Address: esp32-c6-one.local:6053
[13:50:18][C][api:143]: Using noise encryption: YES
Karosm
(Karosm)
February 18, 2025, 2:13pm
2
Try with:
logger:
level: DEBUG
baud_rate: 0
Thanks for the suggestion @Karosm but this does not change the behaviour.
Try setting the UART id explicitly:
uart:
id: ld2410_uart
baud_rate: 115200
rx_pin: 17
tx_pin: 16
parity: NONE
stop_bits: 1
ld2410:
uart_id: ld2410_uart
Also, I have various LD2410’s (with C3’s though) and they have no parity or stop_bits configuration.
Just for fun, try swapping rx_pin and tx_pin.
Also, I have various LD2410’s (with C3’s though) and they have no parity or stop_bits configuration.
Same when I run it with my C3 but I think these settings are the default values anyway, so they make no difference.
Just for fun, try swapping rx_pin and tx_pin.
Tried this, no change.
Try setting the UART id explicitly:
Tried this, also no change
Here’s my current config:
esp32:
board: esp32-c6-devkitc-1
variant: esp32c6
framework:
type: esp-idf
logger:
level: DEBUG
baud_rate: 0
uart:
id: ld2410_uart
baud_rate: 115200
rx_pin: 17
tx_pin: 16
ld2410:
uart_id: ld2410_uart
binary_sensor:
- platform: ld2410
has_target:
name: Presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
out_pin_presence_status:
name: out pin presence status
I can check tomorrow if I can get it working, I think I have some LD2410’s and C6’s.
It works for me using a SuperMini C6 (which is a Seeed Xiao clone):
[08:25:19][D][binary_sensor:036]: 'Moving Target': Sending state ON
[08:25:21][D][binary_sensor:036]: 'Moving Target': Sending state OFF
[08:25:23][D][binary_sensor:036]: 'Moving Target': Sending state ON
[08:25:25][D][binary_sensor:036]: 'Moving Target': Sending state OFF
Configuration (using ESPHome 2024.10.0):
esphome:
name: ld2410test
esp32:
board: esp32-c6-devkitc-1
variant: esp32c6
flash_size: 4MB
framework:
platform_version: 6.6.0
type: esp-idf
version: 5.2.1
sdkconfig_options:
CONFIG_ESPTOOLPY_FLASHSIZE_4MB: y
logger:
level: DEBUG
baud_rate: 0
wifi:
ssid: "XXX"
password: "YYY"
api:
uart:
id: ld2410_uart
baud_rate: 256000
rx_pin: 14
tx_pin: 15
ld2410:
uart_id: ld2410_uart
throttle: 500ms
binary_sensor:
- platform: ld2410
has_target:
name: Presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
out_pin_presence_status:
name: out pin presence status
I’m using an LD2410C board:
2 Likes
Thank you @robertklep , I really appreciate you testing that!
I copied it and adjusted the pins but also still no luck:
esp32:
board: esp32-c6-devkitc-1
variant: esp32c6
flash_size: 4MB
framework:
platform_version: 6.6.0
type: esp-idf
version: 5.2.1
sdkconfig_options:
CONFIG_ESPTOOLPY_FLASHSIZE_4MB: y
logger:
level: DEBUG
baud_rate: 0
uart:
id: ld2410_uart
baud_rate: 256000
rx_pin: 17
tx_pin: 16
ld2410:
uart_id: ld2410_uart
throttle: 500ms
binary_sensor:
- platform: ld2410
has_target:
name: Presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
out_pin_presence_status:
name: out pin presence status
I also tried:
A different Seeed ESP32-C6
Changing the firmware version on the mmWave sensor (via the app, bluetooth)
Changing the baud rate on the mmWave sensor (via the app, bluetooth)
Resetting the mmWave sensor back to defaults (via the app, bluetooth)
Switching back to ESP32-C3, sensor works perfectly
Maybe I should ask in the Seeed forums?
Given that the sensor works fine with a C3, it might be a distinct issue with the Seeed C6 board, so perhaps the Seeed forums can provide better insight.
OK just an update on this topic, after asking in the Seeed forums : the pin numbers were wrong. This configuration works for me:
esp32:
board: esp32-c6-devkitc-1
variant: esp32c6
flash_size: 4MB
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESPTOOLPY_FLASHSIZE_4MB: y
logger:
level: DEBUG
uart:
baud_rate: 256000
rx_pin: 2
tx_pin: 21
ld2410:
binary_sensor:
- platform: ld2410
has_target:
name: Presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
out_pin_presence_status:
name: out pin presence status
3 Likes
idcrook
(David Crook)
March 1, 2025, 9:15pm
12
I was trying to follow the deltas between -C3 and -C6 Xiao pinouts, and thank you for including here.
It appears the D2 and D3 pins (Arduino naming) was where the sensor was wiring to on the Xiao board?
So consulting Seeedstudio wiki for each,
on -C3 Xiao these correspond to GPIO4 (D2) and GPIO5 (D3).
on -C6 Xiao these correspond to GPIO2 (D2) and GPIO21 (D3).
Did I capture that correctly?
I think the source of the confusion was that “TX” and “RX” as labeled on -C6 Xiao pinout are respectively GPIO16 and GPIO17. But these were not where the sensor was wired – and ESPHome needed to be configured to use those actual pins?
I am about to try to set up my own mmWave sensor using Xiao ESP32-C6, so it was helpful to discover this information.
EDIT: adding wiki links - labeled pinouts available there
2 Likes
afsy_d
June 2, 2025, 7:21am
13
Hey All, just wanted to thank you for posting this, still useful to date!
The mapping of the pins on the XIAO ESP32-C6 + ’ Seeed Studio 24GHz mmWave for XIAO’ that worked was the following:
uart:
baud_rate: 256000
rx_pin: 2
tx_pin: 21
1 Like