LD2410+ESP-01自制人体存在传感器,接入Home Assistant

LD2410+ESP-01自制人体存在传感器,接入Home Assistant 简介面向嵌入式与物联网爱好者的LD2410雷达人体存在传感器制作方案基于HLK-LD2410B毫米波雷达模块与ESP-01/01S Wi-Fi模组配合ESPHome固件实现离线人体存在检测可接入Home Assistant等智能家居平台。资源共6个文件压缩包仅638KB以5张接线与调试截图为主另含一份esp01-esphome-ld2410.yaml配置模板能清晰展示硬件连接与雷达参数设置思路。目前已有980人学习下载。内容包含完整硬件清单与采购建议如LD2410B蓝牙版约22元、ESP-01S约5元、AMS1117降压模块及10K电阻等并针对ESP-01与01S的差异给出简明的电阻取舍说明接线图直接标注模块连接配合yaml文件可快速完成首次烧录与在线升级适合想在智能家居或安防场景中低成本落地人体存在检测的入门开发者。 家里的智能设备多了以后我有一个东西一直没找到满意的方案——人体存在检测。刚开始图省事客厅和走廊都装了带PIR人体红外传感器的开关结果问题一大堆坐在沙发上看书超过几分钟灯灭了进卫生间洗澡如果没怎么大动作灯也灭了。PIR本质上是“移动检测器”它只对红外辐射的突变敏感人静止的时候它什么都感知不到。后来我把目标换成了24GHz毫米波雷达方案用一片LD2410雷达模块加上一个ESP-01模块自己做了一个人体存在传感器这才算把“存在”这件事真正解决了。这篇文章把我从选型、接线、烧录固件到校准避坑的完整过程写下来想自己动手给Home Assistant这类平台加存在检测的可以直接照着走。1. 为什么选这个组合LD2410毫米波雷达与ESP-01的选型逻辑做人体存在传感器市面上无非几种方案PIR红外传感器、摄像头视觉方案、ToF激光测距、毫米波雷达。PIR的问题上面说过它识别不了静止的人。摄像头方案识别率倒是高但涉及隐私装在卫生间和卧室里总觉得别扭。ToF激光模块检测距离短角度窄放在天花板上基本废掉。毫米波雷达方案相对最合适它靠多普勒效应加上微动检测能判断一个空间里是否有人哪怕这个人几乎没在动。LD2410是Hi-Link出的一款24GHz毫米波雷达模块几块钱到十几块钱一片支持检测距离0.75米到6米可调既能输出是否有人也能输出目标的距离和运动/微动能量值。和同门更高端的LD2450相比LD2410主打“有人/无人”这种开关量状态功耗也更低做存在传感器刚好够用。另一个关键点是LD2410有一个OUT引脚可以配置成有目标时输出高电平相当于一个“雷达版PIR”不接串口也能直接用集成门槛很低。ESP-01则是ESP8266芯片的最小系统板支持Wi-Fi体积比一个硬币大不了多少价格几块钱拿来做联网桥接最合适。为什么不选ESP32或者ESP32-C3ESP32性能确实强但体积大、价格高这个项目里只跑一个MQTT发布和串口解析ESP8266的性能绰绰有余。ESP-01的缺点是可用IO口少只有GPIO0和GPIO2好在LD2410主要走串口GPIO口只用于扩展控制基本够用。我也考虑过买现成的毫米波存在传感器成品搜了一圈支持Home Assistant的成品普遍在两三百块钱功能确实省心但价格摆在那。自己做这套LD2410大约20元左右ESP-01十几元加上电源和外壳材料不超过50元相当于用一下午的折腾换两三百元的成品。而且自制意味着固件逻辑完全可控比如我想把“移动目标距离”和“静态目标距离”分开上报成品传感器大多做不到。2. 接线与上电ESP-01启动模式、电源顺序和LD2410物理对接硬件连接看着简单实际上有几个非常容易翻车的点。LD2410的工作电压是5VESP-01的工作电压是3.3V两者不能共用一个电源轨否则不是LD2410欠压就是ESP-01过压烧掉。我的供电方案是用一个USB 5V电源给LD2410直接供电再用一个AMS1117-3.3稳压小板从5V线上分出3.3V给ESP-01。两步之间要用共地也就是AMS1117的GND、LD2410的GND、ESP-01的GND必须接在一起否则串口信号没有参考电平大概率收不到数据。LD2410一共有6个引脚VCC、GND、OUT、RX、TX。其中RX是接收脚TX是发送脚串口电平是3.3V所以可以直接连ESP-01的串口不用做电平转换。接线对应关系如下LD2410 VCC5V - USB 5V电源正极LD2410 GND - 电源负极同时接AMS1117的GNDLD2410 TX - ESP-01 RXGPIO3LD2410 RX - ESP-01 TXGPIO1LD2410 OUT - 暂不接调试时接GPIO2备用AMS1117 5V输入 - USB 5V正极AMS1117 3.3V输出 - ESP-01 VCCESP-01的CH_PDEN - 3.3V必须接高否则模块不启动ESP-01最坑的一点是启动时序。它的GPIO0和GPIO2在启动瞬间有特定的电平要求GPIO0必须为高电平才进入正常运行模式GPIO2也必须保持高电平。如果这个引脚被外部设备拉低芯片会一直进不了系统或者启动异常。LD2410的OUT引脚默认在有人的时候输出高电平很多人图省事直接把OUT接到GPIO2结果发现上电后人站在雷达前反而启动失败。我调试时遇到过一次后来把OUT和GPIO2之间的直连断开用串联一个10k电阻的方式做隔离并在固件里把GPIO2配置为仅输入模式问题就消失了。如果你不用OUT引脚就直接悬空不要为了省线强行接。上电顺序也很讲究。最好的顺序是先把USB电源断开完成所有接线然后先给LD2410上电等两秒再给ESP-01上电。原因是LD2410刚上电时内部初始化需要一点时间如果ESP-01先启动并开始往串口发配置指令此时LD2410还没就绪指令可能被吞掉。虽然固件里可以加延时重试逻辑但硬件上养成先后上电的习惯能少踩很多坑。3. 给ESP-01烧录自写固件从Arduino IDE到第一行日志ESP-01的出厂固件默认是AT指令固件不能直接干我们想做的事需要先刷成Arduino程序。准备一个USB转TTL模块比如CH340或者CP2102接线方式和正常串口通信不一样不要搞反USB-TTL 3.3V - ESP-01 VCCUSB-TTL GND - ESP-01 GNDUSB-TTL TX - ESP-01 RXGPIO3USB-TTL RX - ESP-01 TXGPIO1USB-TTL 3.3V - ESP-01 CH_PDEN注意USB-TTL一定要用3.3V档位不能用5V否则模块大概率当场报废。先把GPIO0接地再插上USB上电这样ESP-01才会进入烧录模式。如果用的USB-TTL模块带DTR/RTS自动控制有些可以直接用软件控制进入烧录模式但很多便宜模块没这个功能老老实实用杜邦线把GPIO0接到GND最稳妥。烧录完成之后断开GPIO0的接地线重新上电才能正常运行固件。在Arduino IDE里配置ESP8266开发板环境需要在“开发板管理器地址”里添加 http://arduino.esp8266.com/stable/package_esp8266com_index.json 然后搜ESP8266安装版本我用的2.7.4比较稳定。开发板选择“Generic ESP8266 Module”Flash Size选1MB如果没有1MB选项就选512KB看你的ESP-01具体版本丝印上有标注。烧录波特率建议用115200不要用默认的9600太慢。烧录前先点一下“编译并上传”IDE会自动编译并尝试连接串口。如果提示连接超时多半是GPIO0没有正确接地或者CH_PD没接3.3V挨个排查。我给的固件逻辑分三层第一层是WiFi连接连不上就每5秒重试同时用板载蓝色LED闪烁提示第二层是MQTT连接和时钟同步保证和Home Assistant的通信链路通畅第三层是串口接收LD2410数据解析出存在状态后通过MQTT发布。这样即使MQTT服务端暂时不可用传感器本身还能继续采集数据。启动日志是很好的调试工具。我第一次刷完程序串口打印一直显示WiFi连接失败检查很久发现是AMS1117输出电流不够ESP-01连接WiFi瞬间电流能达到300mA我一共加了两个传感器共用一组稳压导致电压被拉低到2.8V。后来单独给ESP-01用了一路AMS1117问题才解决。所以供电余量一定要留足不要卡着最大电流设计。4. 解析LD2410的串口帧把F4 F5 F6开头的字节流变成有人/无人判断LD2410的串口默认波特率是2560008位数据位、无校验、1位停止位。这个波特率不是常规的9600或115200ESP8266的硬件串口可以直接设置但注意不能和调试串口共用。我在固件里用Serial.begin(256000)初始化硬件串口同时用SoftwareSerial或者干脆把日志输出到TCP服务避免调试信息串扰。LD2410的主动上报帧格式是一个固定结构帧头是F4 F5 F6帧尾是F8 F7 F6中间包含长度、数据类型、目标状态、距离和能量数据。当数据类型为0x0002时就是“目标存在信息上报”。我的固件核心逻辑是在不断涌入的字节流里找到帧头读取长度校验校验和再提取数据。判断有人的关键字段是两个字节的目标状态值0x0000表示无人0x0001表示有人。后面的四个字节分别是移动目标距离、移动目标能量、静态目标距离、静态目标能量。距离单位是厘米能量单位是百分比。移动目标指正在运动的人静态目标指几乎不动但呼吸和微动仍然被雷达感知到的人。这也正是LD2410相比PIR最核心的优势——真正的存在检测。下面这段代码是我实际在用的解析逻辑把关键的判断写得很直接bool parseLD2410(uint8_t *buf, int len, uint8_t *result) { for (int i 0; i len - 7; i) { if (buf[i] 0xF4 buf[i1] 0xF5 buf[i2] 0xF6) { uint16_t payloadLen buf[i4] 8 | buf[i3]; uint16_t dataType buf[i6] 8 | buf[i5]; if (dataType 0x0002 payloadLen 8) { uint8_t checksum 0; int head i 5; for (int j 0; j payloadLen - 1; j) { checksum buf[head j]; } if (checksum ! buf[head payloadLen - 1]) return false; uint16_t targetState buf[i8] | (buf[i9] 8); result[0] (targetState 0x0001) ? 1 : 0; result[1] buf[i10]; // 移动目标距离/cm result[2] buf[i11]; // 移动目标能量 result[3] buf[i12]; // 静态目标距离/cm result[4] buf[i13]; // 静态目标能量 return true; } } } return false; }代码里的校验和算法是从数据类型开始到最后一个数据字节所有字节累加取低8位和帧里的校验和字节对比。这个校验逻辑不复杂但能拦住大部分串口干扰和接线松动导致的乱码。解析出数据之后我的MQTT发布策略是状态变化立即上报数据不变时每30秒上报一次。立即上报保证Home Assistant里的自动化响应足够快30秒周期则是防止网络闪断导致状态不同步。我测试下来从雷达检测到有人到Home Assistant收到MQTT消息延迟大约在200到400毫秒之间用来控制灯光绰绰有余。Home Assistant那边只需要加一个MQTT binary sensor配置payload_on为onpayload_off为off状态主题写清楚就能自动识别。传感器接入后还能把距离和能量值作为附加属性显示方便在仪表盘上直接看到检测状态排查问题的时候特别好用。5. 实测、校准与避坑安装位置、灵敏度参数和干扰问题排查固件跑通只是第一步真正决定这个存在传感器好不好用的是安装位置和参数校准。LD2410的检测范围是扇形区域水平角度约60度垂直角度约30度安装时最好贴着天花板或者高墙上让雷达波束斜向下覆盖整个房间。我试过放在桌面高度效果很差人一旦坐下上半身被桌面遮挡雷达接收不到微动信号灯照样灭。后来挪到2.2米高度斜向下45度安装才基本做到全屋覆盖。LD2410有几个关键参数需要通过串口命令修改默认6米检测距离对大多数室内场景太远容易把窗外走动的人、隔壁房间的人也算进来。我通过官方上位机软件把距离调到3米同时把静止灵敏度调低一点。如果不想用上位机也可以用串口直接发命令修改但命令帧格式比较繁琐容易出错个人建议还是先用USB转TTL接电脑用HLK-LD2410上位机配置好再装回去配置文件会存在模块内部掉电不丢。实测中遇到的干扰主要有两类。一类是风扇和空调气流叶片转动和气流波动会被雷达识别成移动目标导致房间没人时状态一直保持有人。解决方法是把存在状态判断逻辑改为同时参考移动能量和静态能量当移动能量低于阈值且静态能量低于阈值时才判定为无人这个逻辑我写在MQTT发布之前。另一类是狭窄走廊的角落反射雷达波束打到墙角形成多次反射出现“幽灵存在”我在卫生间的镜柜对面就遇到过把安装角度略微偏转让波束不要垂直对准镜子问题就消失了。还有一个容易被忽略的坑是ESP-01的WiFi稳定性。ESP8266在信号弱的地方会出现定期掉线重连一旦掉线MQTT状态停留在上一次的值Home Assistant会以为一直有人。我的解决办法是启用MQTT的Last Will and Testament遗嘱消息当ESP-01异常断开时MQTT broker自动发布一个offline状态Home Assistant收到后就能执行安全的默认动作比如延迟一段时间后关灯。这个细节在实际使用中非常重要如果你只做定时上报而没有遗嘱消息掉线一次就可能导致灯彻夜亮着。校准方面我整理了常用的几个参数对照检测距离建议3米到4米覆盖一个中等大小房间即可太远容易误报移动灵敏度室内无风环境调到80左右有空调或风扇环境调到50以下静态灵敏度用于检测静坐的人建议保持默认过低会导致静止误判为无人OUT输出模式保持默认的有目标输出高电平方便用逻辑分析仪验证模块是否工作整套项目做完之后我在客厅、卧室、卫生间分别装了一个运行了一个多月整体体验比之前任何一款PIR方案都好。唯一的遗憾是ESP-01的GPIO口太少想加光线传感器做联动就得换ESP-01M或者ESP-12F但作为纯雷达存在检测方案LD2410加ESP-01的组合在性价比和稳定性之间找到了一个比较舒服的平衡点。如果你也想在家里的智能自动化里加入存在检测这套方案值得试一试。本文还有配套的精品资源点击获取