LD2410C sur ESP8266 ou ESP32 S2 sur Home Assistant – Capteur millimétrique DIY

J’ai reçu mon capteur millimétrique LD2410c 🙂 ! J’ai effectué des tests sur l’ESP8266, mais j’ai rencontré quelques petits soucis qui peuvent vous faire gagner du temps. Ce capteur permet de détecter une présence, il donne la distance entre le capteur et l’individu, il informe si la présence est en mouvement. Je n’ai pas encore étudié l’ensemble de toutes les possibilités.

Il ne faut pas que le capteur soit relié à l’ESP lors du flashage de ce dernier, et il est préférable de désactiver les journaux de débogage (logger:), bien que cela puisse être peu pratique en cas de problème. Il semble qu’il y ait un conflit. En tout cas, suite à ça tout à fonctionné correctement.

Sur l’ESP8266

Voir bas de page pour ESP32S2

Assemblage :

  • 5V -> VCC / GND ->GND / TX -> RX / RX -> TX



Code source yaml pour votre ESP8266 :

esphome:
  name: capteur_test
  friendly_name: capteur

esp8266:
  board: d1
  
api:
  encryption:
    key: "ULYrurWFc4osrD4+ZOKnXcGG3t8OGMrfqUiNt7p5NeY="
ota:

wifi:
  ssid: Votre Wifi
  password: Votre mot de passe


uart:
  tx_pin: TX
  rx_pin: RX
  parity: NONE
  data_bits: 8
  stop_bits: 1
  baud_rate: 256000

ld2410:
  id: "capteur_ld"

binary_sensor:
  - platform: ld2410
    has_target:
      name: "Présence"
    has_moving_target:
      name: "Cible mobile"
    has_still_target:
      name: "Cible Immobile"
    out_pin_presence_status:
      name: "état de broche de présence"

  - platform: gpio
    pin: D6
    name: "broche gpio de présence"
    device_class: presence         

sensor:
  - platform: ld2410
    light:
      name: "lumière"
    moving_distance:
      name: "Distance Déplacement"
    still_distance:
      name: "Distance Immobile"
    moving_energy:
      name: "Énergie Mobile"
    still_energy:
      name: "Énergie Immobile"
    detection_distance:
      name: "Distance de détection"
    g0:
      move_energy:
        name: "g0 Énergie Mobile"
      still_energy:
        name: "g0 Énergie Immobile"
    g1:
      move_energy:
        name: "g1 Énergie M"
      still_energy:
        name: "g1 Énergie I"
    g2:
      move_energy:
        name: "g2 Énergie M"
      still_energy:
        name: "g2 Énergie I"
    g3:
      move_energy:
        name: "g3 Énergie M"
      still_energy:
        name: "g3 Énergie I"
    g4:
      move_energy:
        name: "g4 Énergie M"
      still_energy:
        name: "g4 Énergie I"
    g5:
      move_energy:
        name: "g5 Énergie M"
      still_energy:
        name: "g5 Énergie I"
    g6:
      move_energy:
        name: "g6 Énergie M"
      still_energy:
        name: "g6 Énergie I"
    g7:
      move_energy:
        name: "g7 Énergie M"
      still_energy:
        name: "g7 Énergie I"
    g8:
      move_energy:
        name: "g8 Énergie M"
      still_energy:
        name: "g8 Énergie I"

  - platform: wifi_signal 
    name: Signal Wifi
    id: wifi_signal_db
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    update_interval: 60s
    unit_of_measurement: "%"
    entity_category: "diagnostic"


switch:
  - platform: ld2410
    engineering_mode:
      name: "mode ingénierie"
    bluetooth:
      name: "contrôle bluetooth"

number:
  - platform: ld2410
    timeout:
      name: "délai"
    light_threshold:
      name: "seuil lumière"
    max_move_distance_gate:
      name: "distance déplacement maximal"
    max_still_distance_gate:
      name: "distance Immobile maximal"
    g0:
      move_threshold:
        name: "g0 seuil Énergie M"
      still_threshold:
        name: "g0 seuil I"
    g1:
      move_threshold:
        name: "g1 seuil I"
      still_threshold:
        name: "g1 seuil"
    g2:
      move_threshold:
        name: "g2 seuil M"
      still_threshold:
        name: "g2 seuil I"
    g3:
      move_threshold:
        name: "g3 seuil M"
      still_threshold:
        name: "g3 seuil I"
    g4:
      move_threshold:
        name: "g4 seuil M"
      still_threshold:
        name: "g4 seuil I"
    g5:
      move_threshold:
        name: "g5 seuil M"
      still_threshold:
        name: "g5 seuil I"
    g6:
      move_threshold:
        name: "g6 seuil M"
      still_threshold:
        name: "g6 seuil I"
    g7:
      move_threshold:
        name: "g7 seuil M"
      still_threshold:
        name: "g7 seuil I"
    g8:
      move_threshold:
        name: "g8 seuil M"
      still_threshold:
        name: "g8 seuil I"

text_sensor:
  - platform: ld2410
    version:
      name: "version du micrologiciel"
    mac_address:
      name: "adresse mac"

select:
  - platform: ld2410
    distance_resolution:
      name: "résolution de distance"
    light_function:
      name: "fonction de lumière"
    out_pin_level:
      name: "niveau de broche de sortie"

button:
  - platform: restart
    icon: mdi:power-cycle
    name: "ESP Reboot"   
  - platform: ld2410
    restart:
      name: "redémarrer"
    query_params:
      name: "paramètres de requête"

Sur l’ESP32 S2

Instructions de Connexion et Flashage

Sur l’ESP32 S2, les broches sont disposées de manière optimale pour faciliter la connexion et la soudure entre le LD2410C et l’ESP32S2. Pour éviter tout court-circuit entre les deux composants, j’ai ajouté une gaine thermo rétractable autour de la prise d’alimentation USB-C par mesure de précaution.

Lors du flashage de l’ESP, n’oubliez pas d’appuyer sur le bouton boot de l’ESP pour entrer dans le mode approprié.

Code source yaml ESP32 S2 :

esphome:
  name: capteur_test
  friendly_name: capteur
  
esp32:
  board: lolin_s2_mini
  framework:
    type: arduino
  
api:
  encryption:
    key: "ULYrurWFc4osrD4+ZOKnXcGG3t8OGMrfqUiNt7p5NeY="
ota:

wifi:
  ssid: xxxxx
  password: xxxxxx


uart:
  tx_pin: GPIO18
  rx_pin: GPIO33
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

ld2410:
  id: "capteur_ld"

binary_sensor:
  - platform: ld2410
    has_target:
      name: "Présence"
    has_moving_target:
      name: "Cible mobile"
    has_still_target:
      name: "Cible Immobile"
    out_pin_presence_status:
      name: "état broche présence"

  - platform: gpio
    pin: 15
    name: "broche gpio présence"
    device_class: presence         

sensor:
  - platform: ld2410
    light:
      name: "lumière"
    moving_distance:
      name: "Distance Déplacement"
    still_distance:
      name: "Distance Immobile"
    moving_energy:
      name: "Énergie Mobile"
    still_energy:
      name: "Énergie Immobile"
    detection_distance:
      name: "Distance de détection"
    g0:
      move_energy:
        name: "g0 Énergie Mobile"
      still_energy:
        name: "g0 Énergie Immobile"
    g1:
      move_energy:
        name: "g1 Énergie M"
      still_energy:
        name: "g1 Énergie I"
    g2:
      move_energy:
        name: "g2 Énergie M"
      still_energy:
        name: "g2 Énergie I"
    g3:
      move_energy:
        name: "g3 Énergie M"
      still_energy:
        name: "g3 Énergie I"
    g4:
      move_energy:
        name: "g4 Énergie M"
      still_energy:
        name: "g4 Énergie I"
    g5:
      move_energy:
        name: "g5 Énergie M"
      still_energy:
        name: "g5 Énergie I"
    g6:
      move_energy:
        name: "g6 Énergie M"
      still_energy:
        name: "g6 Énergie I"
    g7:
      move_energy:
        name: "g7 Énergie M"
      still_energy:
        name: "g7 Énergie I"
    g8:
      move_energy:
        name: "g8 Énergie M"
      still_energy:
        name: "g8 Énergie I"

  - platform: wifi_signal 
    name: Signal Wifi
    id: wifi_signal_db
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    update_interval: 60s
    unit_of_measurement: "%"
    entity_category: "diagnostic"


switch:
  - platform: ld2410
    engineering_mode:
      name: "mode ingénierie"
    bluetooth:
      name: "contrôle bluetooth"

number:
  - platform: ld2410
    timeout:
      name: "délai"
    light_threshold:
      name: "seuil lumière"
    max_move_distance_gate:
      name: "distance déplacement maximal"
    max_still_distance_gate:
      name: "distance Immobile maximal"
    g0:
      move_threshold:
        name: "g0 seuil Énergie M"
      still_threshold:
        name: "g0 seuil I"
    g1:
      move_threshold:
        name: "g1 seuil I"
      still_threshold:
        name: "g1 seuil"
    g2:
      move_threshold:
        name: "g2 seuil M"
      still_threshold:
        name: "g2 seuil I"
    g3:
      move_threshold:
        name: "g3 seuil M"
      still_threshold:
        name: "g3 seuil I"
    g4:
      move_threshold:
        name: "g4 seuil M"
      still_threshold:
        name: "g4 seuil I"
    g5:
      move_threshold:
        name: "g5 seuil M"
      still_threshold:
        name: "g5 seuil I"
    g6:
      move_threshold:
        name: "g6 seuil M"
      still_threshold:
        name: "g6 seuil I"
    g7:
      move_threshold:
        name: "g7 seuil M"
      still_threshold:
        name: "g7 seuil I"
    g8:
      move_threshold:
        name: "g8 seuil M"
      still_threshold:
        name: "g8 seuil I"

text_sensor:
  - platform: ld2410
    version:
      name: "version du micrologiciel"
    mac_address:
      name: "adresse mac"

select:
  - platform: ld2410
    distance_resolution:
      name: "résolution de distance"
    light_function:
      name: "fonction de lumière"
    out_pin_level:
      name: "niveau de broche de sortie"

button:
  - platform: restart
    icon: mdi:power-cycle
    name: "ESP Reboot"   
  - platform: ld2410
    restart:
      name: "redémarrer"
    query_params:
      name: "paramètres de requête"

Il existe de nombreux paramètres possibles pour ce capteur. Les réglages de base fonctionnent bien, cependant, les chiens et les chats sont détectés comme présence, ce qui peut être un inconvénient. Il devrait être possible de régler ce problème en ajustant le volume. En mode ingénieur, il est possible d’explorer les différentes variables pour mieux comprendre le fonctionnement du capteur. Pour ma part, je n’ai pas encore terminé d’étudier toutes les possibilités qu’offre ce produit. Les réglages de base sont déjà très intéressants à exploiter, mais je prévois d’aborder plus en détail ce sujet dans un prochain article. Il gère également la luminosité présente. Le code précédent permet un étalonnage. J’irai plus loin dans mes recherches dès que j’ai un peu plus de temps.

J’ai mis en œuvre mon premier système automatisé avec le LD2410C : la lumière s’allume automatiquement lorsque quelqu’un est dans la pièce et que la luminosité est trop faible 🙂
Cela signifie qu’il n’est plus nécessaire d’éteindre et d’allumer la lumière manuellement 😉

Rien à voir avec les capteurs de mouvements classique, ils ne détectent pas la présence contrairement au LD2410C.

Modélisation 3d de la boite (40mm x 30mm x 20mm):

Télécharger les fichiers 3d

Sur Home Assistant :

I : Immobile
M : Mouvement

étalonnage :

Sources : https://esphome.io/components/sensor/ld2410.html?highlight=ld2410