e1载波把32个信道按_无线传感器网络实验报告(九)无线信道监听

本文介绍了ZigBee无线信道监听实验,旨在理解信道接入技术和CSMA-CA机制。实验使用ZigBee模块,通过信道扫描检测信道占用情况,发送节点设置不同信道并监听回复,从而确定信道是否空闲。实验步骤详细,包括硬件连接、软件配置及实验结果分析。
摘要由CSDN通过智能技术生成

1a4ee3a9a60f50d2d251111fb5e05a49.png

实验九:无线信道监听

9.1 实验目的

1. 了解信道扫描的概念;

2. 掌握信道扫描的实验过程;

3. 学习信道扫描的程序编写。

9.2 实验环境

1. 硬件平台:ZigBee模块两块(Status与Data)、ZB-LINK调试器、USB3.0数据线、RJ11连接线、USB方口线两根。

2. 软件平台:WinXP/Win7、IAR开发环境、串口调试助手软件。

9.3实验原理

在ZigBee协议中,物理层上面是mac层,它的核心是信道接入技术,包括GTS(时分复用技术)和随机信道接入技术(csma-ca)。不过ZigBee没有对gts技术进行支持,因此我们仅需要考虑csma-ca技术。802.15.4网络的所有节点都工作在一个信道上,因此如果邻近节点同时发送数据就会产生冲突,为此采用csma-ca技术,简单来说,就是节点在发送数据之前,先监听信道,如果这个信道空闲则可以发送数据,否则就进行随机退避,即延时一个随机时间,然后再进行信道监听,这个退避时间是指数增长的,但有一个最大值,即如果上一次退避后监听信道忙,则退避时间要倍增,这样做的原因是如果多次监听信道忙,则表明信道上传输的数据量很大,因此节点要等待更长时间,避免繁忙的监听。通过这种技术,所有节点共享一个信道。在mac层中还规定了两种信道接入模式,一种是信标(beacon)模式,另一种是非信标模式。在信标模式中,规定了一种超帧格式,在超帧的开始发送信标,里面包含一定的时序和网络信息,紧接着是竞争接入时期,在这段时间内,各节点竞争接入信道,再后面是非竞争接入时期,节点采用时分复用方式接入信道,然后是非活跃时期,节点进入休眠状态,等待下一个超帧周期的开始又发送信标帧。非信标模式则又比较灵活,节点均以竞争方式接入信道,不需要周期性的发送信标帧。显然在信标模式下,由于有了周期性的信标帧,整个网络的各个节点都能够同步,但这种同步网

络规模不会大。实际上ZigBee中更多的应用是非信标模式。

a5fd01b033b1a6c16098ee4998e08f82.png

图 4.4.1 2.4G频段信道分布

CC2530芯片使用了2.4GHZ频段定义的16个信道,节点使用相同的信道才能进行通信。本实验的程序在点对点射频通信的基础上进行了修改。让接收节点在一个固定的信道上监听数据,当收到数据后返回给发送节点,发送节点通过设置不同的信道,在发送数据的同时,监听回复,如果收到回复则说明该信道在使用中,否则说明该信道没有被其它节点占用。

发送节点每隔1秒设置一次信道并发送一次数据(发送完数据后多次调用halMcuWaitMs()函数实现延迟),并等待接收数据。

9.3.1 电路分析与程序配置

本实验使用的是Uart与RF接口,原理图如下:

5f91f3a72d1d751c38e0764050f9a488.png

9.3.2 源码分析

宏定义与全局变量定义如下:

/*宏定义*/
#defineNODE_TYPE
#defineRF_CHANNEL
#definePAN_ID
#defineSEND_ADDR
#defineRECV_ADDR
1
13
0x2007
0x2530
0x2520
//0:接收节点,1:发送节点
//信道:2.4GHz RFchannel
//网络地址
//发送地址
//接收地址
/*全局变量*/
static basicRfCfg_tbasicRfConfig;
// RF配置结构

主函数实现过程如下:


voidmain()
{
halMcuInit(); hal_led_init(); hal_uart_init();
// MCU初始化
// LED初始化
// Uart初始化
if(FAILED ==halRfInit())
{
HAL_ASSERT(FALSE);
}
// RF硬件初始化
//错误处理

/*配置RF数据结构*/basicRfConfig.panId =PAN_ID;basicRfConfig.channel =RF_CHANNEL;
//网络号
//频段号


basicRfConfig.ackRequest =TRUE;
//应答位
#ifdefSECURITY_CCM
basicRfConfig.securityKey =key;
#endif
//安全密钥
#ifNODE_TYPE
basicRfConfig.myAddr =SEND_ADDR;
#else
basicRfConfig.myAddr =RECV_ADDR;
#endif
//节点类型
//发地址
//收地址


if(basicRfInit(&basicRfConfig)==FAILED)
{
HAL_ASSERT(FALSE);
}
// RF软件初始化
#ifNODE_TYPE
rfChannelScan();
#else
rfRecvData();
#endif
//节点类型
//信道扫描
//数据接收


while(1);
//复位等待
}

发射节点信道扫描函数:
//-发射节点信道扫描-------------------------------------------------------------
voidrfChannelScan(void)
{
//待发送数据
uint8pTxData[]={'H','e','l','l','o','','c','c','2','5','3','0','r','n'};
uint8pRxData[32];	//接收缓冲

int	i;
uint8channel;
// 次数变量i
// 信道变量channel
basicRfReceiveOn();
//开RF接收器
for(channel=11; channel<=26;channel++)
{
printf("scan channel %d ... ",channel);halRfSetChannel(channel); basicRfSendPacket(RECV_ADDR, pTxData, sizeofpTxData);
//信道扫描(11~26)
//打印当前信道
//设置当前信道
// 发送数据到RECV_ADDR

for(i=0; i<1000;i++)
{
if(basicRfPacketIsReady())
{
basicRfReceive(pRxData, 32,NULL);break;
}
//来自于接收端的回应
//接收到数据


halMcuWaitMs(1);
//延时等待
}

if(i >=1000)
{
printf("NotUsern");	//(信道)未使用
}
else
{


printf("InUsern");
//(信道)占用
}
}
}

接收节点数据接收函数:


//-接收节点接收函数-------------------------------------------------------------
voidrfRecvData(void)
{
uint8pRxData[128];	//数据接收缓存
intrlen;	//待收数据量
basicRfReceiveOn();
// RF接收器开
while(TRUE)
{
while(!basicRfPacketIsReady());//等待接收
rlen = basicRfReceive(pRxData, sizeof pRxData,NULL);
//循环
//开始接收
if(rlen >0)
{
/*接收反馈*/
basicRfSendPacket(basicRfReceiveAddress(), pRxData,rlen);
}
}
}

接收节点在一个固定的信道一直监听数据,当收到数据以后,就反馈至发射节点。

9.3.3 程序流程

a86dba03d968e68c06f65d2b30f4d6c7.png

图 4.4.3信道监听的发送与接收流程

使用两个ZigBee模块(Status与Data),Status为发送,Data为接收,程序运行时,Status向Data发送数据,Data在一个固定的信道上接收数据,Status设置不同的信道并发送数据同时监听回复,如果收到回复则说明该信道在使用中,否则说明该信道没有被占用。

9.4 实验步骤

1. 打开:【配套光盘04-实验例程02-ZigBee技术与应用第四章CC2530无线通信实验4.4无线 信道监听实验代码】中的工程文件:“ChanelScan.eww”。

  • 使用USB3.0数据线连接ZigBee(Status)模块与ZB-LINK调试器的Debug端。3. 使用USB方口线连接ZB-LINK调试器的USB-485端与PC机的USB口。

4. 在程序中,将NODE_TYPE的值修改成1,然后点

592a9d135c1434b4383c4ca6516e32f7.png

编译,点

f58735d8aa8e520a2f78408f75097332.png

下载,点

f721b9933bda2574b30b0906164367ab.png

运行,点

f100639f72acbeff69e54bb38c417135.png

退出。

592a9d135c1434b4383c4ca6516e32f7.png

5. 再将USB3.0数据线接到ZigBee(Data)模块,将程序中的NODE_TYPE的值修改成0,然后点编译,点

f58735d8aa8e520a2f78408f75097332.png

下载,点

f721b9933bda2574b30b0906164367ab.png

运行,点

f100639f72acbeff69e54bb38c417135.png

退出。

6. 将RJ11连接线的一端接ZB-LINK调试器的RS-485端与ZigBee(Status)模块,再将另外一根

USB方口线接在ZB-LINK调试器的USB-485端与PC机的USB口。

736f0a181fd3eb7a2d6975bcfd042a27.png

7. 打开串口调试助手软件,将波特率设置成19200后打开串口观察结果,每次扫完一次所有通道后(共计16个通道),可点ZigBee(Status)模块上的RST键后进行复位,然后重新扫描所有通道。

8. 如果扫描不出信道,还可再按一下 ZigBee(Data)模块上的复位键以及ZigBee(Status)上的复位键来观察信道的扫描结果,观察结果前可先清空一下串口调试助手中的显示内容。

9.5 实验结果

40b5eff9fac0470418d3337c3d857a28.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值