利用QT实现ZigBee拓扑结构显示和数据采集

概述

老师要求实现ZigBee的串口输出拓扑结构,小白觉得这样不够直观,就用QT来写一个上位机对拓扑信息进行组合,利用QT的QTreeView来直观的显示拓扑信息,并且采集数据。效果图如下:
利用QT实现ZigBee拓扑结构显示和数据采集
利用QT实现ZigBee拓扑结构显示和数据采集

Zigbee代码流程

     协调器处理流程
利用QT实现ZigBee拓扑结构显示和数据采集
   终端节点处理流程
利用QT实现ZigBee拓扑结构显示和数据采集
先讲解下这里的数据格式 协调器发送给串口的数据格式如下:
一个字节的数据类型再加真正的数据 数据类型为0代表拓扑数据 为1代表传感器数据
利用QT实现ZigBee拓扑结构显示和数据采集
所有终端节点都会在加入网络时发送拓扑数据给协调器
拓扑的数据结构如下:
利用QT实现ZigBee拓扑结构显示和数据采集
发送拓扑数据的函数 SendInfo如下:
利用QT实现ZigBee拓扑结构显示和数据采集
最终在终端节点的信息循环处理函数中添加如下代码:
利用QT实现ZigBee拓扑结构显示和数据采集
这里设置的事件其实和拓扑无关,这个是为了节点定时发送数据而设置的事件。关于节点的传感器数据被我限定成一个字节大小 因为我这里传输的是温度数据,而温度超不过一个字节。然后再在信息处理添加以下代码实现节点的定时发送数据:

利用QT实现ZigBee拓扑结构显示和数据采集
GenericApp_SendTheMessage()为发送传感器数据的代码 这里不给出 后面会给出整个的下载链接

而协调器在接收到节点传来的数据时 通过簇ID辨认是传感器数据还是拓扑数据 代码如下
利用QT实现ZigBee拓扑结构显示和数据采集
这样就完成了整个数据的采集和接受 最后协调器的串口接收回调函数代码如下:
利用QT实现ZigBee拓扑结构显示和数据采集
通过判断上位机发来的命令是否是topology 是的话就发送拓扑信息 到这里Zigbee节点的编程就结束了


QT代码流程

QT关于串口的使用请参考这篇文章:QT串口通信(QSerialPort)

QT关于QTreeView的基本使用请参考这篇文章:Qt树形控件QTreeView的使用1(节点的创建删除)

这里只着重讲解创建树的函数 在创建该树前需手动创建协调器的节点!
利用QT实现ZigBee拓扑结构显示和数据采集
该函数调用方法如下:
利用QT实现ZigBee拓扑结构显示和数据采集
该函数接收一个父对象的短地址和父对象的item
然后遍历所有节点,如果有父对象节点等于我们所给节点的 就创建该节点并将该节点添加到父节点下面,这里思路很简单 主要是一些QT函数的用法要注意。

再给出遍历树的代码 遍历树是为了找到对应节点 然后更新其传感器数据 主要是用到了递归
该函数的第一个参数为root节点的index
第二个参数为要寻找节点的网络地址
第三个参数为传感器的数据
利用QT实现ZigBee拓扑结构显示和数据采集
这里的递归函数也不难 重点还是QT的一些函数的用法

结语

  总体来说 Zigbee的编程不难 上位机的编写思路也很简单,主要是QT的函数找的挺麻烦的,要学会怎么去用Qt的QStandItemModel和QTreeView 以及如何去调用QT一些函数的组合去遍历他们等等这块麻烦了一点。
最后的最后 代码下载地址如下https://pan.baidu.com/s/1Xb26-pJglu8iGRlgaClBlA 提取码:m6ob