用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动

2024-07-07 21:18:12 18点赞 123收藏 16评论

书接上回,拆了领普的ES1人在传感器,发现核心部件就是LD2410B。

https://post.smzdm.com/p/a8pokr56/

海凌科LD2410B

LD2410B 人体存在传感器介绍

LD2410B 是一款高精度人体存在传感器,广泛应用于智能家居、办公自动化和安全监控等领域。它通过检测微波信号的变化来感知人体的存在,即使在静止状态下也能精确检测。

用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动

那么只要将LD2410B接入自己的可联网控制板,并写入驱动代码,就能制作自己的人体存在传感器。这里选用ESP32模块,能接入wifi,能接入homeassistant,有大量的例程参考,正所谓前人栽树后人乘凉,能CV就CV。理论上更为便宜的ESP8266也可以。

ESP32

ESP32 模块介绍

ESP32 是由乐鑫科技(Espressif Systems)开发的一款高性能、低功耗 Wi-Fi 和双模蓝牙芯片。该模块广泛应用于物联网 (IoT)、可穿戴设备、智能家居、工业自动化等领域。

用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动

一般来说,开发ESP32需要用到ESP-IDF,并在Arduino IDE等开发环境下写代码烧录,这需要懂一点代码,懂一点单片机。那么有没有更为简单的方法呢?

当然有!ESP32作为一款炙手可热的芯片,在市场拥有巨大的保有量,以及众多的开发者。其中ESPHOME可以说是一个专门为ESP芯片和homeassistant智能家庭定做的傻瓜式变成下载平台。

ESPHOME

ESPHome 介绍

ESPHome 是一个用于创建自定义固件以控制 ESP8266 和 ESP32 芯片的工具。它简化了物联网设备的配置、管理和集成,尤其适用于智能家居自动化系统。

主要特点

简化配置:

使用 YAML 文件进行配置,易于编写和维护。

丰富的配置选项,支持多种传感器、执行器和组件。

与 Home Assistant 集成:

无缝集成 Home Assistant,提供自动发现功能,方便设备管理和控制。

支持通过 Home Assistant 界面直接管理和更新设备固件。

广泛的硬件支持:

支持各种 ESP8266 和 ESP32 板子。

支持多种传感器和执行器,如温湿度传感器、继电器、LED 控制等。

自动更新:

通过 OTA(空中下载)更新设备固件,无需物理连接设备即可进行固件升级。

强大的功能:

支持复杂的自动化逻辑、脚本和定时任务。

支持 Wi-Fi 和蓝牙连接,适应多种应用场景。

总的来说,通过ESPhome,可以在网页上在线编译ESP系列的固件,并且通过有线或者WiFi的方式下载到ESP模块内。具体步骤是:

1、将ESP32模块通过USB串口连接到电脑

2、在ESPhome WEB界面连接设备,写入esphome专用的底层固件,并配置wifi信息联网。

3、刷入的底层固件后就可以在ESPhome里编写YAML文件生成固件,网页编译,在线OTA刷入,十分方便。

ESPHOME WEB界面,这个是免安装的直接打开 https://web.esphome.io/ESPHOME WEB界面,这个是免安装的直接打开 https://web.esphome.io/

安装ESPHOME

安装ESPhome的方法有两种,一种是在homeassistant的加载项里面直接安装addon,另一种是通过docker安装。

特别注意点是homeassistant有多种安装方式,我们一般用dokcer和虚拟机VM的方式安装homeassistant OS,只有在homeassistant os上才能直接安装esphome,通过docker安装的hs是没有的。至于homeassistant的安装可以搜索站内其他文章,这里默认大家都会homeassistant了。

所以这里建议用docker的方式安装ESPhome。同样这里默认大家都会docker了。

用群晖的,可以在注册表映像里面拉esphome/esphome,然后一路新建-next-启动就行。用docker管理器的,先登录终端,然后用root权限输入

docker run -d --name="ESPHome" -e TZ=Asia/Shanghai -v /home/esphome:/config -v /run/udev:/run/udev --privileged --restart=always --net=host esphome/esphome

安装好后,输入http://主机地址:6052就能访问ESPHOME了。小tips:现在dockerhub被和谐,可能需要一些魔法才能直接拉取,不然可能会报错。

ESPHOME的dashboard控制面板ESPHOME的dashboard控制面板

这里要说明ESPHOME与ESPHOME WEB的区别,ESPHOME WEB 是一个在线网站无需安装,网址为https://web.esphome.io/,在这里可以直接给esp32安装底层固件以便在ESPHOME里面操作。而ESPHOME 要通过homeassistant OS里面的插件或者docker安装。

开始合成

准备工具:ESP32模块,LD2410B模块,模块转杜邦线,USB线,电脑一台。

准备环境:装好homeassistant,装好ESPHOME,浏览器一个。

模块连接

模块连接模块连接

ESP32的IO17和IO16分别当做RX和TX,和LD2410B的TX和RX连接。不同的模块的IO口有出入,这里随便选两个就好,只要自己记住后面代码用到。由此可见只需要两个IO口便可,所以esp8266也是足够的。

用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动

安装底层固件

首先,将ESP32模块连接到电脑并装好串口驱动,记录串口号如COM4口。打开esphome web网页,点击connect并选择COM4

esphome webesphome web

然后点击蓝色的prepare for fist install,网页会自动识别esp32并自动下载底层固件。安装完成可以设置路由器的ssid以及密码,随后ESP32就会自动联网了。点击visit device会跳转到esp32的后台,在后台我们能看到esp32模块的名字ESP32-XXXX-XXXX,以及当前模块的IP地址。

编写固件

打开ESPHOME(docker方式或者HSos方式),这时一般就会显示discover模块了。我们在右下角点击“new device”-“continue”-然后把发现的名字填进去ESP32-XXXX-XXXX,然后选择ESP32模块的型号,这时会自动生成一个api秘钥(后面会用到)该发现的模块就会从“discover”变成“online”了。

esphomeesphome重要的秘钥重要的秘钥

点击模块下面的edit,进入编程。

默认生成的信息默认生成的信息

这些默认的信息橙色的都不要改动,是esp32的联网信息,秘钥凭证等。

牛逼的代码

就像上文说的,ESP32已经有海量成熟的代码,LD2410B也是一款商用的传感器,在开源社区已经有人合成了!所以只管CV!快乐CV!

但是有一些坑踩过的还是要造福值友的,就是要知道改什么地方,CV的价值就在于知道怎么CV能跑起来。

首先将上面默认生成的信息备份到记事本,再将YAML里面的信息全部删掉,将下面贴出的代码全部复制上去。然后需要改动的地方:

1、上面橙字的秘钥(改成记事本内备份的)
2、esp32:

board:后面的型号(改成记事本内备份的实际型号)
3、tx_pin和rx_pin的实际IO口(杜邦线连哪个改哪个)

#Define Project

substitutions:

name: diy-ld2410

device_description: ${name} guide by SmartHomeScene.com

esphome:

name: "${name}"

friendly_name: LD2410人在传感器

comment: DIY LD2410 人在传感器 with ESPHome by 核动力井盖

on_boot:

- priority: 900.0

then:

- lambda: |-

id(cpu_speed) = ESP.getCpuFreqMHz();

#Define Board Type

esp32:

board: esp-wrover-kit

framework:

type: arduino

# Enable Home Assistant API

api:

encryption:

key: "i+KlOgNL6ovigWNWNaXfKXyXFA/1SGLjSGXsyGuKb6M="

logger:

ota:

- platform: esphome

password: "558899a70f2ef41d3b2a2e270afbfc98"

captive_portal:

wifi:

ssid: !secret wifi_ssid

password: !secret wifi_password

#Enable fallback hotspot (captive portal) in case wifi connection fails

ap:

ssid: "Esphome-Web-17Eda4"

password: "RIxA0lr8td3y"

#Open web port for browser access

web_server:

port: 80

uart:

tx_pin: GPIO19

rx_pin: GPIO18

baud_rate: 256000

parity: NONE

stop_bits: 1

globals:

- id: cpu_speed

type: int

restore_value: no

initial_value: "0"

ld2410:

id: ld2410_radar

#Configuration entities

number:

- platform: ld2410

timeout:

name: Radar Timeout

max_move_distance_gate:

name: Radar Max Move Distance

max_still_distance_gate:

name: Radar Max Still Distance

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

# Setting ending of zone 1 occupancy

- platform: template

name: "Radar End Zone 1"

id: radar_z1_end

device_class: distance

min_value: 0

max_value: 600

step: 1

mode: box

update_interval: never

optimistic: true

restore_value: true

initial_value: 10

icon: "mdi:arrow-collapse-right"

entity_category: CONFIG

# Setting ending of zone 2 occupancy

- platform: template

name: "Radar End Zone 2"

id: radar_z2_end

device_class: distance

min_value: 0

max_value: 600

step: 1

mode: box

update_interval: never

optimistic: true

restore_value: true

initial_value: 36

icon: "mdi:arrow-collapse-right"

entity_category: CONFIG

# Setting ending of zone 3 occupancy

- platform: template

name: "Radar End Zone 3"

id: radar_z3_end

device_class: distance

min_value: 0

max_value: 600

step: 1

mode: box

update_interval: never

optimistic: true

restore_value: true

initial_value: 100

icon: "mdi:arrow-collapse-right"

entity_category: CONFIG

#Occupancy sensor

binary_sensor:

- platform: ld2410

has_target:

name: Radar Target

id: radar_has_target

has_moving_target:

name: Radar Moving Target

has_still_target:

name: Radar Still Target

## Set Up Radar Zones Based On Distance

- platform: template

name: "Radar Zone 1 Occupancy"

device_class: occupancy

icon: mdi:motion-sensor

lambda: |-

if ((id(radar_has_target).state) && (id(radar_detection_distance).state < id(radar_z1_end).state)) {

return true;

} else {

return false;

}

- platform: template

name: "Radar Zone 2 Occupancy"

device_class: occupancy

icon: mdi:motion-sensor

lambda: |-

if ((id(radar_has_target).state) && ((id(radar_z1_end).state < id(radar_detection_distance).state) && (id(radar_detection_distance).state < id(radar_z2_end).state))) {

return true;

} else {

return false;

}

- platform: template

name: "Radar Zone 3 Occupancy"

device_class: occupancy

icon: mdi:motion-sensor

lambda: |-

if ((id(radar_has_target).state) && ((id(radar_z2_end).state < id(radar_detection_distance).state) && (id(radar_detection_distance).state < id(radar_z3_end).state))) {

return true;

} else {

return false;

}

#Exposes configuration and status sensors

sensor:

#Device UPTIME

- platform: uptime

name: Uptime

id: sys_uptime

update_interval: 60s

#Device CPU Speed

- platform: template

name: "ESP Cpu Speed"

accuracy_decimals: 0

unit_of_measurement: Mhz

lambda: |-

return (id(cpu_speed));

entity_category: "diagnostic"

#Device Memory

- platform: template

id: esp_memory

icon: mdi:memory

name: ESP Free Memory

lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;

unit_of_measurement: "kB"

state_class: measurement

entity_category: "diagnostic"

#Device Temperature

- platform: template

id: sys_esp_temperature

name: ESP Temperature

lambda: return temperatureRead();

unit_of_measurement: °C

device_class: TEMPERATURE

update_interval: 60s

#Device RSSI

- platform: wifi_signal

name: RSSI

id: wifi_signal_db

update_interval: 60s

entity_category: "diagnostic"

- platform: ld2410

moving_distance:

name: Radar Moving Distance

id: moving_distance

still_distance:

name: Radar Still Distance

id: still_distance

moving_energy:

name: Radar Move Energy

still_energy:

name: Radar Still Energy

detection_distance:

name: Radar Detection Distance

id: radar_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

#Exposes control buttons

button:

- platform: restart

icon: mdi:power-cycle

name: "ESP Reboot"

- platform: factory_reset

disabled_by_default: True

name: "Factory Reset ESP"

id: factory_reset_all

- platform: ld2410

factory_reset:

name: "Factory Reset Radar"

restart:

name: "Restart Radar"

query_params:

name: query params

#Exposes control switches

switch:

- platform: ld2410

bluetooth:

name: "Radar Control Bluetooth"

id: radar_bluetooth

engineering_mode:

name: "Radar Engineering Mode"

time:

- platform: sntp

id: time_sntp

#Radar firmware version

text_sensor:

- platform: ld2410

version:

name: "Radar Firmware Version"

#Set distance resolution - 0.75m or 0.2m

select:

- platform: ld2410

distance_resolution:

name: "Radar Distance Resolution"

然后SAVE-INSTALL,等待编译。编译过程需要自动下载对应的库,可能也需要魔法来加速。编译完后就可以通过无线ota,或者有线串口的方式下载模块里面了。

重启模块电源

homeassistant添加传感器

如无意外,重启后模块就能正常工作了。可以通过esphome控制面板看到模块的信息,点该模块下visit按钮

模块后台信息模块后台信息

在homeassistant中,点击配置-设备与集成,一般如果模块正常工作就会出现在“已发现”列表里面,如果没有就右下角“添加集成-ESPHOME-输入模块的IP”,这时候HS会问你要API秘钥,可以在上述备份的记事本中找到,或者在ESPHOME控制面板的show api key中看到,即可。

api keyapi keyhomeassistant添加模块后的样子homeassistant添加模块后的样子

至此已经可以在HS中自定义各种联动场景了。

总结:

合成成功后的人体存在传感器可以说在功能上和领普的es1十分接近了,diy的话成本15+15=30吧,如果用裸esp32核心,或者esp8266会更便宜,适合手头上已经有esp芯片的垃圾佬。而领普es1各种券后也能做到44元的超好价格,还能直接在米家超控,也很超值!

但是垃圾佬的乐趣就是在于折腾,是吧!用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动

下面欣赏下人体存在传感器-探索者版本的美照用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动

人体存在传感器-探索者版本人体存在传感器-探索者版本领普es1领普es1手机客户端hs界面手机客户端hs界面

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

MIJIA 米家 空调伴侣2 智能插座 白色

MIJIA 米家 空调伴侣2 智能插座 白色

68元起

Xiaomi 小米人在传感器 白色

Xiaomi 小米人在传感器 白色

129元起

Xiaomi 小米 米家智能插座3

Xiaomi 小米 米家智能插座3

52.3元起

Xiaomi 小米 ZSWG01CM 智能中枢网关 黑色

Xiaomi 小米 ZSWG01CM 智能中枢网关 黑色

289元起

Xiaomi 小米 SJWS01LM 水浸卫士 白色

Xiaomi 小米 SJWS01LM 水浸卫士 白色

56元起

德路普 已接入米家蓝牙mesh通断器小爱同学控制模块语音远程遥控灵动版 Mini通断器

德路普 已接入米家蓝牙mesh通断器小爱同学控制模块语音远程遥控灵动版 Mini通断器

暂无报价

Aqara 绿米联创 E1 青春版 智能无线网关 白色

Aqara 绿米联创 E1 青春版 智能无线网关 白色

126元起

禹泰电工 泰电工 米家APP控制智能插座 基础款

禹泰电工 泰电工 米家APP控制智能插座 基础款

16.58元起

无线开关 蓝牙版

无线开关 蓝牙版

32.9元起

MIJIA 米家 宠物喂食器2

MIJIA 米家 宠物喂食器2

349元起

MIJIA 米家 3 智能温湿度计 白色

MIJIA 米家 3 智能温湿度计 白色

42.9元起

Lenovo 联想 智能门锁E20 指纹锁 C级锁芯 入户门 防盗门锁 门卡密码锁 电子锁 六种解锁方式

Lenovo 联想 智能门锁E20 指纹锁 C级锁芯 入户门 防盗门锁 门卡密码锁 电子锁 六种解锁方式

391元起

Aqara 绿米联创 KTBL12LM 智能空调插座 白色

Aqara 绿米联创 KTBL12LM 智能空调插座 白色

249元起

360 V30pro 3D人脸识别智能锁

360 V30pro 3D人脸识别智能锁

1499元起

Xiaomi 小米 IJIA 米家 Xiaomi 小米 MIJIA 米家 人体传感器2S 居 智能监测联动

Xiaomi 小米 IJIA 米家 Xiaomi 小米 MIJIA 米家 人体传感器2S 居 智能监测联动

69元起

京东京造 温湿度计 mini款

京东京造 温湿度计 mini款

19.9元起
16评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
相关话题
最新文章 热门文章
123
扫一下,分享更方便,购买更轻松