基于ZigBee的无线温湿度采集系统_第1页
基于ZigBee的无线温湿度采集系统_第2页
基于ZigBee的无线温湿度采集系统_第3页
基于ZigBee的无线温湿度采集系统_第4页
基于ZigBee的无线温湿度采集系统_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ZigBee的无线温湿度采集系统摘要:针对传统温湿度检测存在的问题,结合无线传感器网络技术,本文提出一种基于ZigBee技术的无线温湿度采集系统的设计方法。设计采用CC2530射频芯片及SHT11数字温湿度传感器,在ZigBee协议栈的根底上进行应用开发。阐述了ZigBee技术,系统组成及工作原理,系统软硬件设计等内容,并通过实验测试说明,该无线温湿度采集系统能够稳定可靠的运行,并且具有组网简单、功耗低,本钱低等优点,具有十分好的实用价值和经济效益。关键字:ZigBee,温湿度,CC2530,协议栈WirelesstemperatureandhumidityacquisitionsystembasedonZigBeetechnologyAbstract:Accordingtotheproblemsexistingintemperatureandhumiditydetectingoftraditionalways,combiningwithwirelesssensornetworktechnology,thispaperputsforwardanewdesignoftemperatureandhumidityacquisitionsystembasedonZigBeetechnology.ThedesignwascarriedoutbasedontheZigBeeprotocol,adoptingCC2530RFchipanddigitalhumidityandtemperaturesensorSHT11.PaperintroducesZigBeetechnology,theoveralldesignofthesystem,hardwareandsoftwaredesignofthenodesandsoforth.Finally,theexperimentaltestshaveprovedthatthewirelesstemperatureandhumidityacquisitionsystemwasstableandcredible,withtheadvantagesofsimplenetworking,lowcostandlowpower,andithasaverygoodpracticalvalueandeconomicbenefits.Keywords:ZigBee,Temperatureandhumidity,CC2530,Protocol1引言在冷链物流、农业生产、仓库管理以及食品保存等领域,温度和湿度控制显得十分重要,但传统的方法采用测试器材来测量温度和湿度,通过人工进行检测,这种人工测试方法费时费力、效率低,而且测试的温度及湿度的误差大,随机性大。因此,开发一种全新的温湿度采集系统就显得十分迫切和重要了。本文设计了一种采用无线传感器网络技术进行温度和湿度的采集系统。无线传感器网络不需要较高的传输带宽,但需要较低的传输时延和较低的功率消耗。ZigBee是一种新兴的短距离、低功耗、低数据速率、低本钱、低复杂度的无线网络技术,它的出现正好满足了这个要求。2ZigBee技术ZigBee是一种标准,该标准定义了短距离、低数据传输速率无线通信所需要的一系列通信协议,它拥有一套完整的协议层次结构,由IEEE802.15.4和ZigBee联盟共同制定完成。其工作频段分别是868MHz(欧洲)、915MHz(北美)、2.4GHz(全球)3个频段,可以应用于不同的场合,诸如家庭自动化网络、工业控制网络、交互式玩具、远程检测等。完整的ZigBee协议栈包括物理层(PHY)、媒体访问控制层(MAC)、网络层(NWK)和应用层(APL)。其中,ZigBee的应用层由应用支持子层(APS)、ZigBee设备对象(ZDO)和制造商定义的应用对象组成。在ZigBee协议栈中,每一层通过使用下层提供的效劳完成自己的功能,同时对上层提供效劳,网络中的通信在对等的层次上进行。ZigBee网络含三种类型的节点,即协调器、路由器和终端设备,其中协调器和路由器均为全功能设备(FFD),而终端设备选用精简功能设备(RFD)。一个ZigBee网络有且仅有一个协调器,该设备负责启动网络,配置网络成员地址,维护网络,维护节点的绑定关系表等,需要最多的存储空间和计算能力,它可以看作是一个PAN的网关节点。路由器主要实现扩展网络及路由消息的功能,终端设备那么负责与实际的监控对象相连,实现具体功能的单元。无线传感器网络中可以根据不同的需要组成星型、簇型网和网状型三种不同的网络拓扑结构。星状网络由一个PAN协调器和多个终端设备组成。只存在PAN协调器与终端设备的通信,终端设备间的通信都需通过PAN协调器的转发;树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输;网状网络是树状网络根底上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表配合实现消息的网状路由。一个ZigBee网络最多可含有65000多个子节点,通过无线网络数据从一个节点传送到另一个节点,最终传送到控制中心。另外,它可以与其他的无线网络如GPRS和CDMA等兼容,也可以接入有线网络如Internet、Ethernet,实现远程监控。3系统结构和原理基于ZigBee的无线温湿度采集系统采用ZigBee星型拓扑组网方式,多个具有简单功能的设备和传感器构成传感器节点〔终端设备〕,一台具有完整功能的设备作为中心节点〔协调器节点〕,中心节点与中心控制计算机〔PC机〕相连,中心控制计算机通过上位机软件可以实现对整个系统节点的监测和控制。整个系统工作时,传感器节点负责现场温湿度数据的采集,将采集到数据一定的数据格式存储起来,当上位机需要读取温湿度时,就发送相应指令给协调器,协调器将指令翻译后发送给传感器节点,传感器节点接收到指令,就将温湿度数据无线发送给协调器,协调器通过串口RS232将数据发送给PC机,PC机就可以对温湿度数据进行显示、分析和处理,从而实现了温湿度全程的无线采集和监测工作。此外,整个温湿度采集系统还可以实现协调器自检、发送功率设置、终端节点地址设定、时间读取和设置、低功耗设置、拍照等其它功能。4系统硬件设计4.1传感器节点无线传感器节点由数据采集、数据处理、无线通信和能量供给四个模块组成。数据采集模块由数字传感器或者模拟传感器加A/D转换器组成,负责区域内的温湿度信息采集和数据转换;数据处理模块由微控制器组成,负责控制整个传感器节点的操作和数据存储;无线通信模块由无线收发器组成,负责与其他传感器节点进行通信,能量供给模块为系统其他的三个局部提供能量。传感器节点由瑞温湿度传感器SHT11检测得到温湿度信息,并转化为数字信号,传输至CC2530,由CC2530负责对信号进行处理发送。节点电源局部使用两节五号电池为整个节点供电。为了使系统工作时间持续长,节点通常在闲置时快速进入休眠模式,其外设模块进入休眠状态,或者电源管理局部不对这些外设模块供电。SHT11是瑞士Sensirion公司推出的基于CMOSensTM技术的新型温湿度传感器。SHT11将温湿度传感器、信号放大调理、A/D转换、I2C总线接口全部集成于一个芯片上,该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件。这两个敏感元件分别将湿度和温度转换成电信号,该电信号首先进入微弱信号放大器进行放大器;然后进入一个14位的A/D转换器;最后经过二线串行数字接口输出数字信号。SHT11通过DATA数据总线输出的是相对湿度,需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。CC2530芯片是用于2.4-GHz、ZigBee和RF4CE应用的一个真正的片上系统〔SoC〕解决方案。它能够以非常低的总的材料本钱建立强大的网络节点。CC2530结合了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其它强大的功能。在本无线温湿度采集系统中,我们采用的是CC2530F256芯片,它结合了德州仪器的业界领先的黄金单元ZigBee

协议栈〔Z-Stack™〕,提供了一个强大和完整的ZigBee解决方案。温湿度传感器SHT11采集到的温湿度数据,存储在CC2530的FLASHROM中,当传感节点接收到读取温湿度指令时,就通过ZigBee协议栈将温湿度数据发送出去。4.2协调器节点网络协调器主要负责网络的建立,信息的接收、汇总、处理及控制指令的发送ZigBee网络最初由协调器发动并建立。协调器通过主动扫描选择一个适宜信道,根据扫描的结果选择自己的PANID及0x0000作为自己的短地址,其网络层将通过向MAC层发送MLME2START.request原语启动一个新的PAN。协调器节点在建成网络后,开始数据收发工作及各种操作指令的执行。当协调器收到数据时,根据数据的串ID来判断传送的数据是地址信息还是传感器采集的数据,根据不同的数据类型解析数据包提供给PC机显示和处理。5系统软件设计本系统的软件设计是基于Ti公司推出的跟CC2530芯片配套的Z2STACK协议栈和IAR集成开发环境进行设计的。ZSTACK协议栈运行在一个基于任务调度机制的OSAL操作系统上,OSAL通过触发任务的事件来实现任务调度。OSAL中的任务可以通过任API将其添加到系统中,实现多任务机制。系统中传感器节点由CC2530内部的MCU(8051)控制,定时向温湿度传感器SHT11发送读温度和湿度指令,SHT11完成温度和湿度转换后会发出转换完成信号,MCU在接收到转换完成信号后,读取温湿度值,并将这些数据信号传送给协调器。协调器通过串口RS232和上位机(PC)相连,通过人机交互的方式对整个区域的进行检测。为了实现这一功能,必须知道节点的长短地址对应表,这就需要节点在参加网络后发送自己的长短地址给协调器,协调器将长短地址对应列表存储起来,以便用户要求采集数据时依据地址表来采集每个传感器的数据。传感节点与协调器节点的温湿度采集及通信流程图如下列图1所示。图1传感器节点与协调器节点的通信流程图6系统测试验证本无线温湿度采集系统设计完成后,进行了一系列的测试工作,包括通信距离,穿墙能力,系统稳定性以及数据准确性等。经过测试,系统通信距离200米左右〔与发送功率有关〕,可以成功穿越一堵墙通信〔与网络拓扑形式有关〕,并可以稳定工作,预计传感器节点工作寿命可达1年。7结束语本文设计的基于ZigBee技术的CC2530无线温湿度采集系统,其外围设备简单、功耗低、传输无线化,而且精度高,可靠性好,提供了良好的人机交互界面,方便控制使用,在冷链物流,农业生产以及食品保存等等领域都有很好的应用前景。参考文献:王小强,欧阳骏,黄宁淋,ZigBee无线传感网络设计与实现,北京:化学工业出版社,2023.5.高手玮,吴灿阳.ZigBee技术实践教程,北京:北京航空航天大学出版社,2023.6瞿雷,刘盛德,胡咸斌.ZigBee技术及应用,北京:北京航空航天大学出版社,2007.9.吕强,刘玉华,刘志军,王国胜.基于ZigBee的无线温湿度检测终端设计.科学技术与工程,2023.12;8(23).ShahinFarahani.ZigBeeWirelessNetworksandTransceivers,ElsevierLtd,2023Sensirion.SHT11/Datasheet2SHT1x2SHT7x.pdfX.Li,W.David.CombiningtheBestofGlobal2as2ViewandLocal2as2ViewforDataIntegration[C].PODS,2004.ACal,DLembo,etal.ExperimentingDataInte2grationwithDIS@DIS[C].CAiSE2004,LectureNotesinComputerScience,2004,3084,9:51~66.附录:实物图及局部代码1实物图传感器节点实物传感器节点外包装手持读写器〔协调器节点〕2局部程序代码2.1终端节点〔传感器节点〕局部代码staticvoidSerialApp_ProcessZDOMsgs(zdoIncomingMsg_t*inMsg);staticvoidSerialApp_HandleKeys(uint8shift,uint8keys);staticvoidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt);staticvoidSerialApp_Send(void);staticvoidSerialApp_Resp(void);staticvoidSerialApp_CallBack(uint8port,uint8event);voidSerialApp_ProcessHym8563(void);//处理时钟芯片,得到时间数据voidSerialApp_ProcessSht11(void);//处理温湿度传感器,得到温湿度数据uint8SerialApp_GetVoltage(void);//获取电压数据voidSerialApp_MemoryTime(void);//存储时间数据〔一组时间以及第一组温湿度数据〕voidSerialApp_MemoryTemp_Humi(void);//存储温湿度数据〔第二组到第十七组温湿度数据〕voidSerialApp_LowPower(void);//低功耗处理函数if(events&SERIALAPP_MEM_TIME_EVT){PktNum++;//存储时间事件发生,温湿度组数加1SerialApp_ProcessHym8563();SerialApp_ProcessSht11();SerialApp_GetVoltage();SerialApp_MemoryTime();osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT,10000);//一组时间数据和第一组温湿度数据存储好后,等待10秒,触发温湿度存储事件,存储第二到第十七组温湿度//注意:此处时间最大为65536毫秒,因此为了方便,最多我们可以设置1分钟的延时,即60000return(events^SERIALAPP_MEM_TIME_EVT);}if(events&SERIALAPP_MEM_TEMP_HUMI_EVT){if(PktNum>1&&PktNum<=17)//温湿度数据的组数小于17时,依次每10秒存一组温湿度数据{//SerialApp_ProcessHym8563();SerialApp_ProcessSht11();SerialApp_MemoryTemp_Humi();PktNum++;//存一组温湿度,其组数加1osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT,10000);//每10秒存储一组,同上最长延时为65536毫秒,为方便,可最多设置为一分钟}if(PktNum==18)//当存满17组温湿度数据时,NV条目自动加1,温湿度数据组数重新归1,并再次注册存储时间任务{PktNum=1;CCLD_NV=CCLD_NV+1;offset=5;osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TIME_EVT,100);}return(events^SERIALAPP_MEM_TEMP_HUMI_EVT);}voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt){uint8buffer[20];uint8Temp_Humi_Read[70];//存放读取的温湿度数据uint8Time_Read[5];//存放读取的时间数据uint8Data_Package[80];//存放要发给协调器的数据包uint8delay;uint8i,ReturnValue1,ReturnValue2;switch(pkt->clusterId){//Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://Storetheaddressforsendingandretrying.osal_memcpy(&SerialApp_RxAddr,&(pkt->srcAddr),sizeof(afAddrType_t));if(pkt->cmd.Data[3]==0x00)//读温湿度指令{CCLD_NV=0x0400+pkt->cmd.Data[4];//将选择读取的数据包与NV条目对应起来ReturnValue1=osal_nv_read(CCLD_NV,0,5,Time_Read);//读时间数据ReturnValue2=osal_nv_read(CCLD_NV,5,68,Temp_Humi_Read);//读17组温湿度数据if(ReturnValue1==ZSUCCESS&&ReturnValue2==ZSUCCESS&&osal_nv_item_len(CCLD_NV))//读取成功,返回相应数据{Data_Package[0]=pkt->cmd.Data[0];//前缀Data_Package[1]=pkt->cmd.Data[1];//读写器IDData_Package[2]=pkt->cmd.Data[2];//TagIDData_Package[3]=pkt->cmd.Data[3];//功能位,读温湿度Data_Package[4]=0xFF;//状态位Data_Package[5]=Time_Read[0];//时间Data_Package[6]=Time_Read[1];Data_Package[7]=Time_Read[2];Data_Package[8]=Time_Read[3];Data_Package[9]=Time_Read[4];for(i=10;i<78;i++)//将17组温湿度的有效数据提取出来{Data_Package[i]=Temp_Humi_Read[i-10];//温湿度if(Data_Package[i]==0xFF)break;//NV条目初始化后全为FF,故当读到的温湿度数据为FF时,说明实际温湿度已经读完,该处没有存温湿度}SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;//单播发送SerialApp_TxAddr.addr.shortAddr=0x0000;//协调器地址SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;//发送端口AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,i,Data_Package,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}else//读取失败,那么返回下面数据{Data_Package[0]=pkt->cmd.Data[0];//前缀Data_Package[1]=pkt->cmd.Data[1];//读写器IDData_Package[2]=pkt->cmd.Data[2];//TagIDData_Package[3]=pkt->cmd.Data[3];//功能位,读温湿度Data_Package[4]=0xFE;//状态位SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;SerialApp_TxAddr.addr.shortAddr=0x0000;SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,5,Data_Package,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}}if(pkt->cmd.Data[3]==0x01)//设定冷链标签时间,通常设定为当前时间{externuint8seconds,minute,hour,date,week,month,years;minute=pkt->cmd.Data[8];//设定时间,将协调器发送过来的年月时分秒分别对应赋给年月时分秒hour=pkt->cmd.Data[7];date=pkt->cmd.Data[6];month=pkt->cmd.Data[5];years=pkt->cmd.Data[4];HYM8653_Init();//时钟芯片初始化HYM8563_Write_time();//将设定的时间写入时钟buffer[0]=pkt->cmd.Data[0];//前缀buffer[1]=pkt->cmd.Data[1];//读写器IDbuffer[2]=pkt->cmd.Data[2];//TagIDbuffer[3]=pkt->cmd.Data[3];//功能位,设定时间if(date!=0x00)//通过日期来判定时间是否设定成功,日期等于0,设定失败,否那么成功{buffer[4]=0xFF;}else{buffer[4]=0xFE;}SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;SerialApp_TxAddr.addr.shortAddr=0x0000;SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,5,buffer,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}if(pkt->cmd.Data[3]==0x02)//读取冷链标签时间数据〔不一定是当前时间〕{uint8Tx_Len;//要发送的数据长度〔字节数〕buffer[0]=pkt->cmd.Data[0];//前缀buffer[1]=pkt->cmd.Data[1];//读写器IDbuffer[2]=pkt->cmd.Data[2];//TagIDbuffer[3]=pkt->cmd.Data[3];//功能位,读取时间buffer[5]=TimeBuf[0];//时间数据buffer[6]=TimeBuf[1];buffer[7]=TimeBuf[2];buffer[8]=TimeBuf[3];buffer[9]=TimeBuf[4];if(buffer[7]!=0x00)//通过日期来判断是否读到时间,因为日期是不可能为0的{buffer[4]=0xFF;Tx_Len=10;}else{buffer[4]=0xFE;Tx_Len=5;}SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;SerialApp_TxAddr.addr.shortAddr=0x0000;SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,Tx_Len,buffer,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}if(pkt->cmd.Data[3]==0x03)//复杂指令{//osal_stop_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TIME_EVT);//收到此指令时,停止存储数据//osal_stop_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT);uint8DataBuf[80];uint8T_H[80];uint8i=0;osal_nv_read(CCLD_NV,0,73,DataBuf);//读取最后一个数据包的数据for(i=0;i<73;i++){T_H[i]=DataBuf[i];if(T_H[i]==0xFF)break;//获取最后一个数据包的有效数据}buffer[0]=pkt->cmd.Data[0];buffer[1]=pkt->cmd.Data[1];buffer[2]=pkt->cmd.Data[2];buffer[3]=pkt->cmd.Data[3];buffer[4]=0xFF;buffer[5]=SerialApp_GetVoltage();//电压buffer[6]=Total_Pkt_Num;//总的数据包数buffer[7]=(i-5)/4;//最后一个数据包的温湿度数据组数buffer[8]=pkt->rssi;//RSSI值SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;SerialApp_TxAddr.addr.shortAddr=0x0000;SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,9,buffer,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}break;2.2协调器节点局部代码voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt){uint8BUF[100];uint8Frame_Buf[100];uint8i;uint8delay;switch(pkt->clusterId){//Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://Storetheaddressforsendingandretrying.osal_memcpy(&SerialApp_RxAddr,&(pkt->srcAddr),sizeof(afAddrType_t));osal_memcpy(BUF,pkt->cmd.Data,pkt->cmd.DataLength);if(BUF[3]==0x00)//读温湿度{if(BUF[4]==0xFF)//读取成功{Frame_Buf[0]=pkt->cmd.DataLength+2;//总的数据长度Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;//冷链标签的地址高8位Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;//冷链标签的地址低8位Frame_Buf[3]=BUF[2];//TagIDFrame_Buf[4]=BUF[3];//功能位Frame_Buf[5]=BUF[4];//状态位Frame_Buf[6]=SerialApp_TxBuf[4];//数据包的序号for(i=7;i<pkt->cmd.DataLength+2;i++)//温湿度数据{Frame_Buf[i]=BUF[i-2];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+2);}if(BUF[4]==0xFE){Frame_Buf[0]=pkt->cmd.DataLength+1;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;Frame_Buf[3]=BUF[2];Frame_Buf[4]=BUF[3];Frame_Buf[5]=BUF[4];HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}}if(BUF[3]==0x01)//设置冷链标签时间{Frame_Buf[0]=pkt->cmd.DataLength+1;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;for(i=3;i<pkt->cmd.DataLength+1;i++){Frame_Buf[i]=BUF[i-1];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}if(BUF[3]==0x02)//读冷链标签的时间〔不一定是当前时间〕{Frame_Buf[0]=pkt->cmd.DataLength+1;//总的数据长度Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;for(i=3;i<pkt->cmd.DataLength+1;i++){Frame_Buf[i]=BUF[i-1];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}if(BUF[3]==0x03)//复杂指令{Frame_Buf[0]=pkt->cmd.DataLength+1;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;for(i=3;i<pkt->cmd.DataLength+1;i++){Frame_Buf[i]=BUF[i-1];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}if(BUF[3]==0x04)//检查协调器的工作状态{Frame_Buf[0]=pkt->cmd.DataLength+2;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;Frame_Buf[3]=SerialApp_TxBuf[2];Frame_Buf[4]=SerialApp_TxBuf[3];Frame_Buf[5]=0xFF;HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+2);}if(BUF[3]==0x05)//设置发送功率{//uint8T[3];uint8Return_Value;void*Tx_Value;uint8TransmissionPower;TransmissionPower=SerialApp_TxBuf[4];Tx_Value=&TransmissionPower;Return_Value=MAC_MlmeSetReq(MAC_PHY_TRANSMIT_POWER_SIGNED,Tx_Value);//T[0]=macPhyTxPower;//HalUARTWrite(SERIAL_APP_PORT,T,1);Frame_Buf[0]=pkt->cmd.DataLength+2;Frame_Buf[1]=SerialApp_RxAddr.addr.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论