[PSOC™] 【英飞凌 CY8CKIT-062S2-AI评测】06MQTT上报雷达存在检测

[复制链接]
60|0
EPTmachine 发表于 2025-11-18 18:59 | 显示全部楼层 |阅读模式

【英飞凌 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上报的情况。

radar_mqtt_upload.png

总结

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

719

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部