简介
在23年的时候买了一个深圳觅感科技的5.8G低功耗雷达模块,它的输出足够简单(当检测到有物体移动的时候输出高电平, 如果没有物体移动的话输出低电平),最近开了个物联网模块的专题, 于是想着能不能把它也集成到HA里, 其应用场景还是蛮多的。 比如说检测到有人移动之后触发摄像头进行拍照。

接线图示意:

接线比较简单, 仅仅是引出了一个条线到GPIO6.
代码部分
当前的工程是在上一个文章【分享评测,赢取加热台】集成AHT10湿温度传感器到Homeassistant 的工程上修改的。 首先需要初始化GPIO6 为输入模式。
void init_radar()
{
gpio_config_t io_conf = {
.pin_bit_mask = (1ULL << GPIO_NUM_6), // 设置 GPIO6
.mode = GPIO_MODE_INPUT, // 设置为输入模式
.pull_up_en = GPIO_PULLUP_DISABLE, // 不使能上拉
.pull_down_en = GPIO_PULLDOWN_DISABLE, // 不使能下拉
.intr_type = GPIO_INTR_DISABLE // 不使能中断
};
gpio_config(&io_conf);
}然后创建一个任务,不间断的读取这个IO的状态(或者使用中断)
void radar_task(void *param)
{
while (1)
{
int level = gpio_get_level(GPIO_NUM_6);
printf("GPIO6 level: %d\n", level);
vTaskDelay(pdMS_TO_TICKS(100));
}
}此时烧录之后的现象如下, 如果雷达检测到有物体移动的话,那么输出高电平。 否则输出低电平、

然后在上述的雷达任务中做一点小小的修改, 使其发送MQTT消息到MQTT服务器
void radar_task(void *param)
{
while (1)
{
cJSON *root = cJSON_CreateObject();
int level = gpio_get_level(GPIO_NUM_6);
char level_str[2];
sprintf(level_str, "%d", level);
cJSON_AddStringToObject(root, "target", level_str);
char *json_string = cJSON_PrintUnformatted(root);
cJSON_Delete(root); // 别忘了释放 cJSON 对象
if (json_string)
{
printf("JSON Data: %s\n", json_string);
esp_mqtt_client_publish(client, "radar", json_string, 0, 1, 0);
free(json_string);
}
vTaskDelay(pdMS_TO_TICKS(100));
}
}接着将程序烧录到开发板中, 使用MQTT客户端观察MQTT观察现象。 此时已经可以正确的接受雷达传感器的数据了。 接下来我们将它接入到HA

首先连接上远程的香橙派, 然后登录进HA的docker 容器

编辑configuration.yml
mqtt:
sensor:
- name: "Bedroom Temperature"
state_topic: "bedroom/temperature"
unit_of_measurement: "..C"
value_template: "{{ value_json.temperature }}"
- name: "Bedroom Humidity"
state_topic: "bedroom/temperature"
unit_of_measurement: "%"
value_template: "{{ value_json.humidity }}"
- name: "Radar Presence"
state_topic: "radar"
value_template: "{{ value_json.target }}"多加了一个雷达的配置。 然后在HA的控制台中重新加载HA的配置
此时便可以在HA的实体中找到这个雷达的配置选项了。

手机端

总结
在本篇文章中我们成功的将雷达传感器接入打了HA, 使其当人员移动的时候用户可以在手机或者web页面进行实时查看。 并且还支持查看历史记录。 之后也可以将它作为触发器来完成其他的自动化操作等。
附件:
我要赚赏金
