最新中南大学刘伟荣物联网《无线传感器网络》实验报告资料Word文档格式.docx
- 文档编号:21182845
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:27
- 大小:1.52MB
最新中南大学刘伟荣物联网《无线传感器网络》实验报告资料Word文档格式.docx
《最新中南大学刘伟荣物联网《无线传感器网络》实验报告资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《最新中南大学刘伟荣物联网《无线传感器网络》实验报告资料Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
CC2530的I/O控制口一共有21个,分成3组,分别是P0、P1和P2;
由上面的对照表可以看出LED1所对应的I/O口为P1_0,LED2所对应的I/O口为P1_2。
下面我们来看一下本次实验所用到的控制寄存器中每一位的取值所对应的意义:
P1DIR(P1方向寄存器,P0DIR同理):
P1SEL(P1功能选择寄存器,P0SEL同理):
寄存器的设置:
将控制寄存器的某一位置1:
例:
P1DIR|=0X02;
解释:
”|=“表示按位或运算,0X02为十六进制数,转换成二进制数为00000010,若P1DIR原来的值为00110000,或运算后P1DIR的值为00110010。
根据上面给出的取值表可知,按位与运算后P1_1的方向改为输出,其他I/O口方向保持不变。
将控制寄存器某一位清0:
P1DIR&
=~0X02;
”&
=“表示按位与运算,”~“运算符表示取反,0X02为00000010,即~0X02为11111101。
若P1DIR原来的值为00110010,与运算后P1DIR的值为00110000。
程序源码
//引入头文件
#include<
ioCC2530.h>
//引入CC2530所对应的头文件(包含各SFR的定义)
//定义LED引脚
#defineled1P1_0//定义LED1为P1_0口控制
#defineled2P1_2//定义LED2为P1_1口控制
voidDelay(unsignedcharn)
{
unsignedchari;
unsignedintj;
for(i=0;
i<
n;
i++)
for(j=1;
j<
10000;
j++)
;
}
voidmain(void)
P1SEL=0x00;
//设置P1为普通I/O口
P1DIR|=0x05;
//设置P1.0P1.2为输出
led1=1;
//初始化,2个led灯全熄
led2=1;
while
(1)//开始循环
{
led1=0;
//led1闪烁
Delay(10);
led2=0;
//led2闪烁
1.4实验步骤及结果
1.4.1正确连接下载线和ZX2530A型CC2530节点板,打开ZX2530A型CC2530节点板电源。
1.4.2在文件夹“基础实验\2LED”下打开工程led,编译工程,并下载到CC2530节点板。
1.4.3观察LED的闪烁情况。
1.4.4修改延时函数,可以改变LED小灯的闪烁间隔时间。
1.4.5重新编译,并下载程序到CC2530节点板,观察LED的闪烁情况。
实验二射频实验
2.1实验目的
◆在ZX2530A型CC2530节点板上运行相应实验程序。
◆熟悉通过射频通信的基本方法。
◆练习使用状态机实现收发功能。
2.2实验内容
接收节点上电后进行初始化,然后通过指令ISRXON开启射频接收器,等待接收数据,直到正确接收到数据为止,通过串口打印输出。
发送节点上电后和接收节点进行相同的初始化,然后将要发送的数据输出到TXFIFO中,再调用指令ISTXONCCA通过射频前端发送数据。
2.3实验设备及工具
ZX2530A型CC2530节点板2块、USB接口的仿真器,PC机Pentium100以上。
PC机操作系统WinXP、IAR集成开发环境、串口监控程序。
2.4实验原理
发送节点通过串口接收用户的输入数据然后通过射频模块发送到指定的接收节点,接收节点通过射频模块收到数据后,通过串口发送到pc在串口调试助手中显示出来。
如果发送节点发送的数据目的地址与接收节点的地址不匹配,接收节点将接收不到数据。
以下为发送节点程序流程图:
以下为接收节点流程图
2.5实验步骤
2.5.1打开光盘“无线射频实验\2.点对点通信”双击p2p.eww打开本实验工程文件。
2.5.2打开main.c文件下面对一些定义进行介绍RF_CHANNEL此宏定义了无线射频通信时使用的信道,在多个小组同时进行实验是建议每组选择不同时信道。
但同一组实验中两个节点需要保证在同一信道,才能正确通信。
PAN_ID个域网ID标示,用来表示不同在网络,在同一实验中,接收和发送节点需要配置为相同的值,否则两个节点将不能正常通信。
SEND_ADDR发送节点的地址
RECV_ADDR接收节点的地址
NODE_TYPE节点类型:
0接收节点,1:
发送节点,在进行实验时一个节点定义为发送节点用来发送数据,一个定义为接收节点用来接收数据。
2.5.3修改NODE_TYPE的值为0,并编译下载到节点板。
此节以下称为接收节点。
2.5.4修改NODE_TYPE的值为1,并编译下载到另外一个节点板。
此节点板以下称为发送节点。
2.5.5将接收节点的串口与pc的串口相连,并在pc端打开串口调试助手,配置波特率为115200。
2.5.6先将接收节点上电,然后将发送节点上电。
2.5.7从串口调试助手观察接收节点收到的数据。
2.5.8修改发送数据的内容,然后编译并下载程序到发送节点,然后从串口调试助手观察收到的数据。
2.5.9修改接收节点的地址,然后重新编译并下载程序到接收节点,然后从发送节点发送数据观察接收节点能否正确接收数据。
2.6实验数据分析及结论
发送节点将数据发送出去后,接收节点接收到数据,并通过串口调试助手打印输出。
发送数据的最大长度为125(加上发送的数据长度和校验,实际发送的数据长度为128字节)。
实验三Zstack组网实验
3.1实验目的
◆理解zigbee协议及相关知识。
◆在ZX2530A型CC2530节点板上实现自组织的组
◆在ZStack协议栈中实现单播通信。
3.2实验内容
先启动协调器节点,协调器节点上电后进行组网操作,再启动路由节点和终端节点,路由节点和终端节点上电后进行入网操作,成功入网后周期的将自己的短地址,父节点的短地址,自己的节点ID封装成数据包发送给协调器节点,协调器节点接收到数据包后通过串口传给PC,从PC上的串口监控程序查看组网情况。
发送数据格式为(16进制):
FF源节点(16bit)父节点(16bit)节点编号ID(8bit)
例如FF4B00000001,表示01号节点的网络地址为004B,发送数据到父节点,其网络地址为0000(协调器)。
3.3预备知识
3.3.1了解CC2530应用程序的框架结构。
3.3.2了解并安装zstack协议栈。
3.3.3了解ZigBee协议进行组网的过程。
3.4实验设备及工具
DZ2530型CC2530节点板、USB接口的仿真器,PC机Pentium100以上。
PC机操作系统WinXP、IAR集成开发环境、ZTOOL程序。
3.5实验原理
程序执行的流程图如图5-4所示,在进行一系列的初始化操作后程序就进入事件轮询状态。
对于终端节点,若没有事件发生且定义了编译选项POWER_SAVING,则节点进入休眠状态。
协调器是Zigbee三种设备中最重要的一种。
它负责网络的建立,包括信道选择,确定唯一的PAN地址并把信息向网络中广播,为加入网络的路由器和终端设备分配地址,维护路由表等。
Z-Stack中打开编译选项ZDO_COORDINATOR,也就是在IAR开发环境中选择协调器,然后编译出的文件就能启动协调器。
具体工作流程是:
操作系统初始化函数osal_start_system调用DAppInit初始化函数,ZDAppInit调用ZDOInitDevice函数,ZDOInitDevice调用ZDApp_NetworkInit函数,在此函数中设置ZDO_NETWORK_INIT事件,在ZDApp_event_loop任务中对其进行处理。
由第一步先调用ZDO_StartDevice启动网络中的设备,再调用NLME_NetworkFormationRequest函数进行组网,这一部分涉及网络层细节,无法看到源代码,在库中处理。
ZDO_NetworkFormationConfirmCB和nwk_Status函数有申请结果的处理。
如果成功则ZDO_NetworkFormationConfirmCB先执行,不成功则nwk_Status先执行。
接着,在ZDO_NetworkFormationConfirmCB函数中会设置ZDO_NETWORK_START事件。
由于第三步,ZDApp_event_loop任务中会处理ZDO_NETWORK_START事件,调用ZDApp_NetworkStartEvt函数,
此函数会返回申请的结果。
如果不成功能量阈值会按ENERGY_SCAN_INCREMENT增加,并将App_event_loop任务中的事件ID置为ZDO_NETWORK_INIT然后跳回第二步执行;
如果成功则设
置ZDO_STATE_CHANGE_EVT事件让ZDApp_event_loop任务处理。
对于终端或路由节点,调用ZDO_StartDevice后将调用函数NLME_NetworkDiscoveryRequest进行信道扫描启动发现网络的过程,这一部分涉及网络层细节,无法看到源代码,在库中处理,NLME_NetworkDiscoveryRequest函数执行的结果将会返回到函数ZDO_NetworkDiscoveryConfirmCB中,该函数将会返回选择的网络,并设置事件ZDO_NWK_DISC_CNF,在ZDApp_ProcessOSALMsg中对该事件进行处理,调用NLME_JoinRequest加入指定的网络,若加入失败,则重新初始化网络,若加入成功则调用ZDApp_ProcessNetworkJoin函数设置ZDO_STATE_CHANGE_EVT,在对该事件的处理过程中将调用ZDO_UpdateNwkStatus函数,此函数会向用户自定义任务发送事件ZDO_STATE_CHANGE。
本实验在Zstack的事例代码simpleApp修改而来。
首先介绍任务初始化的概念,由于自定义任务需要确定对应的端点和簇等信息,并且将这些信息在AF层中注册,所以每个任务都要初始化然后才会进入OSAL系统循环。
在Z-Stack流程图中,上层的初始化集中在OSAL初始化(osal_init_system)函数中。
包括了存储空间、定时器、电源管理和各任务初始化。
其中用户任务初始化的流程如下:
任务ID(taskID)的分配是OSAL要求的,为后续调用事件函数、定时器函数提供了参数。
网络状态在启动的时候需要指定,之后才能触发ZDO_STATE_CHANGE事件,确定设备的类型。
目的地址分配包括寻址方式,端点号和地址的指定,本实验中数据的发送使用单播方式。
之后设置应用对象的属性,这是非常关键的。
由于涉及很多参数,Z-Stack专门设计了SimpleDescriptionFormat_t这一结构来方便设置,其中的成员如下:
EndPoint,该节点应用的端点,值在1-240之间,用来接收数据。
AppProfId,该域是确定这个端点支持的应用profile标识符,从Zigbee联盟获取具体的标识符。
AppNumInClusters,指示这个端点所支持的输入簇的数目。
pAppInClusterList,指向输入簇标识符列表的指针。
AppNumOutClusters,指示这个端点所支持的输出簇的数目。
pAppOutClusterList,指向输出簇标识符列表的指针。
本实验profile标识符采用默认设置,输入输出簇设置为相同MY_PROFILE_ID,设置完成后,调用afRegister函数将应用信息在AF层中注册,使设备知晓该应用的存在,初始化完毕。
一旦初始化完成,在进入OSAL轮询后zb_HandleOsalEvent一有事件被触发,就会得到及时的处理。
事件号是一个以宏定义描述的数字。
系统事件(SYS_EVENT_MSG)是强制的,其中包括了几个子事件的处理。
ZDO_CB_MSG事件是处理ZDO的响应,KEY_CHANGE事件处理按键(针对TI官方的开发板),AF_DATA_CONFIRM_CMD则是作为发送一个数据包后的确认,AF_INCOMING_MSG_CMD是接收到一个数据包会产生的事件,协调器在收到该事件后调用函数p2p_test_MessageMSGCB,将接收到的数据通过HalUARTWrite向串口打印输出。
ZDO_STATE_CHANGE和网络状态的改变相关在此事件中若为终端或路由节点则发送用户自定义的数据帧:
FF源节点短地址(16bit,调用NLME_GetShortAddr()获得)、父节点短地址(16bit,调用NLME_GetCoordShortAddr())、节点编号ID(8bit,为长地址的最低字节,调用NLME_GetExtAddr()获得,在启动节点前应先用RF
Programmer将非0XFFFFFFFFFFFFFFFF的长地址写到CC2530芯片存放长地址的寄存器中),协调器不做任何处理,只是等待数据的到来。
终端和路由节点在用户自定义的事件MY_REPORT_EVT中发送数据并启动定时器来触发下一次的MY_REPORT_EVT事件,实现周期性的发送数据(发送数据的周期由宏定义REPORT_DELAY确定)。
3.6实验步骤及结果
3.6.1打开工程文件夹协议栈实验\2.多点自组网\Projects\zstack\Samples\SimpleApp\CC2530DB下的工程文件SimpleApp.eww。
3.6.2选择工程
编译,生成协调器代码,并下载到ZX2530A开发板。
此节点为协调器节点。
3.6.3选择工程
编译,生成终端节点代码,并下载到ZX2530开发板。
此节点为终端节点。
3.6.4选择工程
编译,生成路由器节点代码,并下载到ZX2530开发板,此节点为路由器节点。
3.6.5用串口线将协调器节点与pc连接起来,在pc端打开ZTOOL程序。
(ZTOOL程序在zstack安装后自动安装)
3.6.6开启ZX2530A型CC2530节点板电源。
3.6.7在ZTOOL程序中观察组网结果。
3.7实验数据分析及结论
由接收数据的DebugString可以看出图中有两个节点加入了网了,其中一个节点的DEVID是21,网络地址:
4f07,父节点地址是0即协调器。
另外一个节点的DEVID是11,网络地址:
A6F7,父节点地址是4f07即上一节点。
实验四综合实验(传感器网络)
3G智能物联网综合系统工作框架如下:
4.1智能网关程序设计
智能网关程序是连接android系统与zigbee无线网络的桥梁,运行在android系统服务层,智能网关程序同过3G、Wifi或以太网与Android用户控制程序相连,然后将用户控制程序发过来的指令通过串口发给zigbee网络协调器,Zigbee网络协调器解析相应的指令然后发给各个传感器节点实现控制。
智能网关程序流程如下
4.2Android用户控制程序设计
4.2.1Android用户控制程序框架
用户控制程序运行于android系统应用层,采用JAVA开发。
用户控制程序通过接收用户的输入操作,生成相应的控制指令然后通过3G、wifi或以太网发送到智能网关系统。
同时,用户控制程序还接收智能网关程序发送过来的告警指令,并生成相应的告警信息,产生告警。
Android用户控制程序框架如下:
下面以Zigbee网络拓扑结构生成模块,和温度传感器控制模块为例介绍其实现,其它模块类同可参考源代码。
当用户第一次打开程序,或是从菜单中选择搜索的时候,Zigbee网络TOP图生成模块首先检查网络连接,当网络正常连接到Zigbee智能网关后,首先发送获取协调器节点信息指令,获取到协调器节点信息。
之后将协调器节点通过绘图子程序在屏幕上把协调器显示出来。
相关实现代码在ZbThread.java,下面进行初步讲解具体见源码。
获取协调器节点信息
byte[]ninfo=mProx.syncRequestSYS_APP_MSG(2,newbyte[]{
(byte)(0>
>
8),(byte)0,//addr
0x00,0x01,//cmd
0x00,0x01,0x00,0x02,0x00,0x05,0x00,0x14,0x00,0x15
});
当syncRequestSYS_APP_MSG返回后,如果ninfo!
=null,则ninfo中保存获取到的协调器信息,否则获取协调器信息失败,zigbee网络搜索结束。
获取到协调器信息后通过以下代码
Top.DrawTop(mTree);
Messagemsg=Message.obtain();
msg.what=MSG_NEW_NETWORK;
msg.arg1=1;
mMainHandler.sendMessage(msg);
生成协调器节点并通知主线程在屏幕上显示出来。
当找到协调器后,程序通过查找与协调器直接连接的相关节点,然后递归搜索,最终搜索完整个网络并绘制出Zigbee网络的TOP结构。
具体实现代码如下
privatevoidbuildNetWork(Nodepa,int[]cli)
{
for(inti=0;
i<
cli.length;
i++){
/*getchildiinfo*/
try{
Thread.currentThread().sleep(500);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
byte[]ninfo=mProx.syncRequestSYS_APP_MSG(2,newbyte[]{
(byte)(cli[i]>
8),(byte)cli[i],//addr
if(ninfo==null||ninfo.length<
29){
Log.d(TAG,"
****getnode"
+cli[i]+"
infofail."
);
continue;
inttmp,off=0;
tmp=Tool.builduInt(ninfo[off],ninfo[off+1]);
//addr
if(tmp!
=cli[i]){
netaddisnotequl..."
}
off+=2;
//cmd
=0x8001){
responsecmdnoteuql..."
off+=2;
if(ninfo[off]!
=0){//readstatus
readstatusisnot0"
off+=1;
Nodend=newNode(cli[i],Node.ZB_NODE_TYPE_ENDDEVICE);
int[]childs={};
while(off<
ninfo.length){
switch(tmp){
case0x0001:
//hardver
nd.mHardVer=Tool.builduInt(ninfo[off],ninfo[off+1]);
break;
case0x0002:
nd.mSoftVer=Tool.builduInt(ninfo[off],ninfo[off+1]);
case0x0005:
nd.mDevType=ninfo[off];
case0x0014:
for(intj=0;
8;
j++){
nd.mIEEEAddr[j]=ninfo[off+j];
off+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线传感器网络 最新 中南 大学 刘伟荣物 联网 无线 传感器 网络 实验 报告 资料