HLK-LD2450 mit ESP32 für Home Assistant bereitstellen

Hallo Bastelfreunde! Ich habe mir mal ein solches Modul bestellt (HLK-LD2450). Das soll ja revolutionär im Bereich der Präsenzmelder sein.

Soweit ich es verstanden habe läuft das Modul grundsätzlich eigenständig nur mit +5V versorgt und kann über eine Android/iOS App per Bluetooth verbunden bereits Ergebnisse liefern. Das würde ich mir jetzt als erstes mal anschauen wollen. Auf dem Board ist eine 4polige JST-1.5 Buchse, ein 8-poliger 1,5mm Header, sowie ein paar Testpoints.

Und tatsächlich - bei 5V zieht der Sensor zwischen 120-150 mA und man kann mittels der HKLRadarApp auf beeindruckende Weise sehen wo man gerade im Raum rumspaziert.

Die Erkennung von bis zu 3 Targets ist allerdings recht lückenhaft, hängt aber vielleicht mit der Position des Sensor zusammen?

Update #1: Verbindung zum ESP8266 ==> Klappt nicht!

Ich habe einen meiner überzähligen “Wemos D1 mini” (mit ESP8266 Modul/Chip) verwendet. Bei diesen muss man etwas mit den Bezeichnungen aufpassen, da die GPIO-Pins der MCU über das Modul zum Board ein paarmal die Namen wechseln, da entsteht schnell Verwirrung. Für den DL2450 brauchen wir eine einfache UART, also RX und TX.

Wemos Pin “D1” (=GPIO5) führe ich an RX vom DL2450
Wemos Pin “D2” (=GPIO4) führe ich an TX vom DL2450
Und noch +5V und GND an das DL2450 Board

Jetzt geht es an die Konfiguration für ESPHome. Ich erstelle ein neues Device und füge folgendes an die Config YAML an um die UART zu initialisieren und den ld2450 Treiber auf die UART zu binden:

uart:
  id: uart_pro01_ld2450
  tx_pin: GPIO5     # -> an RX des LD2450
  rx_pin: GPIO4     # -> an TX des LD2450
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
  rx_buffer_size: 512

ld2450:
  id: ld2450_pro01
  uart_id: uart_pro01_ld2450

Die Baudrate steht im Datenblatt des LD2450, ebenso 8N1 für die Bitübertragung. Damit erstmal geflashed und probiert.

Leider klappt das nicht, der ESP8266 führt immer wieder einen Watchdog-Reset durch, vermutlich ist er mit der Soft-Serial und einer Baudrate von 256k schlichtweg überfordert.

[20:36:57][C][safe_mode:118]: Unsuccessful boot attempts: 1
[20:36:57][I][app:091]: Running through setup()
[20:36:57][D][number:034]: 'Pro01 mmWave Timeout' >> 5.00
[20:37:06] [20:37:06][D][number:034]: ets Jan 8 2013,rst cause:4, boot mode:(3,6)
[20:37:06] [20:37:06]wdt reset

Update #2: Das runtersetzen der Baudrate war leider ebenfalls nicht erfolgreich. Ich probiere es jetzt mit einem stärkeren Chip, einem ESP32-C6.

Update #3: Verbindung mit ESP32-C6

Und tatsächlich, mit einem leistungsstärkeren ESP funktioniert der Sensor auf Anhieb!

Hier die vollständige Konfiguration für ESPHome:

uart:
  id: uart_pro01_ld2450
  tx_pin: GPIO5     # -> an RX des LD2450
  rx_pin: GPIO4     # -> an TX des LD2450
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
  rx_buffer_size: 512

ld2450:
  id: ld2450_pro01
  uart_id: uart_pro01_ld2450

binary_sensor:
  # LD2450 Präsenz
  - platform: ld2450
    ld2450_id: ld2450_pro01
    has_target:
      id: mmwave_pro01_has_target
      name: "Pro01 mmWave Präsenz"
      device_class: occupancy
    has_moving_target:
      name: "Pro01 mmWave Bewegung"
      device_class: motion
    has_still_target:
      name: "Pro01 mmWave Stillstand"
      device_class: occupancy

sensor:
  # LD2450 Basis-Sensoren (optional, aber fürs Debug super)
  - platform: ld2450
    ld2450_id: ld2450_pro01
    target_count:
      name: "Pro01 Targets gesamt"
    still_target_count:
      name: "Pro01 Targets still"
    moving_target_count:
      name: "Pro01 Targets bewegend"
    target_1:
      x:
        name: "Pro01 Target1 X"
      y:
        name: "Pro01 Target1 Y"
      speed:
        name: "Pro01 Target1 Speed"
      angle:
        name: "Pro01 Target1 Winkel"
      distance:
        name: "Pro01 Target1 Distanz"

number:
  - platform: ld2450
    ld2450_id: ld2450_pro01
    presence_timeout:
      name: "Pro01 mmWave Timeout"

switch:
  - platform: ld2450
    ld2450_id: ld2450_pro01
    bluetooth:
      name: "Pro01 LD2450 Bluetooth"
    multi_target:
      name: "Pro01 Multi-Target Tracking"

text_sensor:
  - platform: ld2450
    ld2450_id: ld2450_pro01
    version:
      name: "Pro01 LD2450 Firmware"
    mac_address:
      name: "Pro01 LD2450 BT MAC"

Infos: LD2450 Sensor - ESPHome - Smart Home Made Simple

Update 4:

Ich glaube das Hauptproblem ist nicht die CPU-Leistung, sondern die Tatsache das ESPHome beim ESP8266 eine Softserial (UART Emulation per Software) durchführt und erst mit ESP32 Chips einen echten Hardware-UART nutzen kann. Softserial ist für solche Baudraten einfach nicht geeignet.

2 „Gefällt mir“

Ich habe mal einen LD2410 auf einem D1 Mini (ESP8266) zum Laufen bekommen. Das hat so gerade eben noch funktioniert, wenn man das Logging abschaltet und keine weiteren Sensoren an den D1 Mini anschließt. Der ESP8266 scheint speichermäßig mit einem LD2410 bereits am Anschlag zu sein. Da ich immer noch weitere Sensoren anschließe und mich nicht mit “Bytes zählen” quälen wollte, wurde das LD24xx Projekt mit ESP8266 von mir eingestellt

Ich tütftele jetzt noch an der “nicht-mehr-erkennung”. Sobald ich aus dem Erfassungsbereich trete bleiben die letzten Parameter erhalten, auch Presence detected und das für sehr lange Zeit (habs nicht gemessen aber mehrere Minuten) Ich meine da Parameter für timeouts/last-seen gesehen zu haben.

Die FW 2.04.23101915 habe ich bereits drauf, die soll man ja per HLK-App updaten.

Update: Ich denke ich werde auch die Anzahl der Sensoren einschränken müssen, denn das Teil ist ganz schön “chatty” und für eine einfache Präsenzmeldung eines Lichtschalters reicht ja ein Binary-Switch aus.

Mei Fazit: Der LD2450 taugt nicht als Präsenzmelder. Ich habe es nun mit einem LD2410 gemacht und der arbeitet reibungslos, wie erwartet! Dazu mehr in einem andere Thread…

1 „Gefällt mir“

Servus
Ich kann deine Aussage nicht bestätigen. Habe hier 5Stück laufen, teilweise auch mit weiteren Sensoren und Aufgaben dran. Bin sehr Zufrieden damit und habe absolut Null Probleme. Funktionieren alle einwandfrei. Sind alles Esp32 Node MCUs. Keine 8266.

greez
bb

D.h. bei dir wird Presence ordentlich bzw. überhaupt abgebildet?

Natürlich, ich nutze hauptsächlich “Presence” als Trigger für meine Lichtsteuerungen.
Manchmal auch Moving und Still Target.
Bevor ich zu HA und ESPHome gewechselt habe, da hatte ich auch die x,y Information ausgewertet und daraus die Entfernung und Winkel berechnet. Das war aber selbstgemachte ESP Firmware. Mit ESPhome habe ich das nicht implementiert.
Target_Count habe ich nicht in Verwendung.
Du schreibts weiter oben das er nicht sofort erkennt wenn du den Erfassungsbereich verlässt. Ja, manchmal ist da ein paar Sekunden Verzögerung, mir scheint es hängt vom Winkel ab. Wenn du direkt hinter einer Mauer verschwindest erkennt er es nahezu sofort. Entfernst du dich aber langsam so kann es manchmal so 20-30sec dauern.
Aber wie gesagt, soweit bin ich sehr zufrieden mit den Teilen.

gruß
bb