Bonjour tout le monde, aujourd’hui on va utiliser l’ESP32 S2 mini de chez wemos avec des capteur LD2410C.
Le but c’est qu’avec un capteur du genre, capteur millimétrique, on va pouvoir indiquer a home assistant au mètre prêt ou sont les gens dans la pièce pour créer des automatisations, et ceci a travers les murs.
Mon but :
Dans le coin de la cuisine, caché dans le mur derrière un miroir connecté :
- Couvrir le couloir dans une sens
- voir qui est dans la cuisine
En fonction de ca :
- allumer ou éteindre les lumières si plus personne n’est présent
- allumer le miroir connecté ou non
Je me suis inspiré de ceci :
Voici mon câblage une fois terminé.
Pr le tout cela a été relativement compliqué de trouvé une doc me permettant de transférer mon Yaml vers un wemos.
Home assistant (ou alors c’est que le mien), n’aime pas cette puce.
Mon process :
- installation de python sur Windows
- création du device sur home assistant
- récupération des infos yaml (copier coller sous Windows)
- branchement du wemos sur Windows en mode boot
- et envoie vers le wemos, un fois ok, tout le reste des modification peuvent se faire sous home assistant sans trop de difficultés. (Redites moi si besoin je pourrais détailler)
il faut créer le yaml, une fois ok sous un PowerShell voici la commande a lancer (vérifier le port COM utilisé chez vous, dans le gestionnaire de peripheriques)
![]()
on le laisse travailler et rebooter
A la fin de la compilation et du transfère, cela se termine avec cette erreur :

C’est tout a fait normale, windows et python n’aime pas la déconnexion du module pendant son reboot, mais cela a fonctionné.
Mon yaml pour les deux modules
Yaml de mon bureau de la même composition que celui que je met dans la cuisine
esphome:
name: s2mini-bureaunico
friendly_name: S2Mini_BureauNico
esp32:
board: esp32-s2-saola-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "pxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqQI0="
ota:
- platform: esphome
password: "b2490xxxxxxxxxxxxxxxxxxxxxxxxxxxxxce43f2"
wifi:
ssid: Stark
password: Ixxxxxxxxxxxxxxxxxxxxxxxx
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "S2Mini-Bureaunico"
password: "12xxxxxxxxxxxxxxxxx90"
captive_portal:
web_server:
port: 80
version: 2
local: true
uart:
- id: uart_1
tx_pin: GPIO18
rx_pin: GPIO33
baud_rate: 256000
parity: NONE
stop_bits: 1
- id: uart_2
tx_pin: GPIO17
rx_pin: GPIO21
baud_rate: 256000
parity: NONE
stop_bits: 1
ld2410:
- id: ld2410_Bureau
uart_id: uart_1
- id: ld2410_Salon
uart_id: uart_2
binary_sensor:
- platform: ld2410
ld2410_id: ld2410_Bureau
has_target:
name: "Presence Bureau"
has_moving_target:
name: "Distance cible en mouvement Bureau"
has_still_target:
name: "Distance cible Fixe Bureau"
- platform: ld2410
ld2410_id: ld2410_Salon
has_target:
name: "Presence Salon"
has_moving_target:
name: "Distance cible en mouvement Salon"
has_still_target:
name: "Distance cible Fixe Salon"
sensor:
# --- Bureau ---
- platform: ld2410
ld2410_id: ld2410_Bureau
light:
name: "Luminosité Bureau"
moving_distance:
name: "Distance cible en mouvement Bureau"
still_distance:
name: "Distance cible fixe Bureau"
detection_distance:
name: "Distance de détection Bureau"
# --- Salon ---
- platform: ld2410
ld2410_id: ld2410_Salon
light:
name: "Luminosité Salon"
moving_distance:
name: "Distance cible en mouvement Salon"
still_distance:
name: "Distance cible fixe Salon"
detection_distance:
name: "Distance de détection Salon"
- platform: uptime
name: "Uptime Radar Bureau"
switch:
- platform: ld2410
ld2410_id: ld2410_Bureau
bluetooth:
name: "Bluetooth Bureau"
- platform: ld2410
ld2410_id: ld2410_Salon
bluetooth:
name: "Bluetooth Salon"
button:
- platform: restart
name: "Redémarrer Radar Bureau"
Par la suite il va rester a peaufiner les zones de détections pour en rendre inactives en fonction du besoin.
Coté Home assisatant, j’utilise nodeRED :
Voici ce que cela donne :
La fonction verifie l’etat de chaque valeur d’entrée :
// ===== Capteur déclencheur =====
const entity_id = msg.data.entity_id;
const state = msg.data.new_state.state;
// ===== Stockage des états =====
if (entity_id === "binary_sensor.s2mini_bureaunico_presence_salon") {
flow.set("presence_salon", state);
}
if (entity_id === "binary_sensor.s2mini_bureaunico_presence_bureau") {
flow.set("presence_bureau", state);
}
if (entity_id === "binary_sensor.s2mini_cuisinemiroire_presence_cuisine") {
flow.set("presence_cuisine", state);
}
// ===== Lecture des états =====
const salon = flow.get("presence_salon");
const bureau = flow.get("presence_bureau");
const cuisine = flow.get("presence_cuisine");
// ===== Debug visuel =====
node.status({
fill: "blue",
shape: "dot",
text: `Salon:${salon ?? "?"} | Bureau:${bureau ?? "?"} | Cuisine:${cuisine ?? "?"}`
});
// ===== Si un seul est encore ON → on ne fait rien =====
if (salon === "on" || bureau === "on" || cuisine === "on") {
return null;
}
// ===== Si tous sont OFF → extinction =====
if (salon === "off" && bureau === "off" && cuisine === "off") {
return msg;
}
return null;


