STA 上报
SLP Radar + WiFi STA + UDP Socket
学习目标
- 掌握雷达 + 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(); // 自动重连
}