您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > ZIGBEE综合实例无线温度检测
ZIGBEE综合实例-无线温度检测授课内容系统设计原理协调器编程终端节点和路由编程系统设计原理Zigbee网络EndDevice1温度电压值EndDevice2温度电压值Router温度电压值CoordinatorPC机RS23系统设计原理图系统设计原理协调器建立网络路由终端加入网络周期性采集温度和电压发个协调器协调器通过串口发送各PC系统设计原理数据包用一个结构体实现,包括:头、尾、设备类型、节点网络地址、父节点网络地址、及采集数据。数据包结构:数据头两个&&,数据尾一个&头设备类型节点网络地址父节点网络地址传感器数据尾&&&系统设计原理路由采集温度时使用的数据包:设备类型为ROU表示节点是路由器,后面是父节点网络地址,传感器数据第一个W来表示温度后面的*为填充位,头设备类型节点网络地址父节点网络地址传感器数据尾&&ROU00010000W23*&系统设计原理终端节点采集电压的数据包:设备类型为END表示节点是终端节点,传感器数据第一个是V表示采集的电压信息,头设备类型节点网络地址父节点网络地址传感器数据尾&&END796F0000V3.3&协调器编程协调器的编程:头文件代码#ifndefSAMPLEAPP_H#defineSAMPLEAPP_H#includeZComDef.h“#defineSAMPLEAPP_ENDPOINT20#defineSAMPLEAPP_PROFID0x0F08#defineSAMPLEAPP_DEVICEID0x0001#defineSAMPLEAPP_DEVICE_VERSION0#defineSAMPLEAPP_FLAGS0#defineSAMPLEAPP_MAX_CLUSTERS4#defineSAMPLEAPP_PERIODIC_CLUSTERID1协调器编程#defineSAMPLEAPP_FLASH_CLUSTERID2#defineSAMPLEAPP_LIGHT_CLUSTERID3#defineSAMPLEAPP_SWITCH_CLUSTERID4externvoidSampleApp_Init(uint8task_id);UINT16SampleApp_ProcessEvent(uint8task_id,uint16events);SampleAppMaster.c文件#includeOSAL.h#includeZGlobals.h#includeAF.h#includeaps_groups.h#includeZDApp.h协调器编程#includeZDObject.h#includeZDProfile.h#includeSampleApp.h#includeOnBoard.h#includehal_lcd.h#includehal_led.h#includehal_key.h#includeMT_UART.h#includestring.h#defineHAL_DELAY()st({volatileuint32i;for(i=0;i0x3400;i++){};})协调器编程constcId_tSampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS]={SAMPLEAPP_PERIODIC_CLUSTERID,SAMPLEAPP_FLASH_CLUSTERID,SAMPLEAPP_LIGHT_CLUSTERID,SAMPLEAPP_SWITCH_CLUSTERID};constSimpleDescriptionFormat_tSampleApp_SimpleDesc={SAMPLEAPP_ENDPOINT,//intEndpoint;SAMPLEAPP_PROFID,//uint16AppProfId[2];SAMPLEAPP_DEVICEID,//uint16AppDeviceId[2];协调器编程SAMPLEAPP_DEVICE_VERSION,//intAppDevVer:4;SAMPLEAPP_FLAGS,//intAppFlags:4;SAMPLEAPP_MAX_CLUSTERS,//uint8AppNumInClusters;(cId_t*)SampleApp_ClusterList,//uint8*pAppInClusterList;SAMPLEAPP_MAX_CLUSTERS,//uint8AppNumInClusters;(cId_t*)SampleApp_ClusterList//uint8*pAppInClusterList;};endPointDesc_tSampleApp_epDesc;uint8SampleApp_TaskID;//TaskIDforinternaltask/eventprocessingdevStates_tSampleApp_NwkState;uint8SampleApp_TransID;//ThisistheuniquemessageID(counter)协调器编程afAddrType_tSampleApp_Periodic_DstAddr;afAddrType_tSampleApp_Flash_DstAddr;aps_Group_tSampleApp_Group;uint8SampleAppPeriodicCounter=0;uint8SampleAppFlashCounter=0;voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)voidSampleApp_Init(uint8task_id){SampleApp_TaskID=task_id;SampleApp_NwkState=DEV_INIT;SampleApp_TransID=0;协调器编程zgDeviceLogicalType=ZG_DEVICETYPE_COORDINATOR;#ifdefined(HOLD_AUTO_START)ZDOInitDevice(0);//延时启动#endifSampleApp_Periodic_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;SampleApp_Periodic_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Periodic_DstAddr.addr.shortAddr=0xFFFF;SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr=SAMPLEAPP_FLASH_GROUP;SampleApp_epDesc.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_epDesc.task_id=&SampleApp_TaskID;协调器编程SampleApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq=noLatencyReqs;afRegister(&SampleApp_epDesc);RegisterForKeys(SampleApp_TaskID);MT_UartRegisterTaskID(SampleApp_TaskID);SampleApp_Group.ID=SAMPLEAPP_FLASH_GROUP;osal_memcpy(SampleApp_Group.name,Group1,7);aps_AddGroup(SAMPLEAPP_ENDPOINT,&SampleApp_Group);#ifdefined(LCD_SUPPORTED)HalLcdWriteString(SampleApp,HAL_LCD_LINE_1);#endif协调器编程ZDO_RegisterForZDOMsg(SampleApp_TaskID,End_Device_Bind_rsp);ZDO_RegisterForZDOMsg(SampleApp_TaskID,Match_Desc_rsp);SampleAppTimingTask_Scan.Time=60000;//60s扫描网络}终端和路由的编程SanpleApp.h#ifndefSAMPLEAPP_H#defineSAMPLEAPP_H#includeZComDef.h“SanpleAppSlave.c#defineSampleAppTimingRFID0x1#defineSampleAppTimingBJ0x2#defineSampleAppTimingWait0x4#defineTASK_MASK0x00#defineSET_WS0x01#defineCLOSE_WS0x02终端和路由的编程if((R_Buffer.packet_Struct.cmd[1]=='W')&&(R_Buffer.packet_Struct.cmd[2]=='S')){P1DIR|=0x80;P0DIR|=0x02;s_connectionreset();error=0;error+=s_measure((unsignedchar*)&humi_val.i,&checksum,HUMI);//measurehumidityerror+=s_measure((unsignedchar*)&temp_val.i,&checksum,TEMP);//measuretemperatureif(error)s_connectionreset();//incaseofanerror:connectionresetelse{终端和路由的编程humi_val.f=(float)humi_val.i;//convertsintegertofloattemp_val.f=(float)temp_val.i;//convertsintegertofloatcalc_sth11(&humi_val.f,&temp_val.f);//calculatehumidity,temperaturetemp16_H=(unsignedint)(humi_val.f*10);temp16_T=(unsignedint)(temp_val.f*10);}T_Buffer.packet_Struct.DataBuf[0]=LO_UINT16(temp16_T);T_Buffer.packet_Struct.DataBuf[1]=HI_UINT16(temp16_T);//湿度T_Buffer.packet_Struct.DataBuf[2]=LO_UINT16(temp16_H);T_Buffer.packet_Struct.DataBuf[3]=HI_UINT16(temp16_H);RfHaveTxData=1;}
本文标题:ZIGBEE综合实例无线温度检测
链接地址:https://www.777doc.com/doc-5398205 .html