ZigBee学习(7)————Zigbee无线传感器网络远程数据采集
目录
在开发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无线传感器网络远程数据采集相关推荐
- ZigBee无线传感器网络远程数据采集系统设计
ZigBee无线传感器网络远程数据采集系统设计 原理: 在实验中,协调器节点负责建立网络,路由器节点与终端节点申请加入网络,然后周期性地采集温度.电压等发送给协调器,协调 ...
- 1-15 实验12 ZigBee无线传感器网络远程数据采集系统
ZigBee无线传感器网络远程数据采集系统 1.实验内容:协调器建立网络,路由器和终端节点加入网络,然后周期性地采集温度和电压发送给协调器,协调器通过串口发送给PC的串口调试助手 2.补充:(为了便于 ...
- ZigBee学习笔记——(一)无线传感器网络
第一章 无线传感器网络 一.无线传感器网络概述 二.无线传感器网络的特点 三.无线传感器网络体系结构 1.传感器节点体系结构 2.无线传感器网络体系结构 3.无线传感器网络协议体系结构 四.无线传感器 ...
- ZigBee学习笔记——(三)ZigBee无线传感器网络通信标准
第三章 ZigBee无线传感器网络通信标准 一.ZigBee 标准概述 二.ZigBee 技术特点 三.ZigBee 协议框架 四.ZigBee 网络层规范 五.ZigBee 应用层规范 六.ZigB ...
- ZigBee无线传感器网络知识点总结
第一章 无线传感器网络 Wireless Sensor Network (WSN) 1 无线传感器网络定义 无线传感器是一种大规模.自组织.多跳.无基础设施支持的无线网络,网络节点是同构的.成本较低, ...
- STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输
目录 项目场景 硬件准备 实现过程 实现缘由 原理展现 成果展现 USB-TTL模块有线数据展示 ZigBee模块远程传输数据展示 最后总结 项目场景 本人在做STM32硬件开发项目中,传输数据这一块 ...
- Zigbee学习笔记
作为一个硬件从业人员,虽然不是从事物理网行业的,但是多少得了解一些,以下是笔者最近学习Zigbee的笔记,包含了Zigbee基本知识,正确的学习方法. Zigbee无线传感网络 先搞清楚IEEE802 ...
- Zigbee学习(一)架构及入网
Zigbee学习(一)架构及入网 文章目录 Zigbee学习(一)架构及入网 前言 一.zigbee是什么? 1.zigbee的特点 2.zigbee的重要概念 二.zigbee架构 1.PHY物理层 ...
- ZigBee学习之10——MAC层API解读
ZigBee学习之10--MAC层API解读 其实也算不上什么解读拉,基本上是把官方的文档翻译了一下.在Zigbee中,是分层结构 的,这样做有很多的好处,每一层只负责自己的东西,数据传输更加透明和有 ...
最新文章
- python画图代码彩虹-Python利用turtle库绘制彩虹代码示例
- 认识DOM的三大节点:元素节点,文本节点,属性节点以及nodeName,nodeType,nodeValue的区别
- [今日干货]短视频获得种子用户的途径
- IO多路转接模型-----epoll
- C# winform 自定义皮肤制作
- Gartner:企业机构需重新定义网络安全领导者角色
- Kylin, Mondrian, Saiku系统的整合
- cmd查看端口占用情况 和 关闭被占用的端口
- 头条用户人均985,月入过万?看完真实的数据可视化,我有了答案
- 【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps...
- Linux 查看端口状态 netstat
- 惠普打印机故障代码_惠普打印机故障代码
- python自动补全快捷键_Python快捷键的干货来啦!快来看看你掌握了几个~
- Keil5的详细安装教程
- 微服务+异步工作流+Serverless,Netflix 决定弃用稳定运行7年的旧平台
- 计算机网络与互联网的区别,计算机网络与互联网的主要区别是什么?
- 一文读懂“什么是Web 1.0,Web 2.0,Web 3.0?”
- 《感冒+发烧》后的感受
- 破解花式反爬之大众点评-下
- linux中的clock shew 问题的解决方法
热门文章
- 高德导航升级6.0后应用crash解决
- 视频、音频、图片修改软件
- 基于JAVA成人自考信息与推荐系统录屏计算机毕业设计源码+系统+lw文档+部署
- json数据包含等号解析
- 100人同时在线游戏的服务器多少钱一台?
- linux系统解决磁盘IO使用率很高
- matlab解无解析解微分方程组,数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解...
- 昆山农商行手机银行服务器证书,昆山农商行网上银行常见问题处理
- unrar e 解压命令报错:
- web前端面试题分享(一)