【英飞凌 CY8CKIT-062S2-AI评测】03雷达传感器存在检测
https://bbs.21ic.com/icview-3496036-1-1.html
(出处: 21ic电子技术开**坛)
【英飞凌 CY8CKIT-062S2-AI评测】05MQTT实现LED、按键的监控
https://bbs.21ic.com/icview-3496315-1-1.html
(出处: 21ic电子技术开**坛)
上述帖子中对雷达存在检测以及MQTT上报开发板外设的功能进行说明,在此基础上,将雷达的存在检测结果使用MQTT协议上报,将雷达设备信息接入物联网。
1、创建雷达存在主题
雷达存在结果的上报需要使用MQTT的发布功能,将结果发布到MQTT网络中,供订阅方获取数据。在mqtt_client_config.h中添加雷达存在结果相关的主题。
#define MQTT_PUB_RADAR_PRESENCE_TOPIC "radar_presence"
对应的添加雷达存在检测的枚举变量以及信息结构体,以及在publisher_task函数中添加对于雷达检测事件的发布处理。
typedef enum
{
PUBLISHER_INIT,
PUBLISHER_DEINIT,
PUBLISH_MQTT_MSG,
PUBLISH_MQTT_RADAR_MSG
} publisher_cmd_t;
/* Structure to store publish message information. */
cy_mqtt_publish_info_t publish_radar_info =
{
.qos = (cy_mqtt_qos_t) MQTT_MESSAGES_QOS,
.topic = MQTT_PUB_RADAR_PRESENCE_TOPIC,
.topic_len = (sizeof(MQTT_PUB_RADAR_PRESENCE_TOPIC) - 1),
.retain = false,
.dup = false
};
void publisher_task(void *pvParameters)
{
while (true)
{
/* Wait for commands from other tasks and callbacks. */
if (pdTRUE == xQueueReceive(publisher_task_q, &publisher_q_data, portMAX_DELAY))
{
switch(publisher_q_data.cmd)
{
....
case PUBLISH_MQTT_RADAR_MSG:
{
/* Publish the data received over the message queue. */
publish_radar_info.payload = publisher_q_data.data;
publish_radar_info.payload_len = strlen(publish_radar_info.payload);
result = cy_mqtt_publish(mqtt_connection, &publish_radar_info);
if (result != CY_RSLT_SUCCESS)
{
printf(" Publisher: MQTT Publish failed with error 0x%0X.\n\n", (int)result);
/* Communicate the publish failure with the the MQTT
* client task.
*/
mqtt_task_cmd = HANDLE_MQTT_PUBLISH_FAILURE;
xQueueSend(mqtt_task_q, &mqtt_task_cmd, portMAX_DELAY);
}
print_heap_usage("publisher_task: After publishing an MQTT message");
break;
}
}
....
}
2、雷达检测处理
在雷达存在检测的回调函数中,根据不同的存在检测结果,生成不同的信息,并通过队列发送到发布任务中处理,用于雷达存在检测结果的上报。
void presence_detection_cb(xensiv_radar_presence_handle_t handle,
const xensiv_radar_presence_event_t* event,
void *data)
{
(void)handle;
(void)data;
publisher_data_t publisher_q_data;
/* Assign the publish command to be sent to the publisher task. */
publisher_q_data.cmd = PUBLISH_MQTT_RADAR_MSG;
if (!ce_app_state.verbose)
{
switch (event->state)
{
case XENSIV_RADAR_PRESENCE_STATE_MACRO_PRESENCE:
memset(radar_publish_info,0,24);
printf("macro presence %" PRIi32 " %" PRIi32 "\n",
event->range_bin,
event->timestamp);
sprintf(radar_publish_info,"macro presence %" PRIi32 " %" PRIi32 "\n",
event->range_bin,
event->timestamp);
publisher_q_data.data=radar_publish_info;
xQueueSend(publisher_task_q, &publisher_q_data,0);
break;
case XENSIV_RADAR_PRESENCE_STATE_ABSENCE:
printf("absence %" PRIu32 "\n", event->timestamp);
memset(radar_publish_info,0,24);
sprintf(radar_publish_info,"absence %" PRIu32 "\n", event->timestamp);
publisher_q_data.data=radar_publish_info;
xQueueSend(publisher_task_q, &publisher_q_data,0);
break;
default:
printf("[MSG] ERROR: Unknown reported state in event handling\n");
break;
}
}
/* save the last reported event state */
ce_app_state.last_reported_event = *event;
}
程序烧录到开发板后,可以看到雷达存在检测的输出以及通过MQTT上报的情况。

总结
通过PSoC6 AI Evaluation Kit的评测,体验英飞凌的ModusToolbox在工程创建和组件管理上的便利功能,加上Git版本管理支持下的"Train Model"代码管理,可以方便实现复杂工程的搭建和移植。DEEPCRAFT Stuido的Ready AI Model让AI应用快速部署成为可能,降低通用AI场景中程序的开发难度。
附件:MQTT_LED.zip