简介
本文中,我们将利用Arduino开发板结合无线串口模块来模拟自组织网络中的节点,使用电脑作为控制节点来控制组织网络中的通信,为了便于观察和控制各个节点之间的通信状态,我在此利用Qt开发了一款可视化的通信控制小软件。
准备
硬件设备:
1、DL-20 无线串口模块若干(内为已写有无线串口通信固件的CC2530芯片);
2、Arduino 开发板若干;
3、USB 转 TTL 串口模块一个。
软件环境:
1、Arduino IDE
2、Qt5
实现方法
## 硬件连接
- 连接硬件设备,将 DL-20 无线串口模块分别连接到 Arduino 开发板的串口引脚上。如下图所示:
- 将一个 DL-20 无线串口模块连接到 USB 转 TTL 串口模块上并插入电脑。
软件设计
设计思路
- 由于硬件的限制,无法直接使用 Zigbee 协议进行通信,因此在本设计方案中,我们通过在应用层模拟 Zigbee 协议的核心功能来实现星形无线传感器网络和多跳无线自组织传感器网络。
- 在本设计方案中,节点分为两类,一类是基于 Arduino 开发板的无线传感器节点,一类是运行在 PC 上的图形化界面控制节点,网络中所有传感器节点与控制节点之间的拓扑结构构成星形网络,网络中所有传感器节点相互之间的拓扑结构形成网状的多跳自组织无线传感器网络。
- 为了实现节点之间的寻址功能,必须首先为不同的节点分配不同的地址,在本设计方案中,为了简化设计,在程序中使用一字节的节点编号为不同节点赋予不同的静态地址。通信时以节点编号作为通信地址。
- 为了实现路由功能,在本实验中,每个传感器节点都会维护一张路由表,路由表中记录了网络中所有节点之间的连接情况。当一个节点收到来自其他节点的转发请求时,节点会根据数据包的目的地址在自己的路由表中搜索能够到达该节点的路径,当找到一条路径后,就回溯该路径,找到该路径中位于本节点的下一跳节点的地址,并将数据包发送给下一跳节点。如果节点在路由表中没有找到可以到达目的节点的路径,就向控制节点报告一个错误信息,并丢弃该数据包。
- 为了实现传感器节点之间的自组织功能,每个传感器节点会定时向外广播自己的路由表,该节点附近的节点接收到路由广播后,首先将广播帧的源节点与自己之间的通路修改为连通,然后根据广播帧中的路由信息更新自己的路由表。
- 为了当有节点从网络中断开时网络中可以即时的发现该路由拓扑结构的变化,每个节点维护一个定时任务,当一段时间内该节点没有接收到来自邻居节点的广播信息时,就认为该邻居结点已经掉线,将本节点与该邻居节点的连通状况置为断开,之后通过路由广播将该拓扑信息的变化告知网络中的其他节点。
- 由于实验时所有节点的距离都很近,所有节点相互之间都可以通信,为了演示某些节点之间没有直接连接时的路由转发功能,在路由表的基础上增加了一张路由控制表,控制节点可以修改某些链路的连接状况,并将路由控制表广播告知所有传感器节点。
- 为了演示传感器节点间的数据转发功能,在控制节点中添加了一个数据传输控制指令,可以指定某一传感器节点向另一节点发送一条指定的数据。
- 数据传输协议设计如下:
MAC层协议:
名称 | 长度 | 备注 |
---|---|---|
帧头 | 1byte | 取值0xFE |
源MAC地址 | 1byte | 此处为了简便,取值直接使用数据发送节点的ID |
目的MAC地址 | 1byte | 取值为数据帧目的节点MAC地址(即目的节点 ID) |
帧编号 | 1byte | 从 0 开始累计,到 256 归 0 |
MAC层控制字 | 1 byte | MAC 层应答控制,保留未使用 |
帧长 | 1byte | 数据区长度 |
数据区 | 帧长长度 | 来自上层的目标数据 |
校验位 | 1byte | 从帧头开始取和,对 256 取余,再按位取反 |
网络层协议:
名称 | 长度 | 备注 |
---|---|---|
源IP地址 | 1byte | 取值为发送节点网络地址(此处简化为发送节点 ID) |
目的IP地址 | 1byte | 取值为目的节点网络地址 |
网络层控制字 | 1byte | 网络层应答控制,保留不使用 |
网络层控制指令 | 1byte | 0xA5 = 广播帧 0x01 = 数据传输 0x30 = 路由控制指令 0x50 = 数据传输控制指令,控制特定节点向某节点发送数据 |
算法实现
传感器节点的详细程序设计如下:
控制节点的源码较多,在此不做详细说明,但我将相关源码放在了后文中,以供参考。
运行及实验
修改上述代码中的 NID 的值,编译并下载到不同的 Arduino 开发板中,打开控制节点软件,点击串口连接,;连接上串口,即可在控制节点中查看到自组织网络的自组织过程,并可以控制传感器节点间的拓扑结构,并可通过控制传输来观察数据转发过程。如以下各图所示。
(其中,0 号节点为控制节点,即 PC,以黄色表示,连线为红色表示传感器节点与控制节点的连接,连线为黑色表示传感器节点间链路可达,连线为绿色表示该链路上正在传输数据)
两个传感器节点:
三个传感器节点:
四个传感器节点:
上图中 2 号节点与 3 号节点之间直接不可达,链路处于断开状态,经过短时间的自组织链路同步以后,该链路连接自动建立:
正在传输数据时的状态:
可以看到,上图中,1 号节点与 2 号节点间链路为绿色,表示链路上正在转发数据。
总结
本文中,通过综合运用星形网络和自组织网络,搭建了一个易于控制和观察的无线自组织传感器网络,且将通信过程进行了可视化。但由于协议设计得较为简陋,通信不可靠,极易发生通信数据出错等问题。