打造可识别静态人体的人体传感器——软件部分
以下方法经本人验证通过,环境如下:
Arduino IDE 1.8.15
PubSubClient 2.8.0
WiFiManager 2.0.4
前言:大部分人入门智能家居之处,最早接触的就是人体传感器,实现简单的如人来开灯,人走关灯的需求。我也不例外,家里各个房间布满了小米或绿米的人体传感器。
但市面上这类传感器因工作原理的原因,实际根本无法识别静态的人体。所以这类传感器只能叫人体移动传感器,算不上是真正意义上的人体存在传感器,导致在很多场景下具有天然的缺陷。
举例说明:人坐在书房看书,保持一段时间禁止后,就会被识别为无人状态,然后灯就关了!同理厕所蹲的时候也会有这种尴尬,人工智能变智障。
网上各种解决方案也有,但都治标不治本,不是我想要的完美方案。因此,我决定自己创造一个!
第一步:选择所需软件库
在之前的文章打造可识别静态人体的人体传感器——方案设计中,我列举了对软件方面的需求。同时,在上一篇文章 打造可识别静态人体的人体传感器——硬件部分 中,我结合需求,MCU选择了ESP-01S。结合自己想要达到的目标,选择了Arduino的以下库,在此对原作者表示感谢:
- 用于实现AP功能,并管理WiFi和MQTT配置的库 WiFiManager https://github.com/tzapu/WiFiManager
- 用于实现连接MQTT服务并发布主题及信息的库PubSubClient https://pubsubclient.knolleary.net/
第二步:编码
这里我使用的是原生的 Arduino IDE 进行编码,参考WiFiManager的示例程序,完成了WiFi的配置、MQTT服务器参数以及主题的配置并将配置保存在ESP闪存中,确保断电有效。同时支持长按微动开关可清除所有配置。
MQTT部分利用PubSubClient连接到本地的mosquitto (如何在本地搭建MQTT服务可参考这篇文章)进行消息发布
接着根据微波雷达模块的通讯协议,写了一个解析函数,在状态发生改变时候(有人变无人或无人变有人)通过MQTT发布消息到服务端。
…