物联网实验报告资料.docx

上传人:b****4 文档编号:3387638 上传时间:2022-11-22 格式:DOCX 页数:48 大小:4.12MB
下载 相关 举报
物联网实验报告资料.docx_第1页
第1页 / 共48页
物联网实验报告资料.docx_第2页
第2页 / 共48页
物联网实验报告资料.docx_第3页
第3页 / 共48页
物联网实验报告资料.docx_第4页
第4页 / 共48页
物联网实验报告资料.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

物联网实验报告资料.docx

《物联网实验报告资料.docx》由会员分享,可在线阅读,更多相关《物联网实验报告资料.docx(48页珍藏版)》请在冰豆网上搜索。

物联网实验报告资料.docx

物联网实验报告资料

中南林业科技大学

课程设计实验报告

专业班级:

2013级计算机科学与技术2班

授课教师:

***

学生姓名:

***

学生学号:

********

实验一

继电器闪烁

一.实验目的:

学会使用修改程序,使得继电器按要求闪烁。

二.内容:

修改以下程序,使得继电器的绿灯闪一下,红灯闪五下

#include

typedefunsignedintuint;

typedefunsignedcharuchar;

//定义控制灯的端口

#defineRLEDP1_0//定义LED1为P10口控制

#defineYLEDP1_1//定义LED2为P11口控制

//函数声明

voidDelay(uint);//延时函数

voidInitial(void);//初始化P0口

/****************************

//延时

*****************************/

voidDelay(uintn)

{

uchari;

while(n--)

{

for(i=200;i>0;i--);

}

}

/****************************

初始化程序

*****************************/

voidInitial(void)

{

P1DIR|=0x03;//P10、P11定义为输出

RLED=1;

YLED=1;//LED灭

}

/***************************

//主函数

***************************/

voidmain(void)

{

Initial();//调用初始化函数

RLED=0;//LED1

YLED=0;//LED2

while

(1)

{

RLED=0;

YLED=1;

Delay(1000);

RLED=1;

YLED=0;

Delay(1000);

}

}

三.实验记录:

修改好的程序如下:

#include

typedefunsignedintuint;

typedefunsignedcharuchar;

//定义控制灯的端口

#defineRLEDP1_0//定义LED1为P10口控制

#defineYLEDP1_1//定义LED2为P11口控制

//函数声明

voidDelay(uint);//延时函数

voidInitial(void);//初始化P0口

/****************************

//延时

*****************************/

voidDelay(uintn)

{

uchari;

while(n--)

{

for(i=200;i>0;i--);

}

}

/****************************

初始化程序

*****************************/

voidInitial(void)

{

P1DIR|=0x03;//P10、P11定义为输出

RLED=1;

YLED=1;//LED灭

}

/***************************

//主函数

***************************/

voidmain(void)

{

uinti;

Initial();//调用初始化函数

RLED=0;//LED1

YLED=0;//LED2

while

(1)

{

RLED=0;

YLED=1;

Delay(1000);

for(i=0;i<5;i++)

{

RLED=0;

YLED=0;

Delay(1000);

RLED=1;

YLED=0;

Delay(1000);

}

RLED=0;

YLED=0;

Delay(1000);

}

}

实验显示结果:

继电器的绿灯闪一下,红灯闪五下,一直循环着.整个过程中所有仪器都正常。

 

四.实验心得:

通过这次的实验,利用C语言将程序修改,学会使用接口编程,学会使用IAR8.10与CC2530接口编程,重新温习for循环语句,掌握继电器的连接方式及工作原理

 

实验二

Zigbee无线传感网开发入门

一、实验内容:

1、zigbee协议栈使用简介

协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;协议栈是协议的具体实现形式,通俗的理解为用代码实现的函数库,以便于开发人员调用。

ZigBee的协议分为两部分,IEEE802.15.4定义了物理层和MAC层技术规范,ZigBee联盟定义了网络层、安全层和应用层技术规范,ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供一些应用层API,供用户调用。

注意:

虽然协议是统一的,但是协议的具体实现形式是变化的,即不同厂商提供的协议栈是有区别的,例如:

函数名称和参数列表可能有区别,用户在选择协议栈以后,需要学习具体的例子,查看厂商提供的Demo演示程序和说明文档来学习各个函数的使用方式,进而快速的使用协议栈进行应用程序的开发工作。

使用ZigBee协议栈进行开发的基本思路可以概括为如下三点:

1、用户对于ZigBee无线网络的开发就简化为应用层的c语言程序开发,用户不需要深入研究复杂的ZigBee协议栈;

2、ZigBee无线传感器网络中数据采集,只需用户在应用层加入传感器的读取函数即可;

3、如果考虑节能,可以根据数据采集周期进行定时,定时时间到就唤醒ZigBee的终端节点,终端节点唤醒后,自动采集传感器数据,然后将数据发送给路由器或者直接发给协调器。

既然ZigBee协议栈已经实现了ZigBee协议,那么用户就可以使用协议栈提供的API进行应用程序的开发,在开发过程中完全不必关心ZigBee协议的具体实现细节,只需关心一个核心的问题:

应用程序数据从哪里来到哪里去。

下面举一个例子,当用户应用程序需要进行数据通信时,需要按照如下步骤实现:

(1)调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入;

(2)发送设备调用协议栈提供的无线数据发送函数,实现数据的发送;

(3)接收设备调用协议栈提供的无线数据接收函数,实现数据的正确接收。

因此,使用协议栈进行应用程序开发时,开发者不需要关心协议栈是具体怎么实现的(例如,每个函数是怎么实现的,每条函数代码是什么意思等),只需要知道协议栈提供的函数实现什么样的功能,会调用相应的函数来实现自己的应用需求即可。

例如,在TI提供的Zstack协议栈中,数据发送函数定义如下:

afStatus_tAF_DataRequest(afAddrType_t*dstAddr,

endPointDesc_t*srcEP,

uint16cID,

uint16len,

uint8*buf,

uint8*transID,

uint8options,

uint8radius)

用户调用该函数即可实现数据的无线发送,当然,在此函数中有8个参数,用户需要将每个参数的含义理解以后,才能达到熟练应用该函数进行无线数据通信的目的。

AF_DataRequest()函数中最核心的两个参数:

·uint16len-----发送数据的长度;

·uint8*buf-----指向存放发送数据的缓冲区的指针。

至于调用该函数后,如何初始化硬件进行数据发送等工作,用户不需要关心,ZigBee协议栈已经将所需要的初始化工作初始化好了,这就类似于学习TCP/IP网络编程时,用户只需要调用相应的数据发送、接收函数即可,而不必关心具体的网卡驱动的具体实现细节。

2zigbee协议栈安装

ZigBee协议栈具有很多版本,不同厂商提供的ZigBee协议栈有一定的区别,本手册选用的是TI推出的ZigBee2007协议栈进行讲解。

ZigBee2007协议栈ZStack-CC2530-2.5.1a要安装以后才能使用,下面讲解安装步骤。

../工程源码,双击ZStack-CC2530-2.5.1a.exe即可进行协议栈的安装,默认是安装到c盘。

然后在路径C:

\TexasInstruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp\CC2530DB下找到GenericApp.eww,打开该工程。

打开该工程后,可以看到GenericApp工程文件布局,如图4.1所示。

在图中所示的文件布局中,左侧有很多文件夹,如App,HAL,MAC等;这些文件夹对应了ZigBee协议中不同的层,使用ZigBee协议栈进行应用程序的开发,一般只需要修改App目录下的文件即可。

3点对点数据传输实验

尽管到此为止,读者对ZigBee协议的基本内容都不了解,甚至ZigBee协议是什么也可能存在诸多的疑问与不解,但与其阅读“深奥”的ZigBee协议栈,不如通过一个数据传输实验来对ZigBee协议以及ZigBee协议栈建立一个形象、直观的认识,这将有助于读者对ZigBee协议的理解。

数据传输实验的基本功能:

两个ZigBee节点进行点对点通信,ZigBee节点2向节点1发送“ChinaSofti”10个字符,同时LED绿灯闪烁两下表示成功发送。

ZigBee节点1收到节点2发送过来的数据后,对接收到的数据进行判断,如果收到的数据是“ChinaSofti”,则使开发板上的LED红灯闪烁两下表示成功接收。

数据传输实验原理图如图4.2所示。

(1)协调器程序

在ZigBee无线传感器网络中有三种设备类型:

协调器、路由器和终端节点,设备类型是由ZigBee协议栈不同的编译选项来选择的。

协调器负责ZigBee网络的组建,维护,控制终端节点的加入等。

路由器主要负责数据包的路由选择,终端节点负责数据的采集,不具备路由功能。

在本实验中,ZigBee节点1配置为1个协调器,负责ZigBee网路的组建,ZigBee节点2配置为一个终端节点,上电后加入ZigBee节点1建立的网络,然后发送"ChinaSofti"给节点1。

将GenericApp工程中的GenericApp.c删除,删除方法是:

右键单击GenericApp.c,在弹出的下拉菜单中选择Remove即可,如图4.3所示。

单击File,在弹出的下拉菜单中选择New,然后选择File,如图4.4所示。

图4.4新建源文件

将该文件保存为Coordinator.c,然后以同样的方法建立一个Enddevice.c文件(最佳保存路径:

就保存在GenericApp工程中的Source文件夹下,具体路径为C:

\TexasInstruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp\Source)。

下面讲解向该工程添加源文件的方法:

右键单击App,在弹出的下拉菜单中选择Add,然后选择AddFlies,如图4.5所示,选择刚才建立的两个文件Coordinator.c和Enddevice.c即可。

添加完上述文件后,GenericApp工程文件布局如图4.6所示。

在Coordinator.c中输入以下代码:

#include"OSAL.h"

#include"AF.h"

#include"ZDApp.h"

#include"ZDObject.h"

#include"ZDProfile.h"

#include"GenericApp.h"

#include"DebugTrace.h"

#if!

defined(WIN32)

#include"OnBoard.h"

#endif

#include"hal_led.h"

#include"hal_key.h"

#include"hal_uart.h"

constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]=

{

GENERICAPP_CLUSTERID

};

constSimpleDescriptionFormat_tGenericApp_SimpleDesc=

{

GENERICAPP_ENDPOINT,

GENERICAPP_PROFID,

GENERICAPP_DEVICEID,

GENERICAPP_DEVICE_VERSION,

GENERICAPP_FLAGS,

GENERICAPP_MAX_CLUSTERS,

(cId_t*)GenericApp_ClusterList,

GENERICAPP_MAX_CLUSTERS,

(cId_t*)GenericApp_ClusterList

};

endPointDesc_tGenericApp_epDesc;

byteGenericApp_TaskID;

byteGenericApp_TransID;

staticvoidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);

voidGenericApp_Init(uint8task_id)

{

GenericApp_TaskID=task_id;

GenericApp_TransID=0;

GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;

GenericApp_epDesc.task_id=&GenericApp_TaskID;

GenericApp_epDesc.simpleDesc

=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;

GenericApp_epDesc.latencyReq=noLatencyReqs;

afRegister(&GenericApp_epDesc);//节点注册

}

uint16GenericApp_ProcessEvent(uint8task_id,uint16events)

{

afIncomingMSGPacket_t*MSGpkt;

if(events&SYS_EVENT_MSG)

{

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);

while(MSGpkt)

{

switch(MSGpkt->hdr.event)

{

caseAF_INCOMING_MSG_CMD:

GenericApp_MessageMSGCB(MSGpkt);

break;

default:

break;

}

osal_msg_deallocate((uint8*)MSGpkt);

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);

}

return(events^SYS_EVENT_MSG);

}

return0;

}

staticvoidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)

{

unsignedcharbuf[10];

switch(pkt->clusterId)

{

caseGENERICAPP_CLUSTERID:

osal_memcpy(buf,pkt->cmd.Data,10);

if((buf[10]=='C')||(buf[1]=='h')||(buf[5]=='S')||(buf[9]=='i'))

{

HalLedBlink(HAL_LED_1,2,40,700);

}

break;

default:

break;

}

}

上述代码实现的基本功能如下:

第79行,将收到的数据拷贝到缓冲区buf中。

第80行,判断接收到的数据是不是“ChinaSofti”,这里是选择性判断了4个字符。

如果是则执行第82行,使LED红灯闪烁2次。

注意:

上述代码使用到了ZigBee协议栈提供的函数HalLedBlink(功能:

使某个LED闪烁),直接使用即可。

这里需要提醒读者,使用协议栈进行应用程序开发时,如果协议栈已经提供了相应的函数,则只需要尽快掌握该函数的功能及使用方法即可,不需要另外实现该函数。

由于我们的开发板硬件和TI的原厂开发板硬件有所不同,所以这里需要对相关的LED硬件初始化做一些调整。

具体可分为以下两步:

1.打开ZMain文件夹下的ZMain.c文件,找到整个协议栈的主函数main()函数,在85行(通过Tools->Options选项的Editor栏中设置showlinenumbers即可显示行号):

HAL_BOARD_INIT();鼠标双击这个函数选定然后右击,选择跳转到函数定义处,具体如图4.7所示:

2.还是在hal_board_cfg.h这个文件中,我们将116行和123行的ACTIVE_HIGH改为ACTIVE_LOW,这是因为我们的LED灯是IO口低电平触发亮。

通过以上两步,相关的LED函数就可以正常使用了。

到此为止,协调器的编程已经基本结束,下面回忆一下上述代码所做的基本工作。

(1)删除了协议栈中的GenericApp.c文件,然后添加了两个文件:

Coordinator.c和Enddevice.c。

(2)给出了Coordinator.c的代码,并给出了部分注释,其中Coordinator.c文件中很多代码格式是固定的,读者只需要熟悉这些代码格式即可。

在Workspace下面的下拉列表框中选择CoordinatorEB,然后右键单击Enddevice.c,在弹出的下拉菜单中选择Options,如图4.8所示。

图4.8Options选项设置

在弹出的对话框中,选择Excludefrombuild,如图4.9所示。

图4.9Excludefrombuild

此时,Enddevice.c文件会呈灰白显示状态。

同时可以打开Tools文件夹可以看到f8wEndev.cfg和f8wRouter.cfg文件也是呈灰白显示状态,文件呈灰白显示状态说明该文件不参与编译,ZigBee协议栈正是使用这种方式实现对源文件编译的控制。

f8w2530.xcl,f8wConfig.cfg,f8wCoord.cfg三个文件包含了节点的配置信息,具体功能如下:

(1)f8w2530.xcl----包含了CC2530单片机的链接控制指令(如定义堆栈大小、内存分配等),一般不需要改动。

(2)f8wConfig.cfg----包含了信道选择,网络号等有关的链接命令。

例如:

下列代码定义了建立网络的信道默认为11,即从11信道上建立ZigBee无线网络,第59行定义了ZigBee无线网络的网络号。

因此如果想从其他信道上建立zigbee网络和修改网络号,就可以在此修改。

(3)f8wCoord.cfg----定义了设备类型

前文讲到zigbee无线网络中的设备类型有协调器,路由器和终端节点。

下述代码就定义了该设备具有协调器和路由器的功能。

下面讲解一下zigbee协议栈的编译以及下载。

点击工具栏上的Make按钮或者点击Project下的Make,即可实现zigbee协议栈的编译。

编译完成后,在窗口下方会自动弹出Message窗口,显示编译过程中的警告和出错信息。

Message窗口如图4.10所示。

图4.10Message窗口

最后,用CC2530仿真器将开发板和电脑连接起来,复位一下仿真器,然后选择工具栏上的Debug按钮或者点击Project下的DownloadandDebug,即可实现程序的下载。

(2)终端节点程序

下面介绍一下终端节点的程序设计步骤。

首先,在Workspace下面的下拉列表框中选择EndDeviceEB,然后右键单击Coordinator.c文件,在弹出的下拉菜单中选择Options,在弹出的对话框中,选择Excludefrombuild,此时,Coordinator.c文件会呈灰白显示状态。

在Enddevice.c文件中输入以下代码:

#include"OSAL.h"

#include"AF.h"

#include"ZDApp.h"

#include"ZDObject.h"

#include"ZDProfile.h"

#include"GenericApp.h"

#include"DebugTrace.h"

#if!

defined(WIN32)

#include"OnBoard.h"

#endif

#include"hal_led.h"

#include"hal_key.h"

#include"hal_uart.h"

constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]=

{

GENERICAPP_CLUSTERID

};

constSimpleDescriptionFormat_tGenericApp_SimpleDesc=

{

GENERICAPP_ENDPOINT,//intEndpoint;

GENERICAPP_PROFID,//uint16AppProfId[2];

GENERICAPP_DEVICEID,//uint16AppDeviceId[2];

GENERICAPP_DEVICE_VERSION,//intAppDevVer:

4;

GENERICAPP_FLAGS,//intAppFlags:

4;

GENERICAPP_MAX_CLUSTERS,//byteAppNumInClusters;

(cId_t*)GenericApp_ClusterList,//byte*pAppInClusterList;

GENERICAPP_MAX_CLUSTERS,//byteAppNumInClusters;

(cId_t*)GenericApp_ClusterList//byte*pAppInClusterList;

};

endPointDesc_tGenericApp_epDesc;

byteGenericApp_TaskID;

devStates_tGenericApp_NwkState;

byteGenericA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1