版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 报 告( 201 / 201 学年 第 学期)实验名称ZigBee无线传感器网络获取网络拓扑结构实验实验时间2015年 11月-2015年 12 月指导单位计算机学院指导教师李洋学生姓名张智超班级学号B14040923学院(系)计算机学院专 业软件工程实 验 报 告实验名称ZigBee无线传感器网络获取网络拓扑结构实验指导教师李洋实验类型自行设计(科研型)实验学时16实验时间2015.11-2015.12一、 实验目的和要求1. 实验目的了解网络地址的分配方法,掌握获取节点地址的方法,掌握无线传感器网络的拓扑结构。2. 实验内容(一)设计指标:1、编写程序建立无线传感器网络;2、编写程
2、序将自身的网络地址以及父节点网络地址发送给协调器;3、编写程序实现串口控制命令;4、编写程序将各个节点的网络地址以及父节点的网络地址显示在PC机上;(二)实验要求:1、设计不同拓扑结构的无线传感器网络;2、设计串口回调函数实现串口对网络控制;3、设计网络地址获取程序;4、设计各个节点的数据处理函数;5、设计协调节点与上位机的串口通信程序;二、实验环境(实验设备) 硬件:PC机,CC2530传感器,IAR开发环境三、实验架构和原理及实验步骤:1.实验原理(1)ZigBee按照网络节点功能划分可分为终端节点(ep)、路由器节点(rp)和协调器节点(cp)3种。其中,协调器(coordinator)
3、是整个网络的核心,主要作用是启动网络,其方法是选择一个相对空闲的信道,形成一个PANID。协助建立网络中的安全层及处理应用层的绑定。当整个网络启动和配置完成之后,它的功能退化成一个协调器。路由器(router)主要功能是提供接力作用,能扩展信号的传输范围,因此一般情况下他应该一直处于活动状态,不应休眠。终端节点(end-device)加入已建立的网络即可,终端节点不具有网络维护功能。(2)ZigBee无线传感器网络组网过程包括两个步骤:主节点举起网络和子节点申请加入网络。采用的是分布式分配机制:协调器在建立网络之后使用0x0000作为自己的网络地址。在路由器和终端加入网络以后,设备会自动给他分
4、配16位的网络地址。(3)获取拓扑结构的大致思路为:(4)可能用到的函数uint16 NLME_GetShortAddr(void)该函数返回该节点的网络地址byte *NLME_GetExtAddr(void)获取设备自身IEEE地址uint16 NLME_GetCoordShortAddr( void )获取父设备网络地址 void NLME_GetCoordExtAddr( byte * buf)获取父设备IEEE地址3. 实验步骤:(1) 修改PAN_id。网络编号,用于区分不同的ZigBee网络。在文件f8wConfig.cfg中找到-DZDAPP_CONFIG_PAN_I
5、D=0xFFFF,将0xFFFF修改为本组编号0x2008。(2)获取当前节点代码的网络地址以及其父节点的网络地址的代码static void Broadcast_SendBackMessage( ) unsigned char *theMessageData,s200; uint16 i=0,n=0; uint16 mod=0; uint16 FaAdd,a; if(Broadcast_NwkState=DEV_END_DEVICE) unsigned char s110,s210;/存储当前节点以及父节点的地址 FaAdd=NLME_GetCoordShortAddr();/获取十进制的父
6、节点地址 a=NLME_GetShortAddr();/十进制的当前节点地址strcpy(s,"END_DEVICE:");while(a)/将当前节点地址转化为字符串mod=a%16;if(mod<=9)*(s1+i)=mod+'0'else*(s1+i)=mod+55;i+;a/=16;s1i='0'n=strlen(s1);if(n<=3)strcat(s1,"0");for(i=0;i<n/2;i+)char t;t=s1i;s1i=s1n-1-i;s1n-1-i=t; strcat(s,s1);
7、i=0;if(!FaAdd)/将父节点地址转化为字符串strcpy(s2,"0000");i=4; while(FaAdd)mod=FaAdd%16;if(mod<=9)*(s2+i)=mod+'0'else*(s2+i)=mod+55;i+;FaAdd/=16;s2i='0'n=strlen(s2);if(n<=3)strcat(s2,"0");for(i=0;i<n/2;i+)char t;t=s2i;s2i=s2n-1-i;s2n-1-i=t;strcat(s," Father:"
8、;);strcat(s,s2); if(Broadcast_NwkState=DEV_ROUTER) unsigned char s120,s220;strcpy(s,"ROUTER:"); FaAdd=NLME_GetCoordShortAddr(); a=NLME_GetShortAddr();while(a)mod=a%16;if(mod<=9)*(s1+i)=mod+'0'else*(s1+i)=mod+55;i+;a/=16;s1i='0'n=strlen(s1);if(n<=3)strcat(s1,"0&qu
9、ot;);for(i=0;i<n/2;i+)char t;t=s1i;s1i=s1n-1-i;s1n-1-i=t;strcat(s,s1); i=0; if(!FaAdd)strcpy(s2,"0000");i=4; while(FaAdd) mod=a%16;if(mod<=9)*(s2+i)=mod+'0'else*(s2+i)=mod+55;i+;FaAdd/=16; s2i='0'n=strlen(s2);if(n<=3)strcat(s2,"0");for(i=0;i<n/2;i+)cha
10、r t;t=s2i;s2i=s2n-1-i;s2n-1-i=t; strcat(s," Father:");strcat(s,s2);theMessageData=s;afAddrType_t my_DstAddr;my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;my_DstAddr.endPoint = BROADCAST_ENDPOINT;my_DstAddr.addr.shortAddr = 0X0000;if ( AF_DataRequest( &my_DstAddr, &Broadcast_epDesc,
11、 BROADCAST_BACK_CLUSTERID, (byte)osal_strlen( theMessageData ), theMessageData, &Broadcast_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS )/ Successfully requested to be sent.HalLedBlink(HAL_LED_2, 4, 50, 100);else/ Error occurred in request to send.(3)无线数据发送函数static void Broadc
12、ast_SendTheMessage( void ) uint8 *theMessageData = "Coordinator Send!" afAddrType_t my_DstAddr; my_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; my_DstAddr.endPoint = BROADCAST_ENDPOINT; my_DstAddr.addr.shortAddr = 0XFFFF; if ( AF_DataRequest( &my_DstAddr, &Broadcast_epDesc, BROA
13、DCAST_CLUSTERID, (byte)osal_strlen( theMessageData ), theMessageData, &Broadcast_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS )/ Successfully requested to be sent.HalLedBlink(HAL_LED_1, 4, 50, 1000/4);/成功发送数据后红灯闪烁else/ Error occurred in request to send.static void Broadcast_Me
14、ssageMSGCB( afIncomingMSGPacket_t *pkt )/将数据发送到串口 switch ( pkt->clusterId ) case BROADCAST_CLUSTERID:if(osal_memcmp(pkt->cmd.Data, "Coordinator Send!", osal_strlen("Coordinator Send!")Broadcast_SendBackMessage(); break; case BROADCAST_BACK_CLUSTERID:HalUARTWrite(0, pkt->
15、cmd.Data, pkt->cmd.DataLength);HalUARTWrite(0, "rn" , 2);/HalLedBlink(HAL_LED_2, 4, 50, 1000/4); break; (4)烧写代码本实验共用到了一个协调器,两个路由节点和两个终端节点。(5)获取拓扑结构a.将协调器与电脑连接好以后打开开关,打开串口助手。设置波特率为9600,打开串口COM4。待蓝灯长亮且红灯间歇性闪烁时,打开两个终端节点,绿灯长亮且黄灯闪烁表示收发数据正常;再打开两个路由节点,绿灯长亮且黄灯闪烁表示收发数据正常。根据串口助手上显示的协调器返回来的地址数据画出拓
16、扑结构。b.将打开各节点的顺序改为:先打开协调器,待其稳定发送数据后先打开一个路由节点,绿灯长亮且黄灯闪烁后,再打开一个路由节点,稳定后再打开两个终端节点。根据串口助手显示地址数据得出拓扑结构。四、实验结果1、第一个拓扑结构返回的地址数据如下:Coordinator:0000EndDevice:5F73Father:0000Router:49AFFather:0000EndDevice:BB40Father:0000Router:F5E2Father:0000拓扑结构图如下:2、第二个拓扑结构返回的地址数据如下:拓扑结构图如下:Coordinator:0000Router:9DAAFather
17、:0000EndDevice:9EC7Father:6F70EndDevice:3403Father:6F70Router:6F70Father:0000五、实验小结(包括问题和解决方法、心得体会、意见与建议等)烧写CC2530节点所用到的代码是C语言,所以编写起来并不是很困难,但是调试确实非常头疼的一件事,语法错误通过编译可以直接找到错误所在的行,但是逻辑错误却只能是烧写好以后从串口助手接收到的数据或者从各节点的亮灯情况进行推测。虽然可以先在VC6.0中写好代码,调试好以后直接复制粘贴到broadcast.c中,但是IAR的c语言库与VC6.0的C语言库略有不同,而恰恰我们用了不少VC6.0里面的库函数,比如i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年太原幼儿师范高等专科学校单招职业倾向性测试题库附参考答案详解(满分必刷)
- 2025年健康养老行业创新趋势报告
- 2025江西省吉州窑文化旅游投资有限公司面向社会招聘2人笔试历年常考点试题专练附带答案详解2套试卷
- 2025江西吉安市泰和县红典文化旅游发展有限公司面向社会招聘2人笔试历年难易错考点试卷带答案解析2套试卷
- 2025江西九江市寻阳实业集团有限公司招聘岗位调整笔试历年难易错考点试卷带答案解析
- 2025江苏苏州市昆山市昆工慧管理服务有限公司人员招聘笔试及人员笔试历年难易错考点试卷带答案解析
- 2025江苏海州港务股份有限公司招聘工作人员3人笔试历年典型考点题库附带答案详解
- 2025江苏宜兴水务集团有限公司招聘劳务派遣人员30人笔试历年典型考点题库附带答案详解2套试卷
- 2025武汉市江汉区某国企招聘工作人员笔试历年典型考点题库附带答案详解
- 2025新疆五鑫铜业有限责任公司招聘26人笔试历年备考题库附带答案详解
- 女性牙齿美学知识讲座
- 派出所档案总结汇报
- 艾滋病合并结核病查房课件
- 甲状旁腺护理查房课件
- DB35-T 2142-2023 在用货车油箱柴油采样规程
- 固定式真空绝热压力容器定期检验
- GB 18279-2023医疗保健产品灭菌环氧乙烷医疗器械灭菌过程的开发、确认和常规控制要求
- 新能源汽车概论(中职新能源汽车专业)PPT完整全套教学课件
- 天津高考英语词汇3500
- 知木林乡知木林村传统村落环境保护项目环评报告
- 铁路建设项目甲供甲控物资设备目录
评论
0/150
提交评论