Moduł sensora obecności 24 GHz do DIY (Hi-Link HLK-LD2410)

Dla Tych, którzy męczą się z klonami wemos D1mini w połączeniu z tym sensorem, konfiguracja

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

ld2410:
  timeout: 30s
  max_move_distance : 3m
  max_still_distance: 0.75m
  g0_move_threshold: 50
  g0_still_threshold: 20
  g1_move_threshold: 50
  g1_still_threshold: 20
  g2_move_threshold: 40
  g2_still_threshold: 40
  g3_move_threshold: 40
  g3_still_threshold: 40
  g4_move_threshold: 40
  g4_still_threshold: 40
  g5_move_threshold: 40
  g5_still_threshold: 40
  g6_move_threshold: 30
  g6_still_threshold: 15
  g7_move_threshold: 30
  g7_still_threshold: 15
  g8_move_threshold: 30
  g8_still_threshold: 15

sensor:
  - platform: ld2410
    moving_distance:
      name : Moving Distance
    still_distance:
      name: Still Distance
    moving_energy:
      name: Move Energy
    still_energy:
      name: Still Energy
    detection_distance:
      name: Detection Distance
binary_sensor:
  - platform: ld2410
    has_target:
      name: Presence
    has_moving_target:
      name: Moving Target
    has_still_target:
      name: Still Target    

Pierwszy flash z odłączonymi przewodami od RX, TX
Potem podłączamy do GPIO 1 i 3
Odpalamy nawet podłączone do USB komputera i mamy


Dodam, że jestem prawie zielony w ESPHome, mam raptem trzy moduły w tym ten właśnie sensor.
Być może przykładowa konfiguracja zawarta w dokumentacji

# Example configuration entry
uart:
  tx_pin: REPLACEME
  rx_pin: REPLACEME
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

działa u doświadczonych użytkowników , u mnie nawet nie chciała się kompilować
Powodzenia

@szopen jak długi może być przewód łaczący moduł HLK-LD2410 z pinami TX i RX modułu ESP32? Muszą to byc przewody skręcone?

Nigdy nie sprawdzałem tego nawet w specyfikacji (o ile jest gdzieś określone) 256kbps to nie jest “zawrotna prędkość” więc przewody mogą być z pewnością długie (30 metrów bym się nie bał, eksperyment jednak dopiero pokaże czy mam rację…

Zasadniczo RX i TX nie są sygnałami różnicowymi, więc nie ma musu by były przesyłane jedną parą skrętki, ale skrętka lepiej tłumi zakłócenia zewnętrzne niż przewody proste, więc jest wskazana (wręcz w warunkach rzeczywistych puściłbym je prawdopodobnie w parach RX z zasilaniem i TX z masą patrząc od strony czujnika).

Z praktyki - wiele lat używałem połączenia RS232 z kablem długości koło 150m i była wykorzystana skrętka (wtedy to chyba jeszcze kat. 3).

OFF TOPIC
W robocie używam nagminnie RS422 nie zwracając uwagi na długość kabli, ani ilość połączeń pośrednich i jak dotąd nigdy takie połączenie nie było źródłem problemu (no chyba, że są zwarcia lub przerwy), tyle, że sygnał w RS422 jest różnicowy…

wobec powyzszych dyskusji strikte technicznych moje pytanie wydaje sie blahe i trywialne ale i tak je zadam

Postanowilem w koncu zabrac sie za lutowanie i jakies DIY a nie tylko gotowe czujniki, nieskrywana radosc czulem kiedy do LD2410B udalo mi sie ladnie (I za pierwszym razem!) dolutowac kabel usb (prosze sie nie smiac, to bylo moje drugie podejscie do lutowania w zyciu :D)

do rzeczy, w apce HLK czujnik widoczny, firmware podniesiony z 1.07 do 2.04
BLE Scanner rowniez wykrywa, HA nie (mam integracje BLE, USB dongla na ktorym smiga z 15 urzadzen)
Probowalem opisanych wyzej metod - bezskutecznie. Odleglosci od dongla 0,2 - 2m, wpiety i w laptop i w ladowarke sieciowa, usuwalem apke

Pytanie
Istnieje szansa ogarniecia tego po BT ? Brac sie od razu za ESP ? Ogarne to jak lutowalem 2 razy w zyciu ? a moze to jest dobra opcja by zaczac powazniej.

Use case narazie nie ma, jak mi sie uda to uruchomic to bede dopiero myslal co moglbym z tym zrobic :wink:

Upewnij się że aplikacja na telefonie nie jest uruchomiona - LD2410B używa aktywnego połączenia i jak jest połączona z aplikacją to nie połączy się z HA (i odwrotnie). A najlepiej od razu zrób po UART z ESPHome - bluetooth nawet przy najnowszym FW bywa niestabilne, natomiast z ESP zero problemów.

A co do lutowania - porządna cyna z topnikiem (a najlepiej dodatkowo sam topnik) czynią cuda. Praktykuj i będzie lepiej :slight_smile:

2 polubienia

Odpuść sobie BT, to nie działa stabilnie, długo testowałem i zawiesza się, bierz się za połączenie z ESP32.

1 polubienie

Ja w wolnej chwili zrobiłem eksperyment i zamontowałem moduł sensora w obudowie szklanego włącznika Minitiger v2. O dziwo działa naprawdę dobrze. Ten włącznik jest wyposażony w ESP8285 i co gorsza GPIO 1 - TX ma zajęte przez Led do podświetlenia klawisza.
Musiałem trochę zmodyfikować elektronikę, co widać na foto poniżej.


Przewód do LED podłączyłem do wolnego GPIO, które w wersji 3ch, obsługuje przekaźnik.
Bałem się grubości samego szkła i plastików, ale niepotrzebnie, czujnik fajnie reaguje i co najważniejsze, jest niewidoczny i ma stałe zasilanie z 3,3V. Dlaczego 3V ? Bo jest łatwo dostępne obok RX, TX i GND, a po drugie takie zasilanie przewidział najprawdopodobniej producent , bo wyprowadził masę i pin do zasilenia 3,3V na dwóch pinach po przeciwnej stronie PCB

4 polubienia

Zastanawiam się, jak będzie z poprawną pracą i żywotnością w tym ciasnym miejscu. Ten moduł ma tendencję do dość mocnego grzania się

Czas pokaże, ale moduł ma chłodzenie od ściany. Tego nie widać może na foto, ale cały plastik pod sensorem musiałem wyciąć. W innym przypadku przyklejony sensor nie pozwalał na zatrzaśnięcie się szkła. Jednym słowem powiększyłem górny otwór mocujący w plastiku do rozmiaru sensora i pcb sensora jest wkomponowane w wycięcie, a strona bez anten praktycznie dotyka ściany.
Mimo wszystko jak klęknie, to dam znać , a jak nie, to po mięsiącu napiszę jak się sprawuje.

1 polubienie

W ESPHome 2023.7.0 weszła poprawka umożliwiająca zmianę prędkości pracy UARTa dla integracji z LD2410

jak się okazuje 256kbps jest zbyt dużą prędkością dla programowego seriala, więc w przypadku płytek na których nie można użyć seriala sprzętowego jest w końcu dostępne obejście problemu (prędkość seriala w LD2410 trzeba przełączyć na niższą w aplikacji).

Ciekawe jaki to będzie mieć wpływ na całkiem poprawną pracę od dobrego miesiąca. Nie chwalę się bo chcę żeby było wiarygodnie, ale aktualizuję soft bez ingerencji w yamla

Podobno już przy tej prędkości na softowym serialu zdarzają się losowe rebooty ESP82xx.

Myślę, że żaden - zlikwidowano tylko sprawdzenie czy ustawiona prędkość to baud_rate=256000 czyli domyślna, dotychczas nie było możliwe skompilowanie z innymi ustawieniami.

Ja bardziej czekam na zmergowanie tego PR:

Czyli cały konfig wyniesony do HA. Powinno znacznie ułatwić i przyspieszyć ustawianie czujnika i (chyba) będzie można zapomnieć o aplikacji.

1 polubienie

Dziekuję za rozjaśnienie tego co pewnie gdzieś bym wyczytał :slight_smile:

PS Po dość długim czasie poprawnej pracy modułu zamontowanego w szklanym włączniku, mogę polecić takie rozwiązanie z czystym sumieniem.
Ważne tylko, żeby zapewnić minimum chłodzenia, ( opis wyżej)

PPS Gdyby ktoś zrobił aktualizację ESPHome , a posiada w/w moduły sensora obecności, to bez zmiany konfiguracji dla tego sensora aktualizacja firmware nie będzie możliwa.
Stary konfig

ld2410:
  timeout: 15s
  max_move_distance : 3m
  max_still_distance: 3m
  g0_move_threshold: 50
  g0_still_threshold: 0
  g1_move_threshold: 50
  g1_still_threshold: 0
  g2_move_threshold: 40
  g2_still_threshold: 40
  g3_move_threshold: 99
  g3_still_threshold: 99
  g4_move_threshold: 99
  g4_still_threshold: 99
  g5_move_threshold: 99
  g5_still_threshold: 99
  g6_move_threshold: 99
  g6_still_threshold: 99
  g7_move_threshold: 99
  g7_still_threshold: 99
  g8_move_threshold: 99
  g8_still_threshold: 99

Jest zastąpiony nową wersją , która pozwala na zmiany bezpośrednio w interfejsie HA

number:
  - platform: ld2410
    timeout:
      name: timeout
    light_threshold:
      name: light threshold
    max_move_distance_gate:
      name: max move distance gate
    max_still_distance_gate:
      name: max still distance gate
    g0:
      move_threshold:
        name: g0 move threshold
      still_threshold:
        name: g0 still threshold
    g1:
      move_threshold:
        name: g1 move threshold
      still_threshold:
        name: g1 still threshold
    g2:
      move_threshold:
        name: g2 move threshold
      still_threshold:
        name: g2 still threshold
    g3:
      move_threshold:
        name: g3 move threshold
      still_threshold:
        name: g3 still threshold
    g4:
      move_threshold:
        name: g4 move threshold
      still_threshold:
        name: g4 still threshold
    g5:
      move_threshold:
        name: g5 move threshold
      still_threshold:
        name: g5 still threshold
    g6:
      move_threshold:
        name: g6 move threshold
      still_threshold:
        name: g6 still threshold
    g7:
      move_threshold:
        name: g7 move threshold
      still_threshold:
        name: g7 still threshold
    g8:
      move_threshold:
        name: g8 move threshold
      still_threshold:
        name: g8 still threshold

Po takiej zmianie mamy

2 polubienia

Cześć,
mam taki sam problem, ale ja używam nodemcu… Żonglowanie RX/TX nic nie daje :confused: Status wszystkich encji jest nieznany i nie mam już pomysłu co z tym zrobić…

Teraz mam podpięte pod piny RX/TX, w kodzie opisane jako RX/TX, GPIO1/GPIO3 - bez różnicy tak samo działa, czyli nie działa…

NodeMCU ma ten sam problem co D1 - piny RX i TX są na stałe podpięte do mostka UART.

Z aplikacji zmień prędkość portu na jakąś mniejszą (bo defaultowa będzie za duża dla softwareowego seriala) i użyj inne piny niż GPIO1 i GPIO3 (po prostu jakieś nie zajęte innym sprzętem).

uzyłem GPIO13/GPIO15 i nic

rozumiem, żeby spróbować na przykład GPIO10/GPIO9

Niestety nic to nie daje… moze gdzies w kodzie jest blad…

esphome:
  name: czujnik-obecnosci-lazienka
  friendly_name: Czujnik_obecnosci_lazienka

esp8266:
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "Urs855b0nRuqzj8kaOH0MwUoW5/KXAbjmt+hlG11BKI="

ota:
  password: "9355a8d8f0dc93a44e5696a27a243a2c"

wifi:
  ssid: xxxxxx
  password: xxxxxx

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Czujnik-Obecnosci-Lazienka"
    password: "MbFwCsLeBCL0"

uart:
  id: ld2410_uart
  tx_pin: GPIO10
  rx_pin: GPIO9
  baud_rate: 115200
  parity: NONE
  stop_bits: 1

ld2410:
  uart_id: ld2410_uart

number:
  - platform: ld2410
    timeout:
      name: Timeout
    light_threshold:
      name: Light Threshold
    max_move_distance_gate:
      name: Max Move Distance Gate
    max_still_distance_gate:
      name: Max Still Distance Gate
    g0:
      move_threshold:
        name: g0 move threshold
      still_threshold:
        name: g0 still threshold
    g1:
      move_threshold:
        name: g1 move threshold
      still_threshold:
        name: g1 still threshold
    g2:
      move_threshold:
        name: g2 move threshold
      still_threshold:
        name: g2 still threshold
    g3:
      move_threshold:
        name: g3 move threshold
      still_threshold:
        name: g3 still threshold
    g4:
      move_threshold:
        name: g4 move threshold
      still_threshold:
        name: g4 still threshold
    g5:
      move_threshold:
        name: g5 move threshold
      still_threshold:
        name: g5 still threshold
    g6:
      move_threshold:
        name: g6 move threshold
      still_threshold:
        name: g6 still threshold
    g7:
      move_threshold:
        name: g7 move threshold
      still_threshold:
        name: g7 still threshold
    g8:
      move_threshold:
        name: g8 move threshold
      still_threshold:
        name: g8 still threshold

select:
  - platform: ld2410
    distance_resolution:
      name: Distance Resolution
    baud_rate:
      name: Baud Rate
    light_function:
      name: Light Function
    out_pin_level:
      name: Out Pin Level

sensor:
  - platform: ld2410
    light:
      name: Light
    moving_distance:
      name : Moving Distance
    still_distance:
      name: Still Distance
    moving_energy:
      name: Move Energy
    still_energy:
      name: Still Energy
    detection_distance:
      name: Detection Distance
    g0:
      move_energy:
        name: g0 move energy
      still_energy:
        name: g0 still energy
    g1:
      move_energy:
        name: g1 move energy
      still_energy:
        name: g1 still energy
    g2:
      move_energy:
        name: g2 move energy
      still_energy:
        name: g2 still energy
    g3:
      move_energy:
        name: g3 move energy
      still_energy:
        name: g3 still energy
    g4:
      move_energy:
        name: g4 move energy
      still_energy:
        name: g4 still energy
    g5:
      move_energy:
        name: g5 move energy
      still_energy:
        name: g5 still energy
    g6:
      move_energy:
        name: g6 move energy
      still_energy:
        name: g6 still energy
    g7:
      move_energy:
        name: g7 move energy
      still_energy:
        name: g7 still energy
    g8:
      move_energy:
        name: g8 move energy
      still_energy:
        name: g8 still energy

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

switch:
  - platform: ld2410
    engineering_mode:
      name: Engineering Mode
    bluetooth:
      name: Control Bluetooth

button:
  - platform: ld2410
    factory_reset:
      name: Factory Reset
    restart:
      name: Restart
    query_params:
      name: Query Params

text_sensor:
  - platform: ld2410
    version:
      name: Firmware Version
    mac_address:
      name: MAC

Wybierasz te GPIO do użytku losowo?

“zdrowe” GPIO w ESP8266/8285 to 4, 5, 12, 13 i 14 (czyli D1, D2 i D5-D7 na twojej płytce jeśli to NodeMCU v2 lub v3) wystarczy przeczytać pierwszy lepszy bryk (już był linkowany gdzieś wyżej) dotyczący podstaw “pinologii” tego MCU…

Skąd taki pomysł?

Przecież te GPIO w ESP8266 akurat służą do komunikacji między prockiem, a wlutowaną pamięcią flash, więc jeśli by się to udało skompilować to gwarantuję, że firmware będzie się wywracać w parę sekund.
(na szczęście jest jakieś podstawowe sprawdzanie poprawności kodu, więc albo w ogóle się nie skompiluje, albo zobaczysz przynajmniej ostrzeżenia o konfiguracji “pod górę”)

Wierzę, że tego YAMLa skopiowałeś od kogoś komu działa, więc jeśli

  • wybierzesz zdrowe GPIO,
  • połączysz poprawnie (RXa do TXb, TXa do RXb, masa do masy, a zasilanie jakoś sensownie)
  • ustawisz parametry portu z aplikacji producenta (aktualna wersja jest po angielsku, co jest sporym krokiem naprzód, bo większość z nas używała apki po chińsku) tak by pasowały do możliwości programowego portu szeregowego (19200bps to podobno max)

To powinno “odpalić od strzała” (na początek proponuję jakąś prostszą konfigurację - same podstawy, potem sobie to rozwiniesz na full-wypasa)

korzystałem z tego obrazka z pinoutem:

  • połączysz poprawnie (RXa do TXb, TXa do RXb, masa do masy, a zasilanie jakoś sensownie)
    tak, RX z LD do TX w ESP, TX z LD do RX w ESP.

Wróce do domu, to będę dalej kombinował.

Jak przypuszczam ten obrazek chciałeś załączyć (źródło wyżej)

ALE, to że jakiś pin MCU jest wyprowadzony na złącze GPIO nie znaczy, że można go wykorzystać do dowolnego celu - na pinach GPIO6-GPIO11 we wszystkich konstrukcjach płytek prototypowych z ESP8266 jest już podpięty systemowy flash, de facto jest tam magistrala SPI, którą można wykorzystać też w innych celach do podpięcia jakichś wybranych urządzeń SPI - np. karty SD (stąd też zapewne litera S na początku opisów na soldermasce, bo chodzi o SDIO), ale nie są to piny do wykorzystania w dowolny sposób, czyli należy założyć że do wszystkich innych celów są one zakazane, swoją drogą nadruki na soldermasce “Sx” sugerują inne zastosowanie niż “zwykłe digital GPIO” które są oznaczane zwyczajowo “Dx”, czy analogowe “Ax”.

Może jeszcze ze 3 słowa o numeracji na obrazku oraz aliasach dostępnych w ESPHome
czarne pola to numeracja pól lutowniczych modułu ESP12 lub jego odpowiednika (na zdjęciu wypust pod nazwą ESP8266MOD, w środku pod blaszanym ekranem na miniaturowej PCB on zawiera ESP8266, kość flash oraz trochę innych elementów głównie pasywnych), ta numeracja nie ma zastosowania w ESPHome i nie ma nic wspólnego z numeracją “pinów” stosowaną w ESPHome
bladopomarańczowe pola to numeracja IOxx, nie wiem po co ona komu tzn.wiem :stuck_out_tongue: , ale nie ma zastosowania w ESPHome
bladofioletowe pola to numeracja GPIOxx - tego rodzaju aliasy są dostępne w ESPHome zawsze
niektóre pozostałe opisy mogą istnieć jako aliasy, ale nie jest to regułą

teraz kwestia zapisu w konfiguracji YAML, tam gdzie podajemy numer pinu (de facto nie pinu tylko numer GPIO!),
dla przykładu użyłem GPIO2, skrótowo 2, z aliasami w/g definicji d1_mini czyli D4 lub LED

czyli jakiś zapis postaci

   pin: REPLACEME

może przykładowo wyglądać tak

   pin: 2

albo nieco czytelniej, bo widać,że w tym miejscu się odwołujemy do numeracji GPIO

   pin: GPIO2

jeśli definicja płytki istnieje (poniższa pasuje dla płytek opartych na ESP8266 WeMOS D1 mini i NodeMCU) pod warunkiem użycia dedykowanych im definicji

   pin: D4

a poniższa już pasuje tylko dla płytki D1 mini i pochodnych, ale NIE pasuje do NodeMCU w żadnej wersji (przy założeniu, że mamy nadal na myśli GPIO2)

   pin: LED

UWAGA w przypadku definicji nodemcuv2 zapis LED wskazuje na GPIO16

Aktualną tabelę tych dodatkowych aliasów można zawsze sprawdzić na githubie w pliku
dla ESP8266 i ESP8285

dla całej obsługiwanej linii ESP32 (niezależnie od użytego MCU, niektóre nowsze modele wciąż mają status eksperymentalny)

dla RP2040 (obsługa jest eksperymentalna, więc nie każda integracja musi działać)

1 polubienie