为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

无线传感网

2017-12-27 15页 doc 238KB 38阅读

用户头像

is_153354

暂无简介

举报
无线传感网无线传感网技术课程设计题目ATOS传感器采集通讯实验学生姓名曾磊 学号学院计算机与软件学院 专业物联网工程 指导教师 二O一七年六月十二日ATOS数字传感器采集实验曾磊南京信息工程大学计算机与软件学院物联网工程系,南京210044摘要:X使用ATOS平台反向控制节点,使节点采集传感器数据。这里综合利用了传感器采集、点对点通讯、串口通讯三个实验,实现传感器的数据采集。关键词:ATOS;点对点通讯;传感器采集;串口通讯一背景无线传感器网络(WirelessSensorNetworks,WSN)是一种分布式传感网络,它的末梢是可以感...
无线传感网
无线传感网技术课程目ATOS传感器采集通讯实验学生姓名曾磊 学号学院计算机与软件学院 专业物联网工程 指导教师 二O一七年六月十二日ATOS数字传感器采集实验曾磊南京信息工程大学计算机与软件学院物联网工程系,南京210044摘要:X使用ATOS平台反向控制节点,使节点采集传感器数据。这里综合利用了传感器采集、点对点通讯、串口通讯三个实验,实现传感器的数据采集。关键词:ATOS;点对点通讯;传感器采集;串口通讯一背景无线传感器网络(WirelessSensorNetworks,WSN)是一种分布式传感网络,它的末梢是可以感知和检查外部世界的传感器。WSN中的传感器通过无线方式通信,因此网络设置灵活,设备位置可以随时更改,还可以跟互联网进行有线或无线方式的连接。通过无线通信方式形成的一个多跳自组织的网络。其所具有的众多类型的传感器,可探测包括地震、电磁、温度、湿度、噪声、光强度、压力、土壤成分、移动物体的大小、速度和方向等周边环境中多种多样的现象。潜在的应用领域可以归纳为:军事、航空、防爆、救灾、环境、医疗、保健、家居、工业、商业等领域。无线传感网络是一门软硬件兼具的学科,学习无线传感网络不仅要学习书本上的知识,还要熟悉无线传感网络的软硬件设备,因为传感网的布置要使用软硬件结合才能够完成其功能的配置。所以,一方面应课设要求,另一方面也培养我们动手实践能力,我们来做了ATOS数字传感器的采集实验,从硬件的层面我们自己实现传感器数据的采集,让我们能够更好的学习和掌握无线传感网的知识。二课程设计概述和要求本次课设要求使用ATOS平台实现对传感器数据的采集,对前面学习的传感器采集、点对点通讯、串口通讯实验进行综合利用。课设实验包括两个部分,一个是基站部分,另外一个是节点部分。其中基站部分主要负责处理串口数据和发送采集命令给基本节点,节点部分主要是完成接收基站下达的采集命令和采集传感器数据并且发送给基站。实验中使用了光传感器,节点采集光信号,并且将数据发送给基站,基站再通过串口助手将数据同步到电脑上去,实现对光信号数据的采集。三设备清单设备名称数量带有CC2430芯片的基站1基本节点1光传感器1天线2烧录线1在线烧录器1MiniUSB线1平行串口线1四实验过程4.1实验目的掌握在ATOS平台通过反向控制节点,使得节点采集传感器数据。4.2准备知识掌握如何在ATOS平台上实现传感器采集(可以参考扇面三个实验);熟练掌握点对点通讯的实验;熟练掌握串口通讯实验。4.3实验原理 这个实验综合了传感器采集、点对点通讯、串口通讯这三个实验。这个实验分为两个部分,一个是基站部分,另外一个是节点部分。其中基站部分主要负责处理串口数据和发送采集命令给基本节点,节点部分主要是完成接收基站下达的采集命令和采集传感器数据并且发送给基站。4.4实验1、将基站同电脑用烧录线连接好,打开基站的开关2、用串口线将基站和PC机器连接起来3、打开串口助手4、打开Cygwin开发环境5、在Cygwin开发环境中执行cdapps/Demos/sensor/CommSensor/Base6、在采集通讯基站目录下执行makeantc3installGRP=01NID=01,进行软件的编译和烧录基站烧录成功,解图如下:7、烧录成功后,将烧录线连接在烧录器上面,再用MiniUSB线将节点和烧录器连接在一起,打开节点的开关8、执行cdapps/Demos/sensor/CommSensor/Node节点烧录成功,解图如下:9、在采集通讯节点目录下面执行makeantc3ASO=LIGHTTYPE=3installGRP=01NID=0210、烧录成功后,将MiniUSB线从节点上拔掉,同时将烧录线与基站相连给基站供电。11、重启基站,在串口助手中有如下的内容12、在上面图片中会提示输入目的地址,在输入目的地址后会提示是否发送采集命令。按照提示进行操作,采集成功的图片如下。4.4实验设计按照实验步骤进行之后,得到了上述结果,基站和节点可以进行通讯。下面我们按照自己的学号分组重新进行烧录,并且修改一点代码,可以显示我们一组的组员的姓名,烧录结果如下:烧录成功界面串口助手显示界面发送数据界面如果输入3节点,则会显示发送错误,因为我们烧录的节点号是2,没有3号节点,所以会发送失败,如下:五总结和思考首本次课程设计做的颇为艰辛,其实说起来并不是因为难,而是硬件设备多半都存在问题,所以做的过程中就是在不断的排错,遇到好的节点基站就能够轻松的搞定,而拿到了有问题的设备,当你又不知道它哪里有问题时,就会陷入无尽的错误循环,有时候排一个错误就要很久,因为我们都是第一次做这个,并不了解。另外还有就是软硬件的结合不是很稳定,就是说时而有效时而无效,这就需要耐心,着急了也是做不成的。举个例子吧,这里面最长出现的错误就是找不到芯片,可能是因为接口与线之间接触的不好,扭动一下再继续试,或者换一个新的芯片,看看到底是什么问题导致的,要从多个角度来排查;还有今天遇到的一个问题就是串口助手的问题,如果我们所有的步骤都成功了,但是它就是没有数据,那么就可能是串口助手出了问题,串口助手是有配置文件的,如果没有配置文件,那么它就不能正常工作,我们既可以到它的目录去看它有没有配置文件,也可以打开串口助手,如果无法关闭,那么说明它是有问题的,此时就要去拷一份配置文件或者拷贝一个完整的串口助手拿过来用。等等还有很多问题,各种各样你意想不到的,我们在书本上学的只是冰山一角,真正应用到实际,还有很多东西需要学习,一般不好像书本上那样顺利就可以完成通过实验确实让我对无线传感网络的认识和了解更加深刻,也锻炼了我的动手能力,让我从软硬件的层面结合起来学习传感网,不过也遇到很多问题,整个实验的过程中,有90%的时间是在排错,在这个过程中也让我明白,理论与实际是有很大差别的,作为大学生,作为即将踏入社会的大学生,我们更加应该注重实践,培养动手实践的能力,课本上学的知识有多熟练,并不代动手能力就很强,理论应用到实践是有一个过渡的过程的,也正是这个过程我们把自己学习到的知识真正应用到了我们的工作中去。六参考文献[1]无线传感网络孙利民清华大学出版社2005.5(2014.6重印)附录基站程序#defineDBG_LEV1000moduleCommSensorBaseP{ uses{ interfaceBoot; interfaceStdControlasUartStdControl; interfaceUartStream; interfaceAtosControl; interfaceAMSend; interfaceReceive; interfaceAMPacket; interfacePacket; }}implementation{ enum { MAX_ADDRESS_LEN=5, INPUT_ADDRESS=0, INPUT_DATA=1, }; message_tm_msg; uint8_tm_len=0; charm_address_str[MAX_ADDRESS_LEN]={0}; uint8_tm_address_index=0; uint8_tm_input_type=0; /*显示菜单*/ taskvoidshowMenu() { if(m_input_type==INPUT_DATA) {/*等待输入欲发送的数据*/ ADBG(DBG_LEV,"\r\n*ToSend:(YorN)\r\n"); } else {/*等待输入欲发送的地址*/ ADBG(DBG_LEV,"\r\n###################################################\r\n*MYNodeId=0x%x,Group=0x%x,destination?\r\n", ADBG_N(callAMPacket.address()), ADBG_N(TOS_IEEE_PANID)); m_input_type=INPUT_ADDRESS; m_address_index=0; }} /*将从串口输入的地址字符串转化为真实地址*/ uint16_tgetDestAddress() { uint16_taddress=0; uint8_ti=0; if(m_address_index>MAX_ADDRESS_LEN) { m_address_index=MAX_ADDRESS_LEN-1;} for(i=0;i<m_address_index;++i) { uint8_tdigital=m_address_str[i]; if(digital>='A'&&digital<='F') { digital=digital-'A'+10; } elseif(digital>='a'&&digital<='f') { digital=digital-'a'+10; } elseif(digital>='0'&&digital<='9') { digital=digital-'0'; } address=address*16+digital; } returnaddress; } /*发送数据*/ taskvoidsendData() { uint8_ti; uint8_t*payload=callPacket.getPayload(&m_msg,NULL); uint16_taddress=callAMPacket.address(); uint16_tdest_address=getDestAddress(); ADBG(DBG_LEV,"\npayload=%c\n",*payload); if(*payload=='Y'||*payload=='y') { ADBG(DBG_LEV,"\r\n\r\n*Sending...from[%d],to[%d],len=[%d]\r\n", ADBG_N(address), ADBG_N(dest_address), ADBG_N(m_len)); callAMSend.send(dest_address,&m_msg,m_len); }else {m_input_type=INPUT_ADDRESS; postshowMenu(); } LED_BLUE_TOGGLE } /*发送完处理*/ eventvoidAMSend.sendDone(message_t*msg,error_tsuccess) { ADBG(DBG_LEV,"*Sent%s!\r\n",(success==SUCCESS)?"OK":"FAIL"); m_len=0; m_input_type=INPUT_ADDRESS; postshowMenu(); } /*从串口接收数据*/ asynceventvoidUartStream.receivedByte(uint8_tc) { if(c!='\r') { if(m_input_type==INPUT_DATA) {/*输入数据*/ uint8_t*payload=(uint8_t*)callPacket.getPayload(&m_msg,NULL); if(m_len>=callPacket.maxPayloadLength()) { return; } payload[m_len++]=c; ADBG(DBG_LEV,"%c",c); if(m_len<callPacket.maxPayloadLength()) {return; } } else {/*输入地址*/ if(m_address_index<MAX_ADDRESS_LEN) { m_address_str[m_address_index++]=c; ADBG(DBG_LEV,"%c",c); } if(m_address_index<MAX_ADDRESS_LEN) { return; } } } /*按下回车键或者到达最大长度,则处理*/ if(m_input_type==INPUT_DATA) { postsendData(); } else { /*地址处理完毕,准备输入数据*/ m_input_type=INPUT_DATA; postshowMenu(); } } /*节点启动完毕*/ eventvoidBoot.booted() { /*开启射频*/ callAtosControl.start(); /*开启串口通信*/ callUartStdControl.start(); LED_YELLOW_OFF; LED_BLUE_OFF; ADBG(DBG_LEV,"\r\n###############################################\r\n"); ADBG(DBG_LEV,"MyAddress=0x%x,Group=0x%x\r\n",ADBG_N(callAMPacket.address()),ADBG_N(TOS_IEEE_PANID)); ADBG(DBG_LEV,"###############################################\r\n"); m_input_type=INPUT_ADDRESS; postshowMenu(); } /**实现接口UartStream接口中的事件*/ asynceventvoidUartStream.sendDone(uint8_t*buf,uint16_tlen,error_terror) { } asynceventvoidUartStream.receiveDone(uint8_t*buf,uint16_tlen,error_terror) {} /*射频接收数据*/ eventmessage_t*Receive.receive(message_t*msg,void*payload,uint8_tlen) { uint8_ti; ADBG(DBG_LEV,"\r\n*Receive,len=[%d],DATA:\r\n",ADBG_N(len)); for(i=0;i<len;i++) {ADBG(DBG_LEV,"%02x",(int)((uint8_t*)payload)[i]); } ADBG(DBG_LEV,"\r\n"); LED_YELLOW_TOGGLE; m_input_type=INPUT_ADDRESS; postshowMenu(); }}节点程序#defineDBG_LEV9moduleCommSensorNodeP{ uses { interfaceBoot; interfaceAtosControl; interfaceAMSend; interfaceReceive; interfaceAMPacket; interfacePacket; interfaceAtoSensorCollection; }}implementation{ message_tm_sensor_msg; uintsensor_retry=0; boolm_sensoring=FALSE; uint8_tm_sensor_length=0; uint8_t*p_sensor_payload; uint16_tdest_address; taskvoidsensorDataTask() { error_tresult; result=callAtoSensorCollection.startSensor(p_sensor_payload); if(result!=SUCCESS) { if(sensor_retry++<3) { postsensorDataTask(); } else { atomicm_sensoring=FALSE; } } } taskvoidsendMsgTask() { uint8_ti; ADBG(3000,"sensorpayload:"); for(i=0;i<m_sensor_length;++i) { ADBG(3000,"%02x",(int)p_sensor_payload[i]); } if(callAMSend.send(dest_address,&m_sensor_msg,m_sensor_length)!=SUCCESS) { atomicm_sensoring=FALSE; } } eventvoidAMSend.sendDone(message_t*msg,error_tsuccess) { ADBG(DBG_LEV,"*Sent%s!\r\n",(success==SUCCESS)?"OK":"FAIL") } /*节点启动完毕*/ eventvoidBoot.booted() { /*开启射频*/ ADBG(DBG_LEV,"===========boot============\n"); LED_BLUE_TOGGLE; callAtosControl.start(); p_sensor_payload=callPacket.getPayload(&m_sensor_msg,NULL); } eventvoidAtoSensorCollection.sensorDone(uint8_t*data,uint8_tlen,error_tresult) { ADBG(10,"Sensordatadone,datalen=%d,result=%d",(int)len,(int)result); if(result==SUCCESS) { m_sensor_length=len; postsendMsgTask(); } else { atomicm_sensoring=FALSE; }} /*射频接收数据*/ eventmessage_t*Receive.receive(message_t*msg,void*payload,uint8_tlen) { LED_BLUE_TOGGLE; if(len!=1) { returnNULL; } ADBG(DBG_LEV,"Receivelen=%dpayload=%c\n",(int)len,*((char*)payload)); if(*(char*)payload=='y'||*(char*)payload=='Y') { dest_address=callAMPacket.source(msg); postsensorDataTask(); } }}
/
本文档为【无线传感网】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索