第五次无线传感器网络实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌航空大学实验报告
二O 一六年五月 3 日
课程名称:无线传感器网络实验名称:点对点通信实验
班级:姓名:
指导教师评定:签名:
一、实验目的
1. 了解CC2530无线通信的基本原理和用法;
2. 掌握实验编译、下载和测试的方法;
3. 分析CC2530 BasicRF工程的文件组织和源代码,为学习Z-Stack协议
栈奠定基础。
二、实验内容
1.将一个CC2530节点(称为1号节点)编程为受控节点,将另一个CC2530
节点(称为2号节点)编程为控制节点;
2.将2号节点的USB232通信接口通过USB线连接PC;在串口调试助手输
入命令,以无线通信的方式控制1号节点上的LED。
三、基础知识
1. 工程文件介绍
CC2530 BasicRF有三个文件夹,本实验所使用的eww文件(workspace)是经过删减的,删掉了4个不使用的工程,仅保留了light_switch工程,并且此工程内部的LCD、button等硬件不具备的资源或不使用的资源相关的.h和.c文件进行了删减。
docs文件夹:
打开文件夹里面仅有一个名为CC2530_Software_Examples的PDF文档,文档的主要内容是介绍BasicRF的特点、结构及使用,里面Basic RF包含三个实验例程:无线点灯、传输质量检测、谱分析应用。
Ide文件夹:
有三个文件夹,及一个cc2530_sw_examples.eww工程,在IAR环境中打开,在workspace看到。
Ide\Settings文件夹:
主要保存有读者自己的IAR环境里面的设置。
Ide\srf05_CC2530文件夹:
仅有一个iar文件夹,进入之后有工程light_switch.eww,还有temp文件夹存放临时文件,settings文件夹存放工程的一些设置文件。
Source文件夹:
打开文件夹里面有apps文件夹和components文件夹
Source\apps文件夹:
存放BasicRF实验的应用实现的源代码
Source\components文件夹:
包含着BasicRF的应用程序使用不同组件的源代码。
打开实验工程:
打开文件夹WSN CC2530 BasicRF\ide\路径里的cc2530_sw_examples.eww,并点击application的light_switch.c。
2、Basic RF layer介绍及其工作过程
关键字:
CCM ‐Counter with CBC‐MAC (mode of operation)
HAL ‐Hardware Abstraction Layer (硬件抽象层)
PAN ‐Personal Area Network (个人局域网)
RF ‐Radio Frequency (射频)
RSSI ‐Received Signal Strength Indicator(接收信号强度指示)
在介绍Basic RF之前,来看看这个实验例程设计的大体结构,如图所示Basic RF例程的软件设计框图就如一座建筑物,Hardware layer放在最底,肯定是你实现数据传输的基础了。
Hardware Abstraction layer它提供了一种接口来访问TIMER,GPIO,UART,ADC等。
这些接口都通过相应的函数进行实现。
Basic RF layer为双向无线传输提供一种简单的协议
图4 Basic RF例程的软件设计框图
Application layer是用户应用层,它相当于用户使用Basic RF层和HAL的接口,也就是说我们通过在Application layer就可以使用到封装好的Basic RF 和HAL的函数。
本例程的要求就是读者理解掌握Basic RF
Basic RF layer简介:
Basic RF由TI公司提供,它包含了IEEE 802.15.4标准的数据包的收发功能但并没有使用到协议栈,它仅仅是是让两个结点进行简单的通信,也就是说Basic RF仅仅是包含着IEEE 802.15.4标准的一小部分而已。
其主要特点有:
1、不会自动加入协议、也不会自动扫描其他节点也没有组网指示灯(LED3)。
2、没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相等的。
3、没有自动重发的功能。
Basic RF layer为双向无线通信提供了一个简单的协议,通过这个协议能够进行数据的发送和接收。
Basic RF还提供了安全通信所使用的CCM-64身份验证和数据加密,它的安全性读者可以通过在工程文件里面定义SECURITY_CCM在Project->Option里面就可以选择,本次实验并不是什么高度机密,所以在SECURITY_CCM前面带X了。
Basic RF的工作过程:启动、发射、接收
启动
1、确保外围器件没有问题
2、创建一个basicRfCfg_t的数据结构,并初始化其中的成员,在basic_rf.h 代码中可以找到
typedef struct {
uint16 myAddr; //16位的短地址(就是节点的地址)
uint16 panId; //节点的PAN ID
uint8 channel; //RF通道(必须在11-26之间)
uint8 ackRequest; //目标确认就置true
#ifdef SECURITY_CCM //是否加密,预定义取消了加密
uint8* securityKey;
uint8* securityNonce;
#endif
} basicRfCfg_t;
3.调用basicRfInit()函数进行协议的初始化,在basic_rf.c代码中可以找到uint8 basicRfInit(basicRfCfg_t* pRfConfig)
函数功能:对Basic RF的数据结构初始化,设置模块的传输通道,短地址,PAD ID。
发送
1. 创建一个buffer,把payload放入其中。
Payload最大为103个字节
2. 调用basicRfSendPacket()函数发送,并查看其返回值
在basic_rf.c中可以找到uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length)
destAddr目的短地址
pPayload指向发送缓冲区的指针
length发送数据长度
函数功能:给目的短地址发送指定长度的数据,发送成功刚返回SUCCESS,失败则返回FAILED
接收
1. 上层通过basicRfPacketIsReady()函数来检查是否收到一个新数据包
在basic_rf.c中可以找到uint8 basicRfPacketIsReady(void)
函数功能:检查模块是否已经可以接收下一个数据,如果准备好刚返回TRUE
2. 调用basicRfReceive()函数,把收到的数据复制到buffer中。
代码可以
在basic_rf.c中可以找到uint8 basicRfReceive(uint8* pRxData, uint8 len, int16* pRssi)
函数功能:接收来自Basic RF层的数据包,并为所接收的数据和RSSI值配缓冲区。
3.light_switch.c代码详解:
void main(void)
{
// Config basicRF
basicRfConfig.panId = PAN_ID;//上面讲的Basic RF的启动中的
basicRfConfig.channel = RF_CHANNEL; //初始化basicRfCfg_t
basicRfConfig.ackRequest = TRUE;结构体的成员。
halBoardInit();
if(halRfInit()==FAILED)
{
HAL_ASSERT(FALSE);
}
halLedClear(1); // 关LED1
/******选择性下载程序,发送模块和接收模块******/
appSwitch(); //节点为按键S1 P0_0
appLight(); //节点为指示灯LED1 P1_0
// Role is undefined. This code should not be reached
HAL_ASSERT(FALSE);
}
halLedSet(x)置1是使灯点亮,halLedClear(x)是使灯熄灭。
第12~13行:选择其中的一行,并把另外一行屏蔽掉;一个是实现发射通过USB232接收的PC信息的功能,另一个是接收控制信息并改变LED状态的功能。
分别为Basic RF发射和接收。
不同模块在烧写程序时选择不同功能。
注意:程序会在appSwitch(); 或者appLight();里面循环或者等待,不会执行到第15行。
四、实验过程
第一步:打开….\WSN CC2530 BasicRF\ide\srf05_cc2530\iar文件夹下面的工程,在light_switch.c里面找到main函数,找到下面内容,把appLight(); 注释掉,下载到发射模块。
/************Select one and shield to another************/
appSwitch(); //作为控制节点(2号节点,需连接PC),请务必注释掉下行
// appLight(); //作为受控节点(1号节点,观察其LED),请务必注释掉上行第二步:找到相同位置,这次把appSwitch();注释掉,下载到接收模块。
/************Select one and shield to another***********by boo*/
//appSwitch(); //作为控制节点(2号节点,需连接PC),请务必注释掉下行appLight(); //作为受控节点(1号节点,观察其LED),请务必注释掉上行
第三步:完成烧写后上电,并将2号节点的USB232连接PC(注意USB232跳线),在虚拟机中打开串口调试助手,选择正确的串口号,波特率设置为115200,以手动方式发送“CHANGELED#”,观察1号节点的LED1。
五、实验心得
本次实验是点对点的通信,通过实验,了解到射频通信的基本内容,熟悉了无线通信程序的过程和基本方法,积累了无线通信程序的经验和方法。
对以后在无线通信方面的学习实验有很大帮助。