2022年7月25日: 初次上传, bug多多
本项目制作一个人体存在传感器, 以合宙ESP32-C3开发板和海凌科LD2410 24G雷达为核心, 可用于检测空间内是否走动或者静坐的人体.进而通过 MQTT 发送给 Home Assistant(以下简称HA), 与全屋其它智能家居联动.
相较于市面上相对便宜的人体移动传感器, 当您蹲坑, 玩手机, 玩电脑的时候, 它依旧能够检测到, 通过合理的设置, 它可以完美的做到"人来灯亮, 人走灯灭".
相较于市面上其它的人体存在传感器, 该设备在正式使用之前有一个"环境测定"的过程, 即在正式使用之前, 需要测试安静状态以及各种典型场景下的能量分布, 并因此设定阈值和延时参数. 进而达到最好的使用体验. 相应的, 这也是一种比较 geek 的玩法.
本教程非保姆级教程, 因此制作本设备需要具备以下条件或技能:
如果以上技能点您均有涉猎, 并且想拥有一个成本又低(相对于市面上动辄2 300的人体存在传感器)自定义程度又高的人体存在传感器. 那么就接着往下看, 跟我一起制作吧. 相信在经历过最初的几个bug之后, 您会忍不住多做几个, 然后每个房间都放一个哦.
制作的bom清单如下
| 序号 | 物料名 | 数量 | 购买链接 | 备注 |
|---|---|---|---|---|
| 1 | 合宙ESP32-C3开发板 | 1 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.2aec2e8dbS5kTJ&id=666974425430&_u=nb2r1tt4ddf | 如果是第一个建议购买标准版, 方便调试bug. 后续即可用简约版, 可以省3块钱 |
| 2 | LD2410 雷达模组 | 1 | https://detail.tmall.com/item.htm?id=676636157827&spm=a1z09.2.0.0.2aec2e8dbS5kTJ&_u=nb2r1ttcb52&skuId=5032266170747 | 如果只购买一个建议买带线版, 贵3块钱, 但是就不用买下面的线了 |
| 3 | 5pin 1.27排线 | 1 | https://item.taobao.com/item.htm?spm=a230r.1.14.58.6e8a313dAzXlvx&id=522088093369&ns=1&abbucket=14#detail | |
| 4 | 510K 0603 电阻 | 1 | https://item.taobao.com/item.htm?spm=a230r.1.14.23.3c594f192LvJEv&id=632537083461&ns=1&abbucket=14#detail | |
| 5 | GL5528 光敏电阻 | 1 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.2aec2e8dbS5kTJ&id=650736922312&_u=nb2r1tt5af2 | 一起买10个也就一块钱 |
| 6 | 10cm长细导线 | 2 | 家里有啥剪啥 |
以上链接仅为推荐链接, 旨在说明物料内容, 强烈建议自行比价, 寻找价格最低的购买
用510K 0603电阻连接开发板的 3.3V 和 IO02 引脚
适当剪短GL5528的引脚后, 用导线连接其中一个引脚和开发板上的IO02引脚, 再用另一根导线连接GL5528的另一个引脚和开发板上的GND(GL5528的两个引脚是无极性的, 随便焊)


将您购买到的5pin 1.27连接线插入雷达模块, 然后按照下面连线表将LD2410和ESP32开发板连接起来
| LD2410引脚编号 | 开发板引脚编号 | 功能 |
|---|---|---|
| 5 | +5V | +5V |
| 4 | GND | GND |
| 3 | IO00 | UART_TX(LD2410端) |
| 2 | IO01 | UART_RX(LD2410端) |
| 1 | 剪断 |
本人GL5528 和 雷达 使用热熔胶固定, ESP32开发板使用2mm厚度的双面胶固定. 您家里如果没有这些材料, 可以自行寻找合适的固定材料.
重要提示: 本版本bug较多, 请仔细阅读下面的每一句话, 可以少踩几个坑
请多点耐心, 后面会慢慢修复的
有可能遇到的问题
注1: 如果没看到, 请确保1: 设备已正确上电, 此时板卡上会有一个红色LED微亮 2: 微信小程序请求蓝牙权限时已通行. 3: 手机打开蓝牙功能 4: 设备上电后2min内打开了微信小程序
注2: 如果有变化, 请重新操作一次, 如果还是有变化, 则需要接入串口调试, 观看串口的打印信息
注3: 如果还是显示未连接, 请检查信息的正确性. 使用其它设备接入试试.
完成配网后, 点击"监控"页面, 当看到跳跃的红色和蓝色两条线时, 恭喜您, 雷达已经开始工作啦.
首先, 我们认识一下界面:

接下来, 请将设备放置到您待监测的空间内(注1), 进行"环境测定"的工作来调整阈值, 放置设备需要遵循以下几个原则:
放好设备后, 人离开待监测空间, 让其处于一种"无人存在"的状态, 观察雷达采集到的能量值, 应该两条线都处于比较低的位置, 通常静止状态的整条曲线都处于20以下. 如果您的设备达不到这种状态, 请为设备选一个别的位置, 如果必须处于这个位置, 则说明环境比较差, 可能会影响效果. 确定好位置后, 调整两条线的阈值(注2), 使其保持高于当前状态的能量分布
然后人进入待监测空间, 模拟在其中"正常活动"的状态, 比如蹲坑, 做饭, 看书, 刷手机等(尽量保持正常状态, 没必要特意屏气特意考验雷达的能力), 查看雷达的能量分布. 此时应该有好几个点都高于"无人存在"状态. 则可以通过把那几个点对应的阈值调整到介于"无人存在"和"正常活动"状态的中间, 设备便依次判断是否有人存在.
接下来模拟"存在干扰"的状态, 比如在卫生间使用时, 如果人只是从卫生间门口经过肯定是不希望开灯的. 则不停的模拟人在卫生间门口经过的状态, 观察当前的能量分布, 然后调整阈值, 保证所有的阈值点都超过当前的能量分布.
总结:
调整好后, 恭喜您, 您就得到一个专属于您当前环境的"人体存在传感器"啦
有可能遇到的问题
注1: 如果挪动空间需要把设备重新上电, 请遵循以下步骤:
1. 设备断电
2. 重启微信小程序(按照配网.4的步骤)
3. 设备上电, 看到微信小程序下方显示 "蓝牙 已连接 HMConfigWifi-IDXXXXXXXXXXXX"
4. 稍等5s后, 点击读取设置, 显示连接成功
注2: 调整过程中, 有可能出现手滑导致小圆点超出图表区, "不见了"的情况, 这时, 请点击右下方的"设置", 然后再点击"监控", 就会发现小圆点又回来了
目前该页主要设置延时, 即以1秒10次的频率持续检测, 必须连续N次检测到当前状态后, 才会最终做出状态的判定. 该功能可以进一步排除一些偶发性干扰.
在 configure.yaml 中, 添加代码如下:
sensor:
- platform: mqtt
name: 'esp32_主卫_exist'
state_topic: 'homeassistant/sensor/ESP32_IDXXXXXXXXXXXX/state'
value_template: '{{ value_json.human_exist }}'
unique_id: 'id_ESP32_human_exist_IDXXXXXXXXXXXX_t'
value_template: >-
{% set tt = value_json.human_exist %}
{%- if tt == 2 -%}
有人运动
{%- elif tt == 1 -%}
有人静止
{%- elif tt == 0 -%}
未检测到
{%- else -%}
未知状态
{%- endif -%}
- platform: mqtt
name: 'esp32_主卫_ldr'
state_topic: 'homeassistant/sensor/ESP32_IDXXXXXXXXXXXX/state'
value_template: '{{ value_json.ldr_value }}'
unique_id: 'id_ESP32_ldr_value_IDXXXXXXXXXXXX_t'
unit_of_measurement: 'R'
把其中的 XXXX 换成您在微信小程序里看到的 "蓝牙 已连接 HMConfigWifi-IDXXXXXXXXXXXX" 中的12位代码(注1), name字段可以换成便于您识别的名称后, 保存.
回到HA, 点击"检查配置", 没有问题后, 点击下面的"手动配置的MQTT实体"
然后, 就可以在"实体注册表"页面, 看到您的设备啦.
有可能遇到的问题
注1: 如果您没有事先记录, 那么现在需要重启小程序才行
esp32-c3.json 放到 C:\Users\用户名\.platformio\platforms\espressif32@4.2.0\boards 文件夹中, 再重新编译就好了, 或者就是修改工程目录中的 platformio.ini 文件中 board 这一项, 改为自己的板卡ID.以上所有的注, 皆是因为各种bug引起的. 包括
低功耗处理, 使用电池供电
目前版本bug较多, 不着急的话, 可以等我修复bug后再复刻.
诚邀一位有兴趣的微信小程序开发者, 帮我完善一下工程, 本人水平实在有限

$ claude mcp add human_exist_device \
-- python -m otcore.mcp_server <graph>