跳转至

STA 上报

SLP Radar + WiFi STA + UDP Socket

前置阅读:基础雷达STA 连接

学习目标

  • 掌握雷达 + WiFi STA 的组合使用
  • 掌握通过 UDP Socket 将雷达结果上报远端
  • 能够在 WS63 上实现感知 → 上网 → 云端上报的完整链路

规格与功能

雷达感知人体存在 → WiFi STA 连接路由器 → UDP Socket 上报结果到远端 PC。

规格项 说明
雷达 SLP Radar,同基础感知
WiFi STA 模式连接路由器
传输 UDP Socket
上报频率 10Hz(雷达帧率)
数据格式 结构化雷达结果帧

程序运行流程:雷达初始化 → WiFi STA 连接 → DHCP 获取 IP → Socket 创建 → 雷达结果回调 → 打包数据 → sendto() → 远端 PC 接收。

基本概念

数据上报链路

flowchart LR
    Radar[雷达感知] --> CB[结果回调]
    CB --> Pack[打包数据帧]
    Pack --> UDP[UDP Socket]
    UDP --> WiFi[WiFi STA]
    WiFi --> Router[路由器]
    Router --> PC[远端 PC]

TCP vs UDP

TCP UDP
可靠性 可靠(重传+确认) 不可靠(可能丢包)
延迟 较高 较低
适合 关键状态变更(人体出现/消失) 高频数据流(10~100Hz)

雷达数据频率较高(10~100Hz),一般用 UDP。关键事件(人体存在状态变化)可用 TCP 补发或应用层加序号+确认。

涉及 API

API 用途
uapi_radar_register_result_cb() Radar 结果回调
wifi_sta_connect() WiFi STA 连接
socket(AF_INET, SOCK_DGRAM) 创建 UDP socket
sendto() UDP 发送

案例操作指导

PC 端运行 UDP 接收程序,Device 连上 WiFi 后自动上报雷达数据。

关键配置

参数 说明
UDP 端口 8888 自定义
服务器 IP PC 局域网 IP 硬编码在代码中
上报频率 10Hz 雷达默认帧率

代码详解

WiFi 连接后启动雷达

static void wifi_ready_cb(void)
{
    // WiFi 连接成功 → 启动雷达 → 创建 Socket
    radar_init();
    radar_start();

    g_udp_sock = socket(AF_INET, SOCK_DGRAM, 0);

    struct sockaddr_in server_addr = {
        .sin_family = AF_INET,
        .sin_port   = htons(8888),
        .sin_addr   = { .s_addr = inet_addr("192.168.1.100") },
    };
    connect(g_udp_sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
}

雷达结果回调中上报

static void radar_result_cb(radar_result_t *result)
{
    // 打包雷达结果
    radar_frame_t frame = {
        .target_count    = result->target_count,
        .is_human_presence = result->is_human_presence,
    };
    memcpy(frame.targets, result->targets,
           result->target_count * sizeof(radar_target_info_t));

    // UDP 发送
    sendto(g_udp_sock, &frame, sizeof(frame), 0, NULL, 0);
}

断线处理

// WiFi 断开 → 停止雷达 → 关闭 Socket
// WiFi 重连 → 重新启动雷达 → 重建 Socket

if (wifi_state == DISCONNECTED) {
    uapi_radar_set_status(STOP);
    close(g_udp_sock);
    wifi_sta_reconnect();  // 自动重连
}