简介
在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页面进行实时查看。 并且还支持查看历史记录。 之后也可以将它作为触发器来完成其他的自动化操作等。
附件: