Sense S5 - mmWave & Air Quality Esphome Sensor
Print Profile(1)

Description
Here is my newest version of my Esphome mmWave based on esp32c3.
If you need the Esphome code, send me a message (I got a busy week right now so cant add it in the description right now)
Quick Guide Update
Info about project
Compact Air quality and presence sensor, Only temperature reading is inaccurate due to esp32c3 heat.
ENS160 sensor has a bootup time of a couple hours, so wait a day before thinking its broken.
Bluetooth Proxy icons, and entity names are allready set up for you.
Get an ESP32c3 board with a .8mm thick pcb, and get a WIFI fixed version that has grounded vias next to the antenna component. ive provided a link that should be thin enough as the original seller i bought mine from stopped selling them.
I used a permanent marker to make the back of the esp32c3 black.
Everything should snap in
Components used
- LD2410B (bluetooth version is handy for the HLK radar app for calibration) https://nl.aliexpress.com/item/1005007588627535.html
- ENS160+AHT21 (CO2, eCO2, TVOC, Air Quality, Humidity, Temperature) https://nl.aliexpress.com/item/1005004761725413.html
- SK6812B adressable LED https://nl.aliexpress.com/item/1005002509850925.html
- ESP32C3 wifi fix version, hopefully .8mm thick pcb https://nl.aliexpress.com/item/1005007941259180.html
2.5mm thick usb cable, i desleived an old one
Code:
esphome:
name: sense-s5-mthab >> PUTINYOURCHOSENNAMESPHOME
friendly_name: Sense S5 MTHAB >> NAMETHATSHOWSUPINHOMEASSISTANT
esp32:
board: esp32-c3-devkitm-1
variant: esp32c3
framework:
type: esp-idf
logger:
level: WARN
api:
encryption:
key: "PUTINYOURKEYAUTOGENERATEDESPHOME"
ota:
- platform: esphome
password: "PUTINYOURPASSWORDAUTOGENERATEDESPHOME"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.0.99 >>>>PUTINYOUSTATICIP
gateway: 192.168.0.1
subnet: 255.255.255.0
ap:
ssid: "Sense S5 Offline"
password: "PUTINARANDOMRECOVERYWIFIPASSWORD"
time:
captive_portal:
esp32_ble_tracker:
scan_parameters:
active: true
bluetooth_proxy:
active: true
i2c:
sda: GPIO8
scl: GPIO9
scan: true
id: bus_a
uart:
id: ld2410_uart
tx_pin: GPIO7
rx_pin: GPIO6
baud_rate: 256000
ld2410:
id: ld2410_sensor
uart_id: ld2410_uart
light:
- platform: esp32_rmt_led_strip
rgb_order: GRB
pin: GPIO10
num_leds: 1
chipset: SK6812
is_rgbw: true
name: "Indicator Light"
icon: "mdi:star-four-points-circle-outline"
id: indicator_light
sensor:
- platform: internal_temperature
name: "Internal Chip Temperature"
icon: "mdi:temperature-celsius"
- platform: aht10
variant: AHT20
update_interval: 30s
i2c_id: bus_a
temperature:
name: "Sensor Temperature"
id: room_temp
icon: "mdi:thermostat"
humidity:
name: "Room Humidity"
id: room_humidity
icon: "mdi:percent-circle-outline"
- platform: ens160_i2c
i2c_id: bus_a
update_interval: 30s
address: 0x53
eco2:
name: "Estimated CO2"
icon: "mdi:circle-double"
tvoc:
name: "Total VOC"
icon: "mdi:image-filter-tilt-shift"
aqi:
name: "Air Quality Index"
icon: "mdi:leaf-circle-outline"
compensation:
temperature: room_temp
humidity: room_humidity
- platform: ld2410
moving_distance:
name: "Distance to Moving Object"
icon: "mdi:account-reactivate-outline"
unit_of_measurement: "cm"
still_distance:
name: "Distance to Static Object"
icon: "mdi:account-circle-outline"
unit_of_measurement: "cm"
moving_energy:
name: "Energy of Moving Object"
icon: "mdi:account-reactivate-outline"
unit_of_measurement: "%"
still_energy:
name: "Energy of Static Object"
icon: "mdi:account-circle-outline"
unit_of_measurement: "%"
detection_distance:
name: "Overall Detection Distance"
icon: "mdi:contactless-payment-circle-outline"
unit_of_measurement: "cm"
binary_sensor:
- platform: ld2410
has_target:
name: "Target Detected"
id: target_detected
icon: "mdi:circle-outline"
has_moving_target:
name: "Moving Target Detected"
icon: "mdi:circle-outline"
has_still_target:
name: "Still Target Detected"
icon: "mdi:circle-outline"
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: true
name: "Reset Button"
internal: true
on_click:
min_length: 6s
max_length: 10s
then:
- logger.log: "Long press → factory reset WiFi + preferences"
- button.press: wifi_reset_button
text_sensor:
- platform: ld2410
version:
name: "LD2410 Firmware Version"
icon: "mdi:arrow-up-bold-circle-outline"
mac_address:
name: "LD2410 MAC Address"
icon: "mdi:information-variant-circle-outline"
button:
- platform: ld2410
restart:
name: "Restart mmWave Sensor"
icon: "mdi:reload"
- platform: ld2410
factory_reset:
name: "Factory Reset mmWave Sensor"
icon: "mdi:cog-clockwise"
- platform: factory_reset
id: wifi_reset_button
internal: true # Hides it from Home Assistant dashboard (recommended)
switch:
- platform: ld2410
engineering_mode:
name: "Config Mode"
icon: "mdi:progress-wrench"
bluetooth:
name: "mmWave Bluetooth"
icon: "mdi:swap-horizontal-circle-outline"
select:
- platform: ld2410
distance_resolution:
name: "Distance resolution"
icon: "mdi:radius-outline"
baud_rate:
name: "Baud Rate"
icon: "mdi:ProgressUpload"
light_function:
name: "Light Function"
icon: "mdi:LightbulbQuestion"
License
You may create derivative works based on this object, provided that all such derivative works are published exclusively on the MakerWorld platform and include proper attribution to the original creator. You may not share, upload, host, distribute, or publish this object—or any derivative work of this object—on any other digital platform, marketplace, or distribution channel. Commercial use of this object and any derivative works is strictly prohibited. This includes, but is not limited to, selling, renting, sublicensing, or using the object in any context in which you receive monetary compensation or other financial benefits.














Comment & Rating (3)