目录

在开发ZigBee无线传感器网络过程中,需解决以下几个问题:

网络拓扑结构

传感器数据采集

网络节点能量供应问题

数据传输距离


设计原理图如下:

协调器编程:

//Coordinator.htypedef union h
{unsigned char databuf[18];struct RFRXBUF{unsigned char head[2];                     //命令头unsigned char type[3];unsigned char myNWK[4];unsigned char pNWK[4];unsigned char value[4];                 //温度数据unsigned char tail;                     //命令尾}BUF;
}RFTX;   

该联合体包括一个数组databuf和一个结构体BUF

//Coordinator.c
UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )
{afIncomingMSGPacket_t *MSGpkt;if ( events & SYS_EVENT_MSG ){MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt ){switch ( MSGpkt->hdr.event ){case AF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB( MSGpkt );break;default:break;}osal_msg_deallocate( (uint8 *)MSGpkt );MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );}return (events ^ SYS_EVENT_MSG);}return 0;
}void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{RFTX rftx;unsigned char changeline[2]={0x0A , 0x0D};     //定义温度的位数字节,回车换行符的ASCII码switch ( pkt->clusterId ){case GENERICAPP_CLUSTERID:osal_memcpy( &rftx,pkt->cmd.Data,sizeof(rftx));HalUARTWrite(0,rftx.databuf,sizeof(rftx));HalUARTWrite(0,changeline,2);              //输出回车换行符break;}
}

对收到的消息进行处理和发送到串口

终端节点和路由器编程:

//Sensor.c
int8 readTemp(void)
{static uint16 reference_voltage;static uint8 bCalibrate = TRUE;unsigned char tmpADCCON3=ADCCON3;uint16 value;int8 temp;ATEST = 0x01;     //使能温度传感器TR0 |= 0x01;      //连接温度传感器ADCIF=0;ADCCON3 = (ADC_REF_115V | ADC_DEC_256 | ADC_CHN_TEMP);while(!ADCIF);ADCIF=0;value=ADCL;value |= ((uint16) ADCH) << 8;value >>=4;ADCCON3=tmpADCCON3;if(bCalibrate)       //记录第一次读取的温度值,用于校正温度数据{reference_voltage=value;bCalibrate=FALSE;}temp = 22+((value-reference_voltage)/4);     //温度校正函数return temp;
}unsigned int getVddvalue(void)
{unsigned int value;unsigned char tmpADCCON3=ADCCON3;ADCIF=0;ADCCON3=(ADC_REF_115V | ADC_DEC_064 | ADC_CHN_VDD3);while(!ADCIF);value=ADCH;ADCCON3=tmpADCCON3;return (value);
}

分别是温度检测函数和电压检测函数,使用CC2530单片机内部自带的温度传感器进行温度检测,内部ADC对电压进行检测,VDD/3作为一个ADC输入通道,对通道进行检测

//Enddevice.c
void sendTemp( void )
{//unsigned char theMessageData[10] = "EndDevice";uint16 tempvalue;uint16 nwk;RFTX rftx;tempvalue = readTemp();rftx.BUF.value[0] = 'W';rftx.BUF.value[1] = tempvalue / 10 + '0';rftx.BUF.value[2] = tempvalue % 10 + '0';rftx.BUF.value[3] = '*';osal_memcpy(rftx.BUF.head,"&&",2);if(GenericApp_NwkState == DEV_ROUTER){osal_memcpy(rftx.BUF.type,"ROU",3);}if(GenericApp_NwkState == DEV_END_DEVICE){osal_memcpy(rftx.BUF.type,"END",3);}nwk=NLME_GetShortAddr();To_string(rftx.BUF.myNWK,(uint8 *)&nwk,2);nwk=NLME_GetCoordShortAddr();To_string(rftx.BUF.pNWK,(uint8 *)&nwk,2);rftx.BUF.tail='&';afAddrType_t my_DstAddr;my_DstAddr.addrMode= (afAddrMode_t) Addr16Bit;            //单播发送my_DstAddr.endPoint= GENERICAPP_ENDPOINT;                 //目的端口号my_DstAddr.addr.shortAddr= 0x0000;                        //协调器网络地址AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,18,(uint8 *)&rftx,&GenericApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) ;
}void sendVdd( void )
{uint16 vddvalue;uint16 nwk;RFTX rftx;vddvalue=69*getVddvalue()/256;rftx.BUF.value[0] = 'V';rftx.BUF.value[1] = vddvalue / 10 + '0';rftx.BUF.value[2] = '.';rftx.BUF.value[3] = vddvalue % 10 + '0';if(GenericApp_NwkState == DEV_ROUTER){osal_memcpy(rftx.BUF.type,"ROU",3);}if(GenericApp_NwkState == DEV_END_DEVICE){osal_memcpy(rftx.BUF.type,"END",3);}nwk=NLME_GetShortAddr();To_string(rftx.BUF.myNWK,(uint8 *)&nwk,2);nwk=NLME_GetCoordShortAddr();To_string(rftx.BUF.pNWK,(uint8 *)&nwk,2);rftx.BUF.tail='&';afAddrType_t my_DstAddr;my_DstAddr.addrMode= (afAddrMode_t) Addr16Bit;            //单播发送my_DstAddr.endPoint= GENERICAPP_ENDPOINT;                 //目的端口号my_DstAddr.addr.shortAddr= 0x0000;                        //协调器网络地址AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,18,(uint8 *)&rftx,&GenericApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) ;
}

对于温度检测函数,调用readTem()函数,读取温度传感器数据,将网络地址,父节点网络地址以及数据头和数据尾信息填充到rftx相应的数据域,最后调用数据发送函数AF_DataRequest();对于电压检测函数,调用getVddvalue()函数,读取电压数据,将网络地址,父节点网络地址以及数据头和数据尾信息填充到rftx相应的数据域。

测试如下:

ZigBee学习(7)————Zigbee无线传感器网络远程数据采集相关推荐

  1. ZigBee无线传感器网络远程数据采集系统设计

       ZigBee无线传感器网络远程数据采集系统设计             原理: 在实验中,协调器节点负责建立网络,路由器节点与终端节点申请加入网络,然后周期性地采集温度.电压等发送给协调器,协调 ...

  2. 1-15 实验12 ZigBee无线传感器网络远程数据采集系统

    ZigBee无线传感器网络远程数据采集系统 1.实验内容:协调器建立网络,路由器和终端节点加入网络,然后周期性地采集温度和电压发送给协调器,协调器通过串口发送给PC的串口调试助手 2.补充:(为了便于 ...

  3. ZigBee学习笔记——(一)无线传感器网络

    第一章 无线传感器网络 一.无线传感器网络概述 二.无线传感器网络的特点 三.无线传感器网络体系结构 1.传感器节点体系结构 2.无线传感器网络体系结构 3.无线传感器网络协议体系结构 四.无线传感器 ...

  4. ZigBee学习笔记——(三)ZigBee无线传感器网络通信标准

    第三章 ZigBee无线传感器网络通信标准 一.ZigBee 标准概述 二.ZigBee 技术特点 三.ZigBee 协议框架 四.ZigBee 网络层规范 五.ZigBee 应用层规范 六.ZigB ...

  5. ZigBee无线传感器网络知识点总结

    第一章 无线传感器网络 Wireless Sensor Network (WSN) 1 无线传感器网络定义 无线传感器是一种大规模.自组织.多跳.无基础设施支持的无线网络,网络节点是同构的.成本较低, ...

  6. STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输

    目录 项目场景 硬件准备 实现过程 实现缘由 原理展现 成果展现 USB-TTL模块有线数据展示 ZigBee模块远程传输数据展示 最后总结 项目场景 本人在做STM32硬件开发项目中,传输数据这一块 ...

  7. Zigbee学习笔记

    作为一个硬件从业人员,虽然不是从事物理网行业的,但是多少得了解一些,以下是笔者最近学习Zigbee的笔记,包含了Zigbee基本知识,正确的学习方法. Zigbee无线传感网络 先搞清楚IEEE802 ...

  8. Zigbee学习(一)架构及入网

    Zigbee学习(一)架构及入网 文章目录 Zigbee学习(一)架构及入网 前言 一.zigbee是什么? 1.zigbee的特点 2.zigbee的重要概念 二.zigbee架构 1.PHY物理层 ...

  9. ZigBee学习之10——MAC层API解读

    ZigBee学习之10--MAC层API解读 其实也算不上什么解读拉,基本上是把官方的文档翻译了一下.在Zigbee中,是分层结构 的,这样做有很多的好处,每一层只负责自己的东西,数据传输更加透明和有 ...

最新文章

  1. python画图代码彩虹-Python利用turtle库绘制彩虹代码示例
  2. 认识DOM的三大节点:元素节点,文本节点,属性节点以及nodeName,nodeType,nodeValue的区别
  3. [今日干货]短视频获得种子用户的途径
  4. IO多路转接模型-----epoll
  5. C# winform 自定义皮肤制作
  6. Gartner:企业机构需重新定义网络安全领导者角色
  7. Kylin, Mondrian, Saiku系统的整合
  8. cmd查看端口占用情况 和 关闭被占用的端口
  9. 头条用户人均985,月入过万?看完真实的数据可视化,我有了答案
  10. 【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps...
  11. Linux 查看端口状态 netstat
  12. 惠普打印机故障代码_惠普打印机故障代码
  13. python自动补全快捷键_Python快捷键的干货来啦!快来看看你掌握了几个~
  14. Keil5的详细安装教程
  15. 微服务+异步工作流+Serverless,Netflix 决定弃用稳定运行7年的旧平台
  16. 计算机网络与互联网的区别,计算机网络与互联网的主要区别是什么?
  17. 一文读懂“什么是Web 1.0,Web 2.0,Web 3.0?”
  18. 《感冒+发烧》后的感受
  19. 破解花式反爬之大众点评-下
  20. linux中的clock shew 问题的解决方法

热门文章

  1. 高德导航升级6.0后应用crash解决
  2. 视频、音频、图片修改软件
  3. 基于JAVA成人自考信息与推荐系统录屏计算机毕业设计源码+系统+lw文档+部署
  4. json数据包含等号解析
  5. 100人同时在线游戏的服务器多少钱一台?
  6. linux系统解决磁盘IO使用率很高
  7. matlab解无解析解微分方程组,数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解...
  8. 昆山农商行手机银行服务器证书,昆山农商行网上银行常见问题处理
  9. unrar e 解压命令报错:
  10. web前端面试题分享(一)