实验六:PC 端多点数据采集实验
一句话理解
把前面学的东西连成一条完整链路:多个传感器节点 → 网关协调器 → 串口 → PC 管理软件。任务一完成"组网 + 数据上传",任务二用 PC 端软件对数据进行观察、分析与管理。
实验目的
- 任务一:利用多个传感器模块与网关协调器组成网络;网关协调器收到无线网络中的数据,传递给 PC 端管理软件;
- 任务二:PC 端管理软件对数据进行观察、分析与管理;
- 综合掌握:多节点组网、协调器串口转发、PC 端数据处理全流程。
实验器材
| 器材 | 数量 | 用途 |
|---|---|---|
| GEC2530 开发板 | 3 块 | 1 网关协调器 + 2 传感器节点 |
| 传感器模块(温度/光照/烟雾等) | 2~3 套 | 采集数据 |
| USB 转串口线 | 1 根 | 协调器 ↔ PC |
| 串口调试助手 / 上位机软件 | 1 套 | PC 端管理软件 |
| IAR EW for 8051 | 1 套 | 编译工程 |
实验原理
🌡️
传感器节点 ×N
采集温度/光照等
→ 无线发送(定时)
→ 无线发送(定时)
📡 无线
🏛️
网关协调器
接收无线数据
→ 串口(UART)转发给 PC
→ 串口(UART)转发给 PC
🔌 串口
💻
PC 管理软件
接收、解析、显示、存储、分析、管理
协调器串口转发流程
协调器收到无线数据后,调用 HAL 串口接口输出:
c
// 在协调器的 AF_INCOMING_MSG_CMD 处理中
case AF_INCOMING_MSG_CMD:
{
afIncomingMSGPacket_t *MSGpkt = (afIncomingMSGPacket_t *)MSGpkt;
uint8 len = MSGpkt->cmd.DataLength + 4; // 加上源地址信息
uint8 buf[20];
// 组帧:源短地址(2) + 数据长度(1) + 数据
buf[0] = LO_UINT16(MSGpkt->srcAddr.addr.shortAddr);
buf[1] = HI_UINT16(MSGpkt->srcAddr.addr.shortAddr);
buf[2] = MSGpkt->cmd.DataLength;
memcpy(&buf[3], MSGpkt->cmd.Data, MSGpkt->cmd.DataLength);
HalUARTWrite(0, buf, len); // 串口输出到 PC
}
break;实验步骤(任务一:组网与数据上传)
步骤 1:组网
- 编译网关协调器固件(角色:协调器);
- 编译 2 个传感器节点固件(角色:终端/路由器,含传感器采集);
- 依次下载,确认三个节点组网成功(协调器屏幕显示各节点短地址)。
步骤 2:配置串口
- 协调器通过 USB 转串口连接 PC;
- 串口助手打开对应 COM 口,波特率与固件一致(如 115200);
- 确认协调器初始化时调用了
HalUARTCfg_t配置串口(波特率、中断模式)。
步骤 3:观察数据上传
- 传感器节点开始周期上报数据;
- 观察 PC 串口助手实时收到数据帧(源地址 + 数据长度 + 数据);
- 记录 2 个节点的数据流。
验证:PC 端能看到两个传感器节点的周期数据 → 组网 + 上传成功。
实验步骤(任务二:PC 端观察、分析与管理)
步骤 1:数据解析
编写简单的 PC 端解析脚本(如 Python)或使用带协议解析的串口工具,将原始帧解析为可读信息:
python
# Python 示例:解析串口帧(源地址2 + 长度1 + 数据)
import serial
ser = serial.Serial('COM3', 115200, timeout=1)
while True:
line = ser.read(20)
if len(line) >= 3:
src = line[0] | (line[1] << 8) # 源节点短地址
length = line[2] # 数据长度
data = line[3:3 + length] # 数据内容
print(f"Node 0x{src:04X}: {data.hex()}")步骤 2:数据展示与存储
- 用表格/曲线展示各节点数据(可用 Excel、Python matplotlib 或上位机);
- 将数据保存为 CSV/数据库,形成历史记录;
- 演示:采集 5 分钟,展示两个节点的数据曲线。
步骤 3:数据管理
- 设定阈值与告警:如温度超过 30℃ 时 PC 端提示告警;
- 实现反向管理:PC 端下发指令 → 协调器 → 指定传感器节点执行(如点亮 LED、控制蜂鸣器);
- 展示"PC 端对节点的管理能力"。
验证:
- 数据曲线正常显示 → 分析成功;
- 阈值告警触发 → 管理成功;
- PC 下发指令节点响应 → 双向链路打通。
实验现象与检查点
| 项目 | 期望现象 |
|---|---|
| 串口数据 | 实时收到两节点数据帧 |
| PC 解析 | 正确显示节点地址与数据值 |
| 数据曲线 | 随时间变化的曲线清晰可见 |
| 阈值告警 | 超阈值时告警提示 |
| 反向控制 | PC 下发指令,节点执行 |
常见问题
- 串口无数据:检查协调器串口初始化、波特率、USB 驱动;
- 数据错乱:注意帧格式两端一致,串口助手关闭"十六进制显示"或统一协议;
- PC 下发失效:确认协调器实现了串口收包 → 无线转发(串口回调中调用
AF_DataRequest)。
思考题
- 为什么需要把"传感器网络"和"PC 端"连接起来?网关协调器在其中的作用是什么?
- 如果传感器节点数量增加到 20 个,PC 端接收与显示会遇到什么问题?如何优化?
- 请设计一个简单的应用场景(如教室环境监测),说明数据如何从节点最终呈现到 PC 端大屏。
实验报告要求
- 实验目的、器材、原理简述(含整体架构图);
- 任务一、任务二的核心代码(协调器串口转发 + PC 解析脚本)及注释;
- 数据曲线/表格截图与现象分析;
- 思考题回答;
- 遇到的问题及解决过程。