zigbee实验三.docx

上传人:b****1 文档编号:1064856 上传时间:2023-04-30 格式:DOCX 页数:14 大小:399.79KB
下载 相关 举报
zigbee实验三.docx_第1页
第1页 / 共14页
zigbee实验三.docx_第2页
第2页 / 共14页
zigbee实验三.docx_第3页
第3页 / 共14页
zigbee实验三.docx_第4页
第4页 / 共14页
zigbee实验三.docx_第5页
第5页 / 共14页
zigbee实验三.docx_第6页
第6页 / 共14页
zigbee实验三.docx_第7页
第7页 / 共14页
zigbee实验三.docx_第8页
第8页 / 共14页
zigbee实验三.docx_第9页
第9页 / 共14页
zigbee实验三.docx_第10页
第10页 / 共14页
zigbee实验三.docx_第11页
第11页 / 共14页
zigbee实验三.docx_第12页
第12页 / 共14页
zigbee实验三.docx_第13页
第13页 / 共14页
zigbee实验三.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

zigbee实验三.docx

《zigbee实验三.docx》由会员分享,可在线阅读,更多相关《zigbee实验三.docx(14页珍藏版)》请在冰点文库上搜索。

zigbee实验三.docx

zigbee实验三

天津理工大学

计算机与通信工程学院

 

实验报告

 

2014至2015学年第一学期

 

课程名称

Zigbee技术

学号

20126266

学生姓名

赵鹏

年级

2012级

专业

物联网工程

教学班号

01

实验地点

7-213

实验时间

2014年12月3日第3节至第4节

主讲教师

张晓辉

辅导教师

张晓辉

实验(三)

实验名称

无线温度检测实验

软件环境

TARIDE环境,串口调试助手,samart

硬件环境

2个CC2530RF模块,电源模块,温度传感器模块

实验目的

1通过实验的学习,让传感器的数据和zigbee无线网络结合起来形成真正意义的无线传感网络。

实验内容(应包括实验题目、实验要求、实验任务等)

 

1.实验要求:

协调器建立Zigbee无线网络,终端节点自动加入该网络中,然后终端节点周期性地采集温度数据并将其发送给协调器,协调器收到温度数据后,通过串口将其输出到用户pc机。

 

实验设备

1.装有IAR和串口助手的PC机一台;

2.cc2530仿真器,usb线(A型转B型);

3.无线节点模块2块,智能主板2块,温度传感器模块。

 

实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)

无线温度检测试验效果图:

无线温度检测试验协调器流程图:

无线温度检测试验终端节点流程图:

实验步骤

1、将GenericApp.h删除。

按同样方法删除GenericApp.c文件。

2、单击File,在弹出的下拉菜单中选择New,然后选File。

将该文件保存为Coordinator.h,然后用同样的方法建立一个Coordinator.c和Enddevice.c文件。

3、在Coordinator.c文件中输入以下代码:

协调器:

#include"OSAL.h"

#include"AF.h"

#include"ZDApp.h"

#include"ZDObject.h"

#include"ZDProfile.h"

#include

#include"Coordinator.h"

#include"DebugTrace.h"

#if!

defined(WIN32)

#include"OnBoard.h"

#endif

#include"hal_lcd.h"

#include"hal_led.h"

#include"hal_key.h"

#include"hal_uart.h"

constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]=

{

GENERICAPP_CLUSTERID

};

//简单设备描述符(描述一个ZigBee设备节点)

constSimpleDescriptionFormat_tGenericApp_SimpleDesc=

{

GENERICAPP_ENDPOINT,

GENERICAPP_PROFID,

GENERICAPP_DEVICEID,

GENERICAPP_DEVICE_VERSION,

GENERICAPP_FLAGS,

GENERICAPP_MAX_CLUSTERS,

(cId_t*)GenericApp_ClusterList,/?

?

?

?

0,

(cId_t*)NULL

};

endPointDesc_tGenericApp_epDesc;//节点描述符

byteGenericApp_TaskID;//任务优先级

byteGenericApp_TransID;//数据发送序列号。

voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);//消息处理函数

voidGenericApp_SendTheMessage(void);//数据发送函数

voidGenericApp_Init(bytetask_id)//任务初始化函数

{

halUARTCfg_tuartConfig;

GenericApp_TaskID=task_id;//初始化任务优先级(任务优先级有协议栈的操作系统OSAL分配)

GenericApp_TransID=0;//发送数据包的序号初始化为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);//afRegister()对节点的描述符进行注册。

注册后,才能使用OSAL提供的系统服务。

uartConfig.configured=true;

uartConfig.baudRate=HAL_UART_BR_115200;

uartConfig.callBackFunc=null;

uartConfig.flowControl=false;

HalUARTOpen(0,&uartConfig);

}

//消息处理函数

UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)

{

afIncomingMSGPacket_t*MSGpkt;//MSGpkt用于指向接收消息结构体的指针

if(events&SYS_EVENT_MSG)

{

//MSGpkt=(afIncomingMSGPacket_t*)osal_msg_reveive(GenericApp_TaskID);//osal_msg_receive()从消息队列上接收消息

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);

while(MSGpkt)

{

switch(MSGpkt->hdr.event)

{

caseAF_INCOMING_MSG_CMD:

//接受到新数据的消息的ID是AF_INCOMING_MSG_CMD,这个宏是在协议栈中定义好的值为0x1A

//接受到的是无线数据包

//GenericApp_MessageMSGCB(MSGpkt);//功能是完成对接受数据的处理

osal_msg_receive(task_id);

HalUARTWrite(0,buffer,10);

break;

default:

break;

}

osal_msg_deallocate((uint8*)MSGpkt);//接收到的消息处理完后,释放消息所占的存储空间

//MSGpkt=(afIncomingMSGPacket_t*)osal_msg_reveive(GenericApp_TaskID);

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);

//处理完一个消息后,再从消息队列里接受消息,然后对其进行相应处理,直到所有消息处理完

}

return(events^SYS_EVENT_MSG);

}

return0;

}

voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)

{

unsignedcharbuffer[2]={0x0A,0x0D};

TEMPERTUREtemperature;

switch(pkt->clusterId)

{

caseGENERICAPP_CLUSTERID:

osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));

HalUARTWrite(0,(uint8*)temperature,sizeof(temperature));

HalUARTWrite(0,buffer,2);

break;

}

}

4、在workspace下面的下拉列表框中选择CoordinatorEB,然后右键单击Enddevice.c文件,在弹出的下拉菜单选择Option,选择Excludefrombuild。

5、选择工具栏上的Make按钮编译。

6、终端节点编程:

在workspace下面的下拉列表框中选择EnddeviceEB,然后右键单击Coordinator.c文件,在弹出的下拉菜单选择Option,选择Excludefrombuild。

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

//Enddevice.c

#include"OSAL.h"

#include"AF.h"

#include"ZDApp.h"

#include"ZDObject.h"

#include"ZDProfile.h"

#include

#include"Coordinator.h"

#include"DebugTrace.h"

#if!

defined(WIN32)

#include"OnBoard.h"

#endif

#include"hal_lcd.h"

#include"hal_led.h"

#include"hal_key.h"

#include"hal_uart.h"

#defineSEND_DATA_EVENT0x01

constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]=

{

GENERICAPP_CLUSTERID

};

constSimpleDescriptionFormat_tGenericApp_SimpleDesc=

{

GENERICAPP_ENDPOINT,

GENERICAPP_PROFID,

GENERICAPP_DEVICEID,

GENERICAPP_DEVICE_VERSION,

GENERICAPP_FLAGS,

0,

(cId_t*)NULL,

GENERICAPP_MAX_CLUSTERS,

(cId_t*)GenericApp_ClusterList

};

endPointDesc_tGenericApp_epDesc;//节点描述符

byteGenericApp_TaskID;//任务优先级

byteGenericApp_TransID;//数据发送序列号

devStates_tGenericApp_NwkState;//保存节点状态

voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);//消息处理函数的声明

voidGenericApp_SendTheMessage(void);//数据发送函数的声明

//任务初始化函数

voidGenericApp_Init(bytetask_id)

{

GenericApp_TaskID=task_id;//初始化任务优先级

GenericApp_NwkState=DEV_INIT;//初始化为DEV_INIT,表节点没有连接到ZigBee网络

GenericApp_TransID=0;//发送数据包的序列号初始化为0

//对节点描述符进行初始化

GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;

GenericApp_epDesc.task_id=&GenericApp_TaskID;

GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;

GenericApp_epDesc.latencyReq=noLatencyReqs;

//afRegister()函数将节点描述符进行注册,注册后才可以使用OSAL提供的系统服务

afRegister(&GenericApp_epDesc);

}

//消息处理函数

UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)

{

afIncomingMSGPacket_t*MSGpkt;

if(events&SYS_EVENT_MSG)

{

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);

while(MSGpkt)

{

switch(MSGpkt->hdr.event)

{

caseZDO_STATE_CHANGE:

GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型

if(GenericApp_NwkState==DEV_END_DEVICE)

{

osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);

//GenericApp_SendTheMessage();//终端节点类型,执行无线数据发送

}

break;

default:

break;

}

osal_msg_deallocate((uint8*)MSGpkt);

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);

}

return(events^SYS_EVENT_MSG);

}

if(events&SEND_DATA_EVENT)

GenericApp_SendTheMessage();

osal_start_timerEX(GenericApp_TaskID,SEND_DATA_EVENT,1000);

return(events^SEND_DATA_EVENT);

return0;

}

voidGenericApp_SendTheMessage(void)

{

//unsignedchartheMessageData[10]="edndevice";//存放发送数据

Uint8tvalue;

TEMPERTUREtemperature;

temperature.BUF.Head=‘&’;

Tvalue=readTemp;

temperature.BUF.value[0]=value/10+‘0’;

temperature.BUF.value[1]=value%10+‘0’;

temperature.BUF.Tail=‘C’;

afAddrType_tmy_DstAddr;

my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;//数据发送模式:

可选单播、广播、多播方式这里选Addr16Bit表单播

my_DstAddr.endPoint=GENERICAPP_ENDPOINT;//初始化端口函

my_DstAddr.addr.shortAddr=0x0000;//标志目的地址节点的网络地址这里是协调器的地址

//下面是数据发送长度数据发送缓冲区

AF_DataRequest(&my_DstAddr,

&GenericApp_epDesc,

GENERICAPP_CLUSTERID,

Sizeof(temperature);

(uintf8*)&temperature;

&GenericApp_TransID,

AF_DISCV_ROUTE,

AF_DEFAULT_RADIUS);

}

实例测试图:

 

附录(可包括源程序清单或其它说明,将核心代码给出注释)

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2