基于CC2530的植物环境检测节点毕业设计.doc_第1页
基于CC2530的植物环境检测节点毕业设计.doc_第2页
基于CC2530的植物环境检测节点毕业设计.doc_第3页
基于CC2530的植物环境检测节点毕业设计.doc_第4页
基于CC2530的植物环境检测节点毕业设计.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

山东工商学院2014届毕业论文基于CC2530的植物环境检测节点毕业设计目 录引 言VIII第一章 绪 论11.1 论文研究的背景以及意义11.2 总体设计11.3 CC2530芯片简介21.4 ZigBee协议栈简介31.5 本文设计的主要内容4第二章 检测节点硬件设计52.1 传感器电路52.1.1 温度检测62.1.2 可变电压采集62.1.3 气体浓度62.1.4 土壤湿度传感器72.1.5 光照传感器82.2 数据采集电路92.3 电源模块92.4 复位电路102.5 报警电路10第三章 ZigBee协议栈123.1 协议栈概述123.2 ZigBee的网络拓扑结构及构建133.3 OSAL操作系统抽象层143.4 开发环境16第四章 软件设计194.1 总流程图194.2 建立网络204.2.1 网络形成204.2.2终端设备加入网络214.2.3 绑定214.3 数据采集234.4 终端设备发送数据234.5 协调器接收数据274.6 协调器将数据传给串口294.7 协调器接收PC传来的数据并发送314.8 指令处理34第五章 调试355.1 功能调试355.2 网络测试35结论37致谢语38参考文献39附录40引 言传统的花卉环境检测系统是以电线和电缆作为基础传输介质组成的数据采集系统。目前常用的解决方案是在监控现场,将传感器布置在需要监测的关键位置,将各个传感器采集到的信号通过独立电缆传送到中央采集站,由中央采集站将所有连接的信号集中处理发送到上位机,进行实时数据采集,如果需要监测的区域很大,需要很多传感器,相应的监测点分散,这种传统的有线方式就会存在线路布设复杂,接线繁琐,安装造价高,后期的电缆维护成本高等问题。由于有线环境检测系统本身的局限性,许多特殊环境下的网络覆盖和网络支持仍然是个难题。如果该系统使用有线的传输方式,要实现大面积园林花卉的自主管理,就要布置许多电缆,必然会影响花卉园林的美观性,且电缆长期在潮湿的环境中易被腐蚀,这又增加了安全隐患。综合以上情况,环境检测系统设计趋向于无线监测方式,用分布式的无线技术来代替传统的集中式有线技术,实现传感器和数据采集系统之间的直接通讯。无线传感器网络的出现和发展为这一问题提供了一个新的解决途径1。因此,我们准备采用无线通讯模式,通过使用一个适配器、节点(可根据实际情况安放节点)以及一些控制器来实现花卉的自主发送数据,自主提醒。目前物联网是国内外的研究热点。通过比较几种通讯协议以及国外产品的情况,我们最终选择低成本、低功耗和低速率的ZigBee协议,结合已经普遍应用的手机和平板等信息平台,设计了一种基于ZigBee的植物感知系统,包括监测植物生长环境中的温度、气体浓度、土壤湿度、光照强度等数据,并通过数据的反馈控制得到较为理想的环境。第一章 绪 论1.1 论文研究的背景以及意义目前,无线传感器网络作为一种新兴技术,已经成为国内外研究的热点,其在军事、环境、健康、家庭、商业、空间探索和救灾等领域展现出广阔的应用前景。国内外很多单位都开展了相关领域的研究,但大部分工作仍处在无线网络协议性能仿真和硬件节点小规模实验设计阶段。该项目如果成功,就可以将繁琐的园林管理变的简单,人们只需一键就可实现花卉的自主管理,只需很简单的方法就可查询花卉的状态。现在人们大多都忙于工作,早出晚归,家里的花花草草因无人管理而日益枯萎,且有些花卉对各种资源的需求很敏感,即使悉心照顾也可能因为一时的疏忽导致不可挽回的损失,而该系统可以针对不同的植物及时的提醒管理员该不该浇水。此装置会定时向网络发送水含量信息,管理员也可使用PC机通过网络实时查询花卉状态,。本课题研究的主要意义在于,结合当前快速发展的物联网技术,从日常生活应用出发,设计一种价格低廉、智能自组管理、使用简单的植物感知系统,协助人们管理维护植物花卉,增加生活乐趣2。本课题的创新点在于:1.利用无线自组网方式,实现多盆多种花卉植物信息的实时检测;2.实现对花卉植物信息的全面检测和感知; 3.电源方面,不使用外挂电源系统,使用电池或充电电池供电,方便使用。1.2 总体设计本设计以CC2530作为核心控制芯片,采用Z-Stack协议作为协议平台组成了一个小型无线网络。本系统由一个协调器节点和3个植物感知节点组成一个小型网络,通过协调器节点建立无线网络,3个终端节点依次加入网络,与协调器进行绑定,从而进行协调器和终端节点的数据传输。将终端节点放置在室内的不同地方,每个终端节点中采集CC2530片内温度,可变电压,气体浓度,湿度,光照强度等数据,经过无线传输到达协调器,协调器通过串口线将各个终端设备的信息通过串口调试界面显示在电脑上。同时通过PC机串口发送控制命令来控制到底是哪个终端设备来报告数据,哪个进入休眠。整个终端节点中有传感器的采集模块,将传感器采集到的模拟量通过A/D转换模块进而得到主控芯片CC2530能识别的数字量。通过软件滤波,使采集到的信号更加稳定。终端节点的主控芯片对数据进行处理,将其发送给网络中的协调器,通过协调器和PC机相连的串口线,将数据通过串口在PC机的串口调试界面上显示,得到比较直观的数据。这样我们就可以通过无线网络监控各个终端节点的数据。1.3 CC2530芯片简介CC2530 是用于2.4-GHzIEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。CC2530 结合了领先的RF 收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其它强大的功能。CC2530 有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。其主要特性:具有2个USART、8位和16位定时器、看门狗定时器、8路输入可配置的12位ADC、21个GPIO、AES128协同处理器,硬件支持CSMA-CA、数字化的RSSI/LQI和强大的DMA功能,具备电池监测和温度感测功能;支持5种电源模式,且转换时间短,可以较好地满足超低功耗系统的要求;在接收和发送模式下,电流损耗分别为24mA和29mA3。CC2530F256 结合了德州仪器的业界领先的黄金单元ZigBee协议栈(Z-Stack),提供了一个强大和完整的ZigBee 解决方案。CC2530F64 结合了德州仪器的黄金单元RemoTI,更好地提供了一个强大和完整的ZigBee RF4CE远程控制解决方案。图1.1给出了一个CC2530的功能框图4。图1.1 CC2530功能框图Fig1.1 CC2530 Functional Block Diagram1.4 ZigBee协议栈简介 ZigBee技术是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术。主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用。它有自己的协议标准,在数千个微小的传感器之间相互协调实现通信。这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们的通信效率非常高。ZigBee协议是建立在IEEE 802.15.4协议定义的物理层和MAC层基础之上的,分为物理层、MAC层、网络层和应用层。1.5 本文设计的主要内容本文主要研究的内容有:如何在Z-Stack协议栈的基础上组成一个无线网络,并且在无线网络中如何进行数据的采集、发送与接收,同时控制命令是如何的发送、接收与处理的。其具体包括以下内容:1.植物感知节点设计图1.2 植物感知节点原理框图Figure 1.2 Block diagram of plant perception node植物感知节点的工作是接收各个传感器采集到的信息,主要包括温度的采集、可变电压的采集、气体浓度的采集、土壤湿度的采集和光照强度信息的采集,这些信息通过A/D采集放入CC2530的存储器中,将处理后的数据通过无线网络传输到协调器中,如图1.2所示。2.无线组网本设计中的无线网络由一个协调器和20个终端节点组成。其中网络中的协调器的作用是建立一个无线网络,通过设置协调器终端的PAN ID号和通道号组成一个特殊的网络,并且允许其他终端节点进行绑定;当终端节点上电之后,查询到无线网络中已经有协调器存在,则以协调器为中心,建立网络,终端节点的短地址由协调器进行分配,并且终端节点与协调器进行绑定,实现通讯传输。3.串口通信和终端控制协调器接收终端设备传递过来的数据,通过串口调试界面在PC机显示。同时,协调器接收PC机串口发送的控制命令,控制哪个终端节点参与发送数据,哪个不进行数据的发送。第二章 检测节点硬件设计终端检测节点的框图如图2.1所示,主要包括温度采集、可变电压采集、气体浓度、环境温度和湿度等的采集模块及与其相关的其他模块。图2.1 ZigBee网络中终端设备的组成框图Fig2.1 Diagram of end device in the ZigBee network上图是终端节点的总设计思路,通过5V降压模块将电源适配器5V的电压进行降压,得到3.3V的供电电源,其为片内温度,A/D转换模块,微处理器和无线通信模块进行供电;5V的电源为可变电压、土壤湿度、气体浓度、光照强度的采集电路提供电源。气体传感器、环境温度、土壤湿度、气体浓度等模块的模拟量采集和可变电压的数据采集都通过A/D转换模块提交到微处理器,微处理器通过对数据进行处理,将数据通过无线通信模块发送到无线网络中,无线网络中的协调器收到了终端发送来的数据,将数据通过串口调试界面在PC机上显示。2.1 传感器电路在传感器电路部分,主要包括了要采集的片内温度、可变电压的采集电路、气体浓度的采集电路、环境温度的采集电路、土壤湿度的采集电路和光照传感器电路的硬件设计。2.1.1 温度检测终端节点要采集的数据中第一个是片内温度,片内温度利用的是CC2530片内集成的温度传感器来检测温度;通过CC2530中已经有的一路TEM_SENSOR输入端,使得片内温度传感器与A/D模块相连,通过设置各个A/D模块中用到的寄存器的值,得到片内温度传感器的温度,并将其作为第一个采集到的数据,发送到协调器,通过串口调试界面显示到PC机上。2.1.2 可变电压采集终端要采集的数据中第二个可变电压的数据采集,利用5V电源加载到滑动变阻器的两端,滑动变阻器中间分支的电压随着变阻器的调节而发生变化,采集此变化值作为ADC数据采集的模拟量输入到AIN7。通过滑动变阻器改变的电压值通过A/D模块采集到单片机内部,参考电压为3.3V,实现从0-3.3V的电压显示,电路图如图2.2。VCC_IO是3.3V。滑动变阻器为10k,输入端AIN7是P0.7。图2.2 ADC数据采集Fig2.2 ADC data acquisition2.1.3 气体浓度第三个数据是TGS2600检测气体浓度,检测气体浓度的模块是利用TGS2600模块随着检测气体浓度的变化产生而产生不同的电阻值。在图2.3中RS变阻器就是随着气体的浓度变化而出现电阻相应的变化,从而使得输出电压Vout的改变。在室温的时候加热器RH的电阻值为83,传感器电阻的变化范围为1090K5。图2.3 气体传感器的基本测试电路Fig2.3 The basic testing circuit of Gas sensor随着气体浓度的变化,出现RS随着变化。根据浓度和电阻变化有一个对照表,即可通过电阻变化值得到气体的浓度变化。传感器电阻RS,可根据Vout测定,用下式计算: (3-1)2.1.4土壤湿度传感器选用了简易价格低廉的土壤湿度传感器,如图2.4所示,其检测电路见图2.5。图2.4 土壤湿度传感器Figure 2.4 Soil moisture sensor图2.5 土壤湿度传感器电路Figure 2.5 Soil moisture sensor circuit2.1.5光照传感器实验了光敏二极管和光敏电阻两种光照传感器,根据灵敏度和感光范围,最终选用了简易价格低廉的光敏电阻传感器,如图2.6所示。图2.6光敏电阻Figure 2.6 photoresistor2.2 数据采集电路CC2530中的A/D采集电路图如图2.74。图2.7 CC2530中的ADC的框图Fig2.7 The diagram of ADC in CC2530据上图可以有8路单独的数据采集,使用的是P0口的8位。还可以是VDD/3和TMP_SENSOR(此是片内温度),本设计中的温度采集就是用了此路A/D。参考电压可以内部参考电压1.25V,AIN7这路的输入电压,AVDD3.3V,AIN6-AIN7的差分输入这四种形式,可以设置7 to 12bits 个有效分辨率。本设计中的可变电压的数据采集时使用的AIN7口即P0.7作为输入,AVDD3.3V的参考电压,12bits 的有效分辨率。其满量程是A/D采集的寄存器的值为8191。气体浓度的输入口为AIN0即P0.0,环境温度的输入口为AIN1即P0.1,环境湿度的输入口为AIN2即P0.2,气体传感器的输入口为AIN3即P0.3,光照的输入口为AIN5 P0.5,即其他配置与可变电压的数据采集相似。2.3 电源模块 电源部分,我们需要提供单片机的3.3V供电电源,和气体传感器采集时所需要的5V电源。我们采用分别供电的方式,首先通过3节5号电池通过TI公司的TPS79333模块降压实现3.3V的电源为单片机供电,用于提供射频模块的电压,IO端口的电压,和用于显示的电压。同时用USB提供5V电源为外围的气体传感器采集电路提供供电电源。转3.3V电源电路如图2.8:图2.8 3.3V电源模块Fig2.8 3.3V power module此处用到的3.3V供电电源,用来提供给CC2530最小系统供电,提供给端口供电,和液晶显示供电,和电路中一切用到电源的地方。2.4 复位电路复位电路,就是利用它把电路恢复到起始状态。就像计算器的清零按钮的作用一样,当你进行完了一个题目的计算后或者你输入错误,计算失误时都 要进行清零操作以便回到原始状态,重新进行计算。复位电路如图2.9所示:图2.9 复位电路Fig2.9 The reset circuit这是一个按键复位电路,当人为按下按钮时,则VCC的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,能够完全满足复位的时间的要求。2.5 报警电路在温度采集中,如果温度超过了一定的值,就触发报警电路,在本设计中,温度报警的阈值为24摄氏度。报警电路如图2.10所示:图2.10 报警电路Fig 2.10 Alarm Circuit通过P1.0口,发送一定频率的方波信号,如果采集到的温度大于24摄氏度,就触发报警发出声音。同时,P1.0连接LED1,使得LED1发出闪烁。除了以上的电路图外,用到的还有4个LED,其电路图如图2.8:图2.11 LED电路Fig 2.11 LED circuit硬件电路的总体效果图如附录1所示。第三章 ZigBee协议栈3.1 协议栈概述ZigBee协议栈由一组子层构成。每层为上层提供一组特定的服务:一个数据实体提供数据传输服务;一个管理实体提供全部其他服务。每个服务实体通过一个服务接入点(SAP)为上层提供服务接口,并且每个SAP提供了一个系列的基本服务指令来完成相应的功能。ZigBee协议栈的体系结构包括ZigBee应用层、ZigBee网络层、IEEE 802.15.4 MAC层和IEEE 802.15.4 PHY层。其图如3.1所示:图3.1 ZigBee协议栈体系结构Fig 3.1 The architecture of ZigBee protocol stack它虽然是基于标准的七层开放式系统互联(OSI)模型,但仅对那些涉及ZigBee层予以定义。IEEE 802.15.4 2003标准定义了最下面的两层:物理层(PHY)和介质接入控制层(MAC)。ZigBee联盟提供了网络层和应用层(APL)框架的设计。其中应用层的框架包括了应用支持子层(APS)、ZigBee设备对象(ZDO)和由制造商制订的应用对象。本设计中使用的是Z-Stack 2007协议栈,Z-Stack与ZigBee之间并不能完全划等号,Z-Stack是ZigBee的具体实现。该Z-Stack 2007协议,采用了轮转查询式操作系统,程序中为OSAL层。在执行外界处理程序时,该操作系统保护Z-Stack软件成分。它提供如下管理6:l 任务登记、初始化、启动l 任务间的信息交换l 任务同步l 中断处理l 定时器l 存储器分配3.2 ZigBee的网络拓扑结构及构建首先,根据IEEE 802.15.4标准7,一个无线网络中的设备类型分为以下两种:全功能设备(FFD)和简化功能设备(RFD)。全功能设备既可作为整个网络的协调器,也可作为一般设备而存在,且全功能设备能够与另外的全功能设备和简化功能设备通信,而简化功能设备之间不能互相通信,只能与全功能设备进行通信。基于此,ZigBee协议定义了三种角色:首先是网络协调器,负责网络的建立以及网络位置的分配,该角色必须由一个全功能设备构成,它作为网络的核心建立一个网络并分配相应的地址;然后是路由器,主要任务是寻找、建立以及修复路径并转发信息,这也是一个全功能设备;最后是终端节点,只能选择加入已经存在的网络,只能收发信息,不能转发信息,也没有路由功能,它可以是一个全功能设备,也可以是一个简化功能设备。网络可以根据需要组织成不同的拓扑类型。 星型网络以网络协调器为中心,而任何两个设备若想通信,都须经过网络协调器的转发。正因为如此,我们首先需要建立网络协调器。在一个网络中运行的所有设备都要有一个唯一的64位长地址。然后,网络协调器为网络选择一个惟一的标识符即PAN ID,整个网络之内的其他设备都使用这个PAN ID。而在选定PAN ID之后,由于有了网络标识,网络协调器便能够允许其它的设备加入,并为这些设备转发数据。星型网络是最为简单的一种网络拓扑类型,在本设计中由于节点数量的有限性,使用的就是这种最简单的网络拓扑结构,组成一个小型的无线传感器网络,进行数据通讯。 网状网络中,任意设备都是地位等同的,只要能接收到对方的信号就能进行通信,无须其他设备的转发,所以也称点对点网络。不过,在网状网络中仍然需要一个能够完成网络控制、管理等功能的网络协调器。而簇树网络里面的大部分设备为全功能设备,简化功能设备则以某个全功能设备为中心加入网络,对于简化功能设备来说,它和上层路由节点进行单独的数据收发在簇树网络中也有一个网络协调器,它会选择一个PAN ID,然后广播信标帧,当其他设备收到信标帧后,也即完成了其他设备与协调器的时间同步,便可以开始申请加入该网络。如果得到允许,则该设备将作为该协调器的子设备加入网络中。图3.2为无线网络中的两种拓扑结构,C代表协调器,R代表路由器,E代表终端节点。其中C 和 R 是全功能设备,E是简化功能设备7。图3.2 无线网络的两种拓扑结构Fig 3.2 Two topological structures in the wireless network3.3 OSAL操作系统抽象层在ZigBee协议中,协议本身已经定义了大部分内容。在基于ZigBee协议的应用开发中,用户只需要实现应用程序框架即可。从ZigBee协议的结构图见图3.1,可以看出应用程序框架中包含了最多240个应用程序对象。如果我们把一个应用程序对象看做为一个任务的话,那么应用程序框架将包含一个支持多任务的资源分配机制。于是OSAL便有了存在的必要性,它正是Z-Stack为了实现这样一个机制而存在的15。OSAL就是以实现多任务为核心的系统资源管理机制。所以OSAL与标准的操作系统还是有很大的区别的。简单而言,OSAL实现了类似操作系统的某些功能,但并不能称之为真正意义上的操作系统。当有一个事件发生的时候,OSAL负责将此事件分配给能够处理此事件的任务,然后此任务判断事件的类型,调用相应的事件处理程序进行处理。Z-Stack是基于一个轮转查询式的操作系统。该操作系统是个无休止的循环,每个任务轮转执行。各个任务按照优先级进行排列,优先级高的任务中的所有事件都具有很高的级别,只要优先级高的任务有事件没处理完成,系统就一直处理当前任务,直到所有事件都得到处理,才去执行下一个任务事件的查询。另外,在处理完一个事件后,系统需回头再去查询优先级更高的任务,只有当优先级最高的事件处理完毕,才会去执行次级优先级的事件。这种操作系统,赋予优先级高的任务最大的权力,保证优先级最高的任务的事件能够得到及时处理。图3.3即为Z-Stack的轮转查询式的操作系统的流程图:图3.3 Z-Stack的操作系统流程图Fig 3.3 Flow Diagram of Operating system of Z-Stack System3.4 开发环境本设计中,利用的是与CC2530开发板相配套的IAR Embedded Workbench for MCS-51 V7.51A8作为开发环境。Z-Stack协议栈的版本为:ZStack-CC2530-2.3.0-1.4.09。图3.4为IAR开发软件的界面。图3.4 IAR界面Fig 3.4 IAR interfaceAPP:应用层目录,即我们需要开发修改的部分HAL:硬件层目录。MAC:物理层目录。MT:监控调试层目录。NWK:网络层目录。OSAL:协议栈的操作系统,Profile:AF层目录。Security:安全层目录。Services:设备地址处理函数目录。Tool:工程配置目录。ZDO:Zigbee设备对象。ZMac:Z-Stack MAC导出层接口文件ZMain:项目入口函数,对外控制接口函数。Output:输出文件目录。第四章 软件设计基于总设计的软件方面的设计是本章的讨论内容,其中具体内容有:无线网络的建立,终端设备和协调器入网,终端与协调器的绑定,终端设备的数据采集,和终端设备发送数据到协调器,协调器通过串口将数据写入在PC机界面还有PC机界面中对数据的收发的控制。4.1 总流程图图4.1 总流程图Fig 4.1 General flow chart4.2 建立网络本设计中的传感器网络由一个协调器节点和3个终端节点构成,组成星型拓扑结构,从而形成一个无线网络,进行数据的传输。网络形成由协调器开始建立,终端节点等加入网络中,从而进行绑定,进行数据的传输。4.2.1 网络形成图4.2 网络组成Fig 4.2 The constitute of network每个设备都有一组能被配置的参数。这个配置参数在代码中已经定义了默认值。在同一个网络中,所有设备的“网络细节”(Network-specific)配置参数被配置成一样的值;每个设备的“设备细节”(Device-specific)配置参数可以配置为不同的值。但是ZCD_NV_LOGICAL_TYPE必须被设置,直至有正确的一个设备作为协调器被配置;所有的电池电源设备作为终端节点被配置。一旦这些工作都完成,协调器设备将建立网络,其他设备将发现和加入这个网络。协调器将扫描所有被ZCD_NV_CHANLIST参数所指定的通道建立网络。协调器选择用ZCD_NV_PANID参数指定的网络ID。如果ZDAPP_CONFIG_PAN_ID设定为0xFFFF,那么协调器建立的网络将根据自身的IEEE地址建立一个随机的PAN ID;如果ZDAPP_CONFIG_PAN_ID未被设定为0xFFFF,那么协调器建立网络的PAN ID 将由ZDAPP_CONFIG_PAN_ID指定。所有的参数配置好后,调用ZDO_StartDevice()函数来启动一个设备。在本设计中为了防止使用默认通道受到其他网络的干扰,设置了ZCD_NV_CHANLIST为通道12,ZDAPP_CONFIG_PAN_ID设置为0x1FFF10。4.2.2终端设备加入网络终端设备启动之后,将扫描DEFAULT_CHANLIST指定的频道。如果ZDAPP_CONFIG_PAN_ID没有被定义为0xFFFF,那么终端设备将强行加入ZDAPP_CONFIG_PAN_ID定义的网络。此时的ZDAPP_CONFIG_PAN_ID必须为一个正确的值小于或等于0x3FFF。若发现/加入网络,调用ZDO_StartDevice()启动该设备。4.2.3 绑定ZigBee定义了一个称为端点绑定的特殊过程。绑定是控制信息从一个应用层到另一个应用层流动的一种机制。绑定即在源节点的某个端点(EndPoint)和目标节点的某个端点之间创建一条逻辑链路。绑定可以发生在两个或多个设备之间。协调器节点维护一个基本上包括两个或多个端点之间的逻辑链路的绑定表。在绑定表中,包含如下信息,源节点和目的节点的IEEE地址、Endpoint号以及ClusterID。对于可以建立绑定关系的两个节点,它们的Cluster的属性必须一个选择“输入”,另一个选择“输出”,而且ClusterID值相等,只有这样,它们彼此才能建立绑定。有以下两种可用的机制配置设备绑定:(1)如果目的设备的扩展地址是已知的,则zb_BindDevice ( )函数就能创建一个绑定条目。(2)如果扩展地址是未知的,则一个“按钮”可以利用。这样的话,这个目的设备首先要处于一种状态,它将被zb_AllowBindResponse( )发出一个匹配响应,然后在源设备处zb_BindDeviceRequest( )函数带着空的地址发出。l 已知扩展地址的绑定这里可以调用函数zb_BindDevice ( )发起绑定请求:zb_BindDevice ( uint8 create, uint16 commandId, uint8 *pDestination );程序清单4.1if ( pDestination )/已知扩展地址的绑定 destination.addrMode = Addr64Bit; osal_cpyExtAddr( destination.addr.extAddr, pDestination ); ret = APSME_BindRequest( sapi_epDesc.endPoint, commandId, &destination, sapi_epDesc.endPoint ); /调用APS绑定请求函数 if ( ret = ZSuccess ) /绑定成功,调用函数ZDP_NwkAddrReq,得到被绑定设备的短地址 ZDP_NwkAddrReq(pDestination, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 ); osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 250 ); l 未知绑定地址的绑定但是在本网络中,pDestination所接受到的形参数值是NULL即zb_BindDevice( TRUE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL ),故绑定地址是未知的。在该绑定方式下,发送绑定请求之前,先要让被绑定的目的设备处于允许绑定模式。可以调用函数zb_AllowBind()进入该模式,调用该函数使设备在给定时间内进入允许绑定模式。在zb_AllowBind()该函数中调用函数afSetMatch,使之允许响应ZDO的匹配描述符请求。在目的设备处于允许绑定模式的时间内,源设备可以调用函数zb_BindDevice发送绑定请求并且发出匹配描述符请求,具体的软件流程如图4.3:SAPI_ProcessEvent()执行ZB_USER_EVENTS事件void zb_HandleOsalEvent()执行MY_FIND_COLLECTOR_EVT事件zb_BindDevice() 绑定请求匹配一个在允许绑定模式下的设备ZDO_AnyClusterMatches() 包括输入簇与输出簇,若有,发出匹配描述符请求ZDP_MatchDescReq()图4.3 处理绑定请求软件设计流程图Fig 4.3 The flow chart of handling the binding request用函数ZDP_MatchDescReq()搜索在一个应用中的输入/输出串列表中匹配某条件的设备/应用。目的设备在接受到绑定请求后处理该请求并发送绑定响应,源设备在在SAPI_ProcessEvent事件中处理该绑定响应。建立绑定之后,才可以终端和终端进行数据互传,这种互传是逻辑上的相互,实际上通过各个终端的父节点相互互传,例如如图4.2:终端1要与终端2进行互传,他们的父节点都是协调器,则终端1将数据发给协调器,协调器在绑定表中找到终端1绑定的终端2 ,将数据传递给终端2 ,这里我们会认为是终端1和终端2的直接通讯,实则是通过父节点完成的。4.3 数据采集加入网络的终端设备的作用就是采集数据,传递到网络中,通过协调器与PC机相连。在PC机上得到各个节点的片内温度、可变电压、气体传感器浓度、环境温度、环境湿度和气体传感器信息。在本实验中利用的是CC2530的片内温度作为温度来源,滑动变阻器上的阻值变化而产生的电压变化作为可变电压的采集,通过软件滤波得到的电压值作为A/D模块采集的模拟量,通过P0.7引脚进入CC2530的A/D采集端口。环境温度的采集、环境湿度的采集和气体传感器信息的采集均是通过外接传感器分别与P0.1、P0.2、P0.3、P0.5引脚相连从而进入CC2530的A/D采集端口。气体浓度的采集是通过TGS2600随浓度的变化而产生的电阻值得变化而产生的电压变化作为模拟量输入P0.0进入CC2530的A/D数据采集端口。在实验的过程中,因为随着浓度的变化出现的电压的变化范围非常大,而电压值是通过采集的A/D中的寄存器的值比上满量程时候的A/D采样值,然后乘以参考电压得到的数值,有了从浮点型到整形的强制转换,所以出现了四舍五入的现象。为了使实验中的数据的变化性更广,改为传输A/D采样的寄存器的值传到串口显示,这样可以更加清晰的看到,随浓度变化之后,A/D寄存器的值随着浓度的变化,便于实验操作。然后在串口中进行响应的变化,得到浓度与A/D采用中寄存器值得对应关系,也是与电压的对应关系。4.4 终端设备发送数据得到数据之后,终端设备的目的就是把数据发送出去,通过之前的与协调器的绑定,就可以调用绑定之后发送数据函数zb_SendDataRequest()12,将采集的数据发送到协调器,其相关的步骤如下。第一步:建立绑定后,终端就可以发送数据给协调器的时候,直接报告数据事件MY_REPORT_EVT。if ( event & MY_FIND_COLLECTOR_EVT ) / Delete previous binding if ( appState=APP_REPORT ) zb_BindDevice( FALSE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL );/如果没有建立绑定,则传感器设备将周期性地发送绑定请求 appState = APP_BIND; / blind LED 2 to indicate discovery and binding HalLedBlink ( HAL_LED_2, 0, 50, 500 ); / Find and bind to a collector device zb_BindDevice( TRUE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL ); osal_set_event( sapi_TaskID, MY_REPORT_EVT ); reportState = TRUE; 绑定结束后会自动启动MY_REPORT_EVT事件。此处的reportState是个全局变量,当其为真的时候可以报道数据,当其为假的时候不能报告数据到协调器。在sensor.c文件中定义了 #define MY_REPORT_EVT 0x0002表明MY_REPORT_EVT事件的任务ID号为0x0002。第二步:启动事件之后,轮询机制zb_HandleOsalEvent函数里面进行对相应事件进行相应的处理,即在此处实现对处理函数的调用。if ( event & MY_REPORT_EVT ) if ( appState = APP_REPORT ) sendReport(); osal_start_timerEx(sapi_TaskID, MY_REPORT_EVT, myReportPeriod ); 此处sendReport()函数就是对MY_REPORT_EVT事件进行处理的函数。同时调用osal_start_timerEx()设置一个任务timer,当myReportPeriod事件到来之时,将任务列表中的MY_REPORT_EVT事件进行触发,开始发送数据。第三步:发送数据。sendReport()函数,在此函数中将采集到的温度,可变电阻器的电压值,气体浓度,环境温度,环境湿度,气体传感器采集到的数据打包放入pdata数组,调用zb_SendDataRequest函数发送到与本设备相绑定的目的设备中。其函数代码为:static void sendReport(void) uint8 pDataSENSOR_REPORT_LENGTH; /长度为8 static uint8 reportNr=0; uint8 txOptions; / Read and report temperature value pDataSENSOR_TEMP_OFFSET = readTemp();/0 / Read and report voltage value pDataSENSOR_VOLTAGE_OFFSET-1 = readVoltage();/1 pDataSENSOR_VOLTAGE_OFFSET = readVoltage_gas(); /2 /Read and report environment value pDataSENSOR_ENVIRONMENT_OFFSET-1 = readEnvTemp(); /3 pDataSENSOR_ENVIRONMENT_OFFSET = readEnvHumi(); /4 pDataSENSOR_PARENT_OFFSET-1 = readGas();/5 /Read and report shortaddress pDataSENSOR_PARENT_OFFSET = HI_UINT16(parentShortAddr);/6 pDataSENSOR_PARENT_OFFSET+1= LO_UINT16(parentShortAddr);/7 / Set ACK request on each ACK_INTERVAL report / If a report failed, set ACK request on next report if ( +reportNr= REPORT_FAILURE_LIMIT ) osal_stop_timerEx( sapi_TaskID, MY_REPORT_EVT );/停止发送事件 reportState=TRUE; / Try binding to a new gateway osal_set_event( sapi_TaskID, MY_FIND_COLLECTOR_EVT ); reportFailureNr=0; / status = SUCCESS else / Reset failure counter reportFailureNr=0; 4.5 协调器接收数据当终端发送数据之后,在协调器一端对发送数据函数zb_SendDataRequest()相应的响应函数为SAPI_ProcessEvent中对应的AF_INCOMING_MSG_CMD,协调器调用了SAPI_ReceiveDataIndication函数对发送数据事件进行处理,其又调用了zb_ReceiveDataIndication函数执行具体的事件。将得到的数据在LCD上面显示出来。其具体软件流程如图4.4:zb_ReceiveDataIndication()执行具体的事件,将得到的数据在LCD上面显示出来。AF_INCOMING_MSG_CMD下执行SAPI_ReceiveDataIndication()SAPI_ProcessEvent()处理SYS_EVENT_MSG系统消息事件图4.4 协调器接受数据软件设计流程Fig 4.4 The flow chart of receiving data of the coordinatorvoid zb_ReceiveDataIndication( uint16 source, uint16 command, uint16 len, uint8 *pData ) gtwData.parent=BUILD_UINT16(pDataSENSOR_PARENT_OFFSET, pDataSENSOR_PARENT_OFFSET+1); / pData10 gtwData.source=source; gtwData.temp=*pData; gtwData.voltage=*(pData+1); gtwData.voltage_gas=BUILD_UINT16(pDataSENSOR_VOLTAGE_OFFSET, pDataSENSOR_VOLTAGE_OFFSET+1);/pData2 gtwData.envtemp=BUILD_UINT16(pDataSENSOR_ENVIRONMENT_OFFSET, pDataSENSOR_ENVIRONMENT_OFFSET+1);/pData4gtwData.envhumi=BUILD_UINT16(pDataSENSOR_EN

温馨提示

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

评论

0/150

提交评论