基于物联网的智能仓储温湿度检测系统 - 图文

更新时间:2023-03-10 19:36:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

*******************

实践教学

*******************

兰州理工大学

计算机与通信学院

2014年春季学期

物联网综合应用实践课程设计

题 目: 基于物联网的智能仓储温湿度检测系统 专业班级:

姓 名: 学 号: 指导教师: 成 绩:

摘要

仓储在物流战略中的重要性日益提高,在物流管理中占据着核心的地位,并己成为供应链管理的核心环节。传统的仓储环境监测系统存在布线复杂,可靠性低,管理维护成本低等问题,因而将新的科学技术引入仓储系统中构建信息化、网络化、智能化的仓储环境监控系统具有重要意义。针对现有仓库温湿度检测存在的问题,结合无线传感器网络技术,提出一种基于Zigbee技术的仓库温湿度采集系统设计方法。设计采用CC2430射频芯片及SHT10数字温湿度传感器,在Zigbee协议栈的基础上进行应用开发。阐述了系统的总体设计,节点的硬件设计和软件设计。通过实验测试表明,该无线化的仓库温湿度采集系统能够稳定可靠的运行,并且具有组网简单、系统花费少、扩张网络容易等优点。

关键词:仓储 温湿度检测 Zigbee 无线传感网络

目录

摘要 ·································· 2 第一章 前言 ······························ 4 1.1系统背景及意义 ···························· 4 1.2系统功能及特点 ···························· 4 第二章 ZIGBEE技术简介 ························· 5 2.1 ZIGBEE综述 ······························ 5 2.2 ZIGBEE协议栈与网络层简介 ······················· 5 第三章 系统分析与设计 ·························· 8 3.1基本原理: ······························ 8 3.2系统方案比较与选择 ·························· 9 3.3系统整体设计 ····························· 9 总结 ································· 19 致谢 ································· 20 参考文献 ······························· 22 附录 ································· 24

第一章 前言

1.1系统背景及意义

温湿度的检测是纺织、食品、医药、仓储的重要参量,对温湿度监测具有广泛的应用领域。随着仓库安全工作的要求越来越严格,仓库监测大量涌现,仓库监测的认知度和自动化体现的越来越先进。防潮、防霉、防腐、防爆是食品日常存储工作的重要内容,是衡量食品储藏质量的重要指标,它直接影响到储备物资的使用寿命和工作可靠性。为保证日常工作的顺利进行,首要问题是加强物品温度与湿度的监测工作。但传统的方法是用温度计与湿度表、双金属式测量计和湿度试纸等测试器材,通过人工进行检测,对不符合温度和湿度要求的食品进行通风、干燥等工作。这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。因此我们需要一种造价低廉、使用方便且测量准确的温湿度测量控制仪。

1.2系统功能及特点

系统由终端节点、路由器以及网络协调器(网关)三类设备组成。以仓库为单位,进行无线传感器网络覆盖,由终端节点将传感器数据采集并经过过路由器发送至网络协调器,数据进入上位机进行分析处理。节点为自身独立采集子系统,可在节点上完成数据采集,数据存储以及数据显示功能。该系统是以高效率、低成本、低功耗为原则,保证数据准确传输为基础完成的智能华无线传感器网络系统,适合于各种仓储仓库,楼宇以及家庭应用。智能仓储监测系统拥有全面、可靠的环境信息采集分析能力。为了实现环境信息监测的精确性、全面性并且方便使用,本文的环境监测系统应具有以下各种特点:(1)低功耗。在低耗电待机模式下,2节5号干电池可支持1个节点工作6到24个月,甚至更长。(2)低成本。通过大幅简化协,降低了对通信控制器的要求,按预测分析,以8051的8位微控制器测算,子功能节点少至4KB代码,而且ZigBee免协议专利费。(3)低速率。ZigBee工作在250kbps的通讯速率,满足低速率传输数据的应用需求。(4)近距离。传输范围一般介于10~100m之间,在增加RF发射功率后,亦可增加到100m-1km。这指的是相邻节点间的距离。如果通过路由和节点间通信的接力,传输距离将可以更远。(5)短时延。ZigBee的响应速度较快,一般从睡眠转入工作状态只需15ms,节点连接进入网络只需30ms,进一步节省了电能。(6)高容量。ZigBee可采用星状、片状和网状网络结构,由一个主节点管理若干子节点,最多一个主节点可管理254个子节点;同时主节点还可由上一层网络节点管理,最多可组成65000个节点的大网。(7)高安全。ZigBee提供了三级安全模式,包括无安全设定、使用接入控制清单(ACL)防止非法获取数据以及采用高级加密标准(AES128)的对称密码,以灵活确定其安全属性。(8)免执照频段。采用直接序列扩频在工业科学医疗2.4GHz(全球)(ISM)频段。

第二章 Zigbee技术简介

2.1 Zigbee综述

Zigbee是针对小型设备的无线联网而制定的协议规范,拥有一套完整的协议层次结构,由I EEE80 2.15.4和Zigbee联盟共同制定完成。其工作频段分别是868MH z、9 15M H z、2.4GH z3个频段,可以应用于不同的场合,诸如家庭自动化网络、工业控制网络、交互式玩具、远程检测等。完整的ZigBee协议栈包括物理层(PH Y)、媒体访问控制层(M A C)、网络层(N W K)和应用层(A PL)。ZigBee的应用层由应用支持子层(A PS)、Zigbee设备对象(ZDO)和制造商定义的应用对象组成。在Zigbee协议栈中,每一层通过使用下层提供的服务完成自己的功能,同时对上层提供服务,网络中的通信在对等的层次上进行。Zigbee网络含三种类型的节点,即协调器、路由器和终端设备,其中协调器和路由器均为全功能设备(F FD),而终端设备选用精简功能设备(RF D)。一个ZigBee网络有且仅有一个协调器,该设备负责启动网络,配置网络成员地址,维护网络,维护节点的绑定关系表等,需要最多的存储空间和计算能力,它可以看作是一个PA N的网关节点。路由器主要实现扩展网络及路由消息的功能,终端设备则负责与实际的监控对象相连,实现具体功能的单元。无线传感器网络中可以根据不同的需要组成星型、簇型网和网状型三种不同的网络拓扑结构。星状网络由一个P A N协调器和多个终端设备组成。只存在PA N协调器与终端设备的通信,终端设备间的通信都需通过P A N协调器的转发;树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输;网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表配合实现消息的网状路由。一个ZigBe e网络最多可含有6500 0多个子节点,通过无线网络数据从一个节点传送到另一个节点,最终传送到控制中心。另外,它可以与其他的无线网络如G PRS和CD M A等兼容,也可以接入有线网络如Intern t、Ethernet,实现远程监控。

Zigbee无线传感网络是就是Zigbee应用方案的经典应用。无线传感网络是基于IEEE802.15.4技术标准和Zigbee网络协议而设计的无线数据传输网络,该网络主要应用在压力过程控制数据采集、流量过程控制数据采集、温度湿度监控、楼宇自动化、工业控制、数据中心、社区安防、设备监控、环境数据监控、制冷监控、仓库货物监控等方面。适用于蔬菜大棚温度、湿度和土壤酸碱度监控,钢铁冶炼温度控制,煤气抄表等各个领域。这种网络主要用于无线系统中短距离的连接,提供传感器网络接入,能够满足各种传感器的数据输出和输入控制的命令和信息的需求,实现系统网络化、无线化。这种网络是低速率的无线传感网络,射频传输成本低,各节点只需要很少的能量,低功耗,适用于电池长期工作供电,可实现一点到多点,两点之间的对等通信,快速组网自动配置,自动恢复和高级电源管理,网络中任意个传感器之间可相互协调实现数据通信。

2.2 Zigbee协议栈与网络层简介

ZigBee网络层必须提供功能,其的主要就是提供一些必要的函数,以保证IEEE 802.15.4-2003ZigBee协议栈的MAC层能够正确操作,正常工作,并且为应用层提供一个合适的服务接口。为了和应用层通信,必须向其提供接口,网络层的概念包括了两个必要的功能服务实体,提供必要的功能。它们分别为数据服务实体(NLDE)和管理服务实体(NLME)。

网络层数据实体(NLDE)通过网络层相关的数据库服务接入点(NLDE-SAP)提供数据传输服务,网络层管理实体(NLME)通过网络层相关的管理库服务接入点(NLME-SAP)提供网络管理服务,网络层管理实体利用网络层数据实体来获得一些网络管理任务,并完成一些网络的管理工作。并且,网络层管理实体还维护一个管理对象的数据库,叫做网络信息库(NIB),网络层管理实体完成对网络信息库(NIB)的维护和管理。

1、网络层数据实体(NLME)

网络层数据实体提供一个数据服务,同一个网络中,即在同一个内部个域网中的两个或者更多的设备之间传送数据时,允许一个应用程序将按照应用协议数据单元(APDU)的格式进行传送数据。

网络层数据实体提供如下服务:

① 生成网络级别的协议数据单元(网络层协议数据单元)PDU(NPDU):网络层数据实体(NLME)通过增加一个适当的协议头,从应用支持子层的协议数据单元PDU中生成网络层的协议数据单元(NPDU)。

② 指定拓扑传输路由:网络层数据实体能够发送一个网络层的协议数据单元到一个合适的设备,该设备可以是最终的目的通信设备,也可能是通信链路中到最终目的节点的下一个节点。

2、 网络层管理实体

网络层管理实体提供网络管理服务,允许一个应用程序与堆栈相互作用。并且网络层管理实体还维护一个叫做网络信息库(NIB)的管理对象的数据库。

网络层管理实体应该提供如下服务:

① 配置一个新的设备:为所需的操作充分配置协议栈的功能。为保证设备正常工作的需要,满足配置的需要,设备应该具有足够堆栈。配置选项中包括对一个ZigBee协调器的操作,或加入一个已存在的网络。

② 开始一个网络:建立一个新的网络功能,使之具有建立一个新网络的能力。

③ 加入、重新加入和离开一个网络:实现加入、重新加入和离开一个网络的功能,以及为一个ZigBee协调器或者ZigBee路由器请求一个设备离开网络的能力。具有连接或者断开一个网络的能力。

④ 寻址:ZigBee协调器和ZigBee路由器具有为新加入网络的设备分配地址的能力。 ⑤ 邻居设备发现:具有发现、记录和汇报有关单跳邻居设备信息的能力。

⑥ 路由发现:具有发现和记录有效地传送信息的网络路由能力,即信息可以有效的传达。

⑦ 收控制:具有控制设备接收机接收状态的能力,即控制何时接收者是激活的,以及接收激活时间的长短,从而使MAC层的同步或者直接接收等。

⑧ 路由:具有使用不同路由机制的能力。有单播、多播、广播等,使得路由能够在网络中高效率的交换数据。

3、网络层服务规范

网络层通过两种服务访问点(SPA)提供相应的两种服务,它们分别是网络层数据服务(NLDE)和网络层管理服务(NLME)。网络层数据服务通过网络层数据实体服务接入点接入,网络层管理服务通过网络层管理实体服务接入点接入。这两种分别服务通过MCPS-SAP和MLME-SAP接口为MAC层提供接口。这些接口之外,在NLDE-SAP和NLME-SAP之间有一个隐藏的借口,允许NLME使用网络层的数据服务。NWK层的组件以及接口如下图所示:

图1网络层参考模型

在移动Ad hoc网络中,随着节点移动,网络拓扑结构在不断变化。如何迅速准确地选择网络路由的问题,是移动Ad hoc网络的一个重要核心的问题。常规的距离向量算法DVA和链路状态算法LSA,不能满足Ad Hoc网络中的动态变化的网络拓扑结构;单向信道的存在;有限的无线传输带宽;无线移动终端的局限性等特点。因此,自20世纪70年代美军DARPA资助的分组无线网络项目开展以来,国内外的许多研究人员从不同的角度提出了一系列的移动Ad hoc网络路由协议。这些协议必须处理好移动Ad hoc网络的以上特点。根据发现路由的驱动模式的不同,可将这些路由协议分为表驱动路由协议和按需路由协议。

表驱动路由协议又称为主动式(或先应式)的路由协议(Proactive Protocols)。是一种基于表格的路由协议。该路由协议试图维护网络中各个节点到其余所有节点的最新路由信息,所有路由信息都保持一致。这个路由协议中,每个节点都维护一张或多张表格,这些表格中包含到达网络中所有其他节点的路由信息表。当检测到网络拓扑结构有变化发生时,节点在网络中发送更新消息。收到更新消息的节点便更新自己的表格,以维护路由信息的一致、及时、准确。拓扑更新消息在网络中传播的方式和需要存储的表的类型决定了不同的表驱动路由协议的区别。表驱动路由协议根据变化更新路由表,不断的检测网络拓扑和链路质量的变化,所以路由表可以准确地反映网络的拓扑结构。只要源节点发送报文,就能够立即取得到达目的节点的路由。

目前常见的有C.E,Perkins在1994年提出的DSDV路由协议、CGSR路由协议以及WRP路由协议等。DSDV路由协议是一种无环路距离向路由协议,它是传统的Bellman Ford路由协议的改进。在DSDV中,每个移动节点都需要维护一个路由表,路由表表项其中包括目的节点、跳数和目的地序号,其中目的节点分配目的地序号,主要用于判别路由是否过时,并且能够防止路由环路的产生。每个节点必须周期性的与邻节点交换路由信息,也可以根据路由表的改变来触发路由更新。

CGSR路由协议与DSDV类似,但是CGSR并不是一个大的平面网络。CGSR分配指定了网关节点簇首节点和,其中网关节点是两个簇之间的节点,簇首节点用来控制一组节点和网关节点。其中每个节点都必须有其簇成员的路由表。因为,当一个节点要发送分组时,这个分组首先到达这个发送节点的簇首节点,然后簇首节点把该分组通过网关节点转发给另外一个簇首节点,不断重复这个过程直到分组到达目的节点。

WRP路由协议是另一种表驱动路由协议,在网络的节点中保存路由信息。每个节点都在路由表中保存有如下信息:距离、路由、链路开销和重传消息的列表。重传消息的列表记录关于重传计数器、消息序列号、每一个邻节点正确应答所需的标识以及更新消息的更新列表等信息。WRP的优点就是当一个节点试图执行路径计划算法时,可以通过目的节点的上游节

点所保存的信息和邻节点所保存的信息来限制算法,使得算法收敛得更快并避免路由当中的环路。由于WRP需要保存4个路由表,所以比大多数的协议需要更大的内存。WRP还依赖于周期性的Hello消息,这也要占用带宽。

这类路由协议通常是通过修改常规的Internet路由协议以适应移动Ad hoc网络环境,通过引入序列号机制解决了“路由环路”和“计数到无穷”的问题;通过采用“时问驱动”和“事件驱动”机制更新路由信息,尽量减少路由等控制信息对无线信道的占用,以提高系统效率。在主动式路由协议中,由于每个节点需要实时地维护路由信息,这样在网络规模较大、拓扑变化较快的环境中,大量的拓扑更新消息会占用过多的信道资源,使得系统效率下降。

为此,1996年卡耐基梅隆大学的David B.Johnson在DSR协议中提出了一种新的路由选择原则:按需路由协议。按需路由协议又称为反应式路由协议(Reactive Protocols)。与主动式路由协议相比,它是一种被动式的路由协议。在这类协议中,节点平时并不实时地维护网络路由,只有在节点有数据需要发送时,从激活路由发现机制寻找到达目的地的路由。路山发现过程如图所示。当节点1有数据要向节点8发送且无路由时,节点1启动路由发现过程:

1.节点1向邻居节点(节点2、3、4)发送路由请求消息;

2.中间节点转发路由请求消息直至目的节点8;

3.目的节点选择合适的路由返回路由响应消息,该消息中携带了从节点1到节点8的完整路由。

图2按需路由协议的路由发现过程

根据国际上目前研究的结果可知,在各种不同的情况下比较时,基于按需方式的路由算法要比基于表驱动方式的路由算法在性能上有着明显的优势。另外,在负载较重的情况下,按需式的路由协议中AODV协议的性能最为理想。

第三章 系统分析与设计

3.1基本原理:

温度传感器将被测点的温度采集后输出的模拟信号逐步送往放大电路、低通滤波器以及 A/D 转换器(即信号调理电路),然后再单片机的控制下将 A/D 转换器输出的数字信号传送到无线收发芯片中,并通过芯片的调制处理后由芯片内部的天线发送到上位机机监测软件

上,在上位机模块上,发来的数据由单片机控制的无线收发芯片接收并解调,最后通过接口芯片发送到 PC 机中进行显示和处理。温度传感器被用在终端节点上,当上电后,温度传感器就是能够获取环境中某个地方温度的敏感元器件,它可以将环境中的温度或者是与温度相关的参量信息转换成电信号,我们可以根据这些电信号的强弱来识别被测点在环境中的温度数据。

湿度传感器和温度传感器采集到数据后,通过给RS232串口增加无线传输功能,替代设备电缆线进行无线传输, 无线温度采集系统改变了传统有线的数据采集系统搭建布线困难,监测区域受限等诸多不足。要求设计的短距离无线通信系统具有功耗少,性价比高,系统维护快捷方便,而且通过在传感器模块上添加 FLASH 存储设备,使得数据采集工作能够摆脱对监测过程网络辐射范围的限制,可应用到许多的场合更好的改善采集工作的便捷行。通过与其他通信技术(如 GSM/GPRS)的无缝接合,能够实现采集数据的远程传输,满足对数据采集区域的远程监控串口传输设计为双向全双工,无硬件流控制,强制允许OTA(多条)时间和丢包重传。

3.2系统方案比较与选择

方案一:使用目前已经非常成熟且广泛应用的蓝牙技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。方便快捷且不会遇到未知的技术难题.

方案二:选择TI公司的2.4GHz片上系统解决方案CC2530,CC2530是用于IEEES02.15.4、Zigbee和RF4CE应用的一个片上系统解决方案,它能以较低的总成本建立强大的网络节点。CC2530结合了先进的RF收发器性能,业界标准的增强型8051内核,使操作更容易,具备不同的运行模式,尤其适用于低功耗的系统需求。

通过对比以上两种方案开发的难易程度、开发周期和现有的实验环境我们选择方案二。 无线温度采集系统改变了传统有线的数据采集系统搭建布线困难,监测区域受限等诸多不足。ZigBee这种新兴的短距离无线通信系统具有功耗少,性价比高,系统维护快捷方便,而且通过在传感器模块上添加 FLASH 存储设备,使得数据采集工作能够摆脱对监测过程网络辐射范围的限制,可应用到许多的场合更好的改善采集工作的便捷行。通过与其他通信技术(如 GSM/GPRS)的无缝接合,能够实现采集数据的远程传输,满足对数据采集区域的远程监控。 一般以 ZigBee 技术为核心的无线温度采集系统的工作过程为:协调器节点首先应搭建网络,等待各自终端采集节点的入网请求;终端节点经过验证加入网络后,把温度传感器采集到的数据通过无线网络上传传输给协调器节点;协调器节点接收到数据包后,进行数据包解析,并通过串口将温度信息以及子节点地址等有效信息存储并显示在监控界面上。

3.3系统整体设计

无线传感器温度测量系统主要由单个ZigBee协调器、单部PC机和放置在各处的温度采集节点—ZigBee终端设备组成。ZigBee协调器与各个终端节点形成了一个ZigBee星型网络。整个无线温度采集系统的拓扑结构图如图1所示。各处的温度采集节点—ZigBee终端设备组

成。CC2530芯片的有效通信半径为100m时,终端节点可以安置在以协调器为中心100m半径范围内。终端数据采集节点的结构较为简化,仅由一个CC2530模块,Flash存储,2节1.5V电池和温度传感器组成,各个终端节点被初始化为无信标网络中的终端设备。终端设备上电复位后,便启动搜索指定信道上的ZigBee协调器,并发送连接请求,终端设备在成功入网后,将被赋予一个16位短地址,在以后网络中的通信都以这个16位的短地址作为节点的标识;启动休眠定时器,间隔10秒钟唤醒一次,醒来后使用一种简单的非时隙CSMA-CA,通过竞争机制取得信道使用权,自己向协调器节点发送请求数据。利用模块上的温度传感器模块检测环境温度,并上传给协调器节点,然后立即再次进入休眠状态,最大限度地减少能耗,延长终端节点电源续航时间,同时也可以延伸采集范围,即利用ZigBe网络的自组织性我们可以携带轻巧的终端数据采集节点到实际测量区域完成数据采集工作,如果超出了无线网络可以支持的传输范围,那可以将数据暂时存储在Flash存储器中。网络中的协调器节点负责搜集各温度采集节点的信息,并将信息快速的通过RS232串口按事先定义好的格式上传PC机,随即解析并显示出来。

1总体设计框图如下:

图3.1 无线温湿度采集系统框图

2.实验硬件实物图如下: (1)1CC2530邮票孔节点模块

(2)无线节点模块

(3)温湿度采集模块

3.系统硬件说明

(1)SHT10说明

SHT10是一款高度集成的温度湿度传感器芯片,提供全标定的数字输出。它采用专利的COMSens技术,确保了传感器具有极高的可靠性与卓越的长期稳定性。传感器包括包括一个电容性聚合体测湿敏感元件、一个能隙材料制成的测温元件,并在同一芯片上,与14位的A/D转换器以及串行接口电路进行连接。

图3.2应用电路

SH10引脚特性如下: 电源引脚

SHT10的供电电压为2.4~5.5V。传感器上电后,要等待11ms以越过“休眠”状态。在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去

耦滤波。

串行接口(两线双向)

SHT10的串行接口,在传感器信号的读取及电源损耗方面,都做了优化处理;但与I2C接口不兼容.

串行时钟输入(SCK)

SCK用于微处理器与SHTxx之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCK频率。

串行数据(DATA)

DATA三态门用于数据的读取。DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,微处理器应驱动DATA在低电平。需要一个外部的上拉电阻(例如:10kΩ)将信号提拉至高电平(参见图2)。上拉电阻通常已包含在微处理器的I/O 电路中。

串行时钟输入(SCK)

SCK用于微处理器与SHTxx之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCK频率。 测量时序(RH 和T)

发布一组测量命令(‘00000101’表示相对湿度RH,‘00000011’表示温度T)后,控制器要等待测量结束。这个过程需要大约11/55/210ms,分别对应8/12/14bit测量。确切的时间随内部晶振速度,最多有±15%变化。SHTxx通过下拉DATA至低电平并进入空闲模式,表示测量的结束。控制器在再次触发SCK时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。接着传输2个字节的测量数据和1个字节的CRC奇偶校验。uC需要通过下拉DATA为低电平,以确认每个字节。所有的数据从MSB开始,右值有效(例如:对于12bit数据,从第5个SCK时钟起算作MSB;而对于8bit 数据,首字节则无意义)。用CRC数据的确认位,表明通讯结束。如果不使用CRC-8校验,控制器可以在测量值LSB后,通过保持确认位ack 高电平,来中止通讯。在测量和通讯结束后,SHTxx自动转入休眠模式。 通讯复位时序

如果与SHTxx通讯中断,下列信号时序可以复位串口:当DATA保持高电平时,触发SCK时钟9次或更多。在下一次指令前,发送一个“传输启动”时序。这些时序只复位串口,状态寄存器内容仍然保留。

图3.3通讯复位时序图

(2)CC2530说明

CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。CC2530 结合了

领先的RF 收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其它强大的功能。CC2530 有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。CC2530 具有不同的运行模式,使得它尤其适应超低功耗要求的系统。运行模式之间的转换时间短进一步确保了低能源消耗。

CC2530F256 结合了德州仪器的业界领先的黄金单元ZigBee 协议栈(Z-Stack?),提供了一个强大和完整的ZigBee 解决方案。CC2530F64 结合了德州仪器的黄金单元RemoTI,更好地提供了一个强大和完整的ZigBee RF4CE 远程控制解决方案。 引脚描述

引脚名称 引脚 引脚类型 描述

AVDD1 28 电源(模拟) 2-V–3.6-V 模拟电源连接 AVDD2 27 电源(模拟) 2-V–3.6-V 模拟电源连接 AVDD3 24 电源(模拟) 2-V–3.6-V 模拟电源连接 AVDD4 29 电源(模拟) 2-V–3.6-V 模拟电源连接 AVDD5 21 电源(模拟) 2-V–3.6-V 模拟电源连接

AVDD6 31 电源(模拟) 2-V–3.6-V 模拟电源连接

DCOUPL 40 电源(数字) 1.8V 数字电源去耦。不使用外部电路供应。 DVDD1 39 电源(数字) 2-V–3.6-V 数字电源连接 DVDD2 10 电源(数字) 2-V–3.6-V 数字电源连接 GND - 接地 接地衬垫必须连接到一个坚固的接地面。 GND 1,2,3,4 未使用的引脚 连接到GND P0_0 19 数字I/O 端口0.0 P0_1 18 数字I/O 端口0.1 P0_2 17 数字I/O 端口0.2 P0_3 16 数字I/O 端口0.3 P0_4 15 数字I/O 端口0.4 P0_5 14 数字I/O 端口0.5 P0_6 13 数字I/O 端口0.6

P0_7 12 数字I/O 端口0.7

P1_0 11 数字I/O 端口1.0-20-mA 驱动能力 P1_1 9 数字I/O 端口1.1-20-mA 驱动能力 P1_2 8 数字I/O 端口1.2 P1_3 7 数字I/O 端口1.3 P1_4 6 数字I/O 端口1.4 P1_5 5 数字I/O 端口1.5 P1_6 38 数字I/O 端口1.6 P1_7 37 数字I/O 端口1.7 P2_0 36 数字I/O 端口2.0 P2_1 35 数字I/O 端口2.1 P2_2 34 数字I/O 端口2.2

P2_3 33 数字I/O 模拟端口2.3/32.768 kHz XOSC P2_4 32 数字I/O 模拟端口2.4/32.768 kHz XOSC RBIAS 30 模拟I/O 参考电流的外部精密偏置电阻 RESET_N 20 数字输入 复位,活动到低电平 RF_N 26 RF I/O RX 期间负RF 输入信号到LNA

RF_P 25 RF I/O RX 期间正RF 输入信号到LNA

XOSC_Q1 22 模拟I/O 32-MHz 晶振引脚1或外部时钟输入 XOSC_Q2 23 模拟I/O 32-MHz 晶振引脚2 模块说明

CC2530芯片系列中使用的8051 CPU内核是一个单周期的8051兼容内核。它有三种不同的内存访问总线(SFR,DATA 和CODE/XDATA),单周期访问SFR,DATA 和主SRAM。它还包括一个调试接口和一个18 输入扩展中断单元。

中断控制器总共提供了18 个中断源,分为六个中断组,每个与四个中断优先级之一相关。当设备从活动模式回到空闲模式,任一中断服务请求就被激发。一些中断还可以从睡眠模式(供电模式1-3)唤醒设备。

内存仲裁器位于系统中心,因为它通过SFR 总线把CPU 和DMA 控制器和物理存储器以及所有外设连接起来。内存仲裁器有四个内存访问点,每次访问可以映射到三个物理存储器之一:一个8-KB SRAM、闪存存储器和XREG/SFR 寄存器。它负责执行仲裁,并确定同时访问同一个物理存储器之间的顺序。

8-KB SRAM映射到DATA存储空间和部分XDATA存储空间。8-KB SRAM是一个超低功耗的SRAM,即使数字部分掉电(供电模式2 和3)也能保留其内容。这是对于低功耗应用来说很重要的一个功能。

32/64/128/256 KB闪存块为设备提供了内电路可编程的非易失性程序存储器,映射到XDATA 存储空间。除了保存程序代码和常量以外,非易失性存储器允许应用程序保存必须保留的数据,这样设备重启之后可以使用这些数据。使用这个功能,例如可以利用已经保存的网络具体数据,就不需要经过完全启动、网络寻找和加入过程。

时钟和电源管理

数字内核和外设由一个1.8-V 低差稳压器供电。它提供了电源管理功能,可以实现使用不同供电模式的长电池寿命的低功耗运行。有五种不同的复位源来复位设备。 外设

CC2530 包括许多不同的外设,允许应用程序设计者开发先进的应用。

调试接口执行一个专有的两线串行接口,用于内电路调试。通过这个调试接口,可以执行整个闪存存储器的擦除、控制使能哪个振荡器、停止和开始执行用户程序、执行8051 内核提供的指令、设置代码断点,以及内核中全部指令的单步调试。使用这些技术,可以很好地执行内电路的调试和外部闪存的编程。

设备含有闪存存储器以存储程序代码。闪存存储器可通过用户软件和调试接口编程。闪存控制器处理写入和擦除嵌入式闪存存储器。闪存控制器允许页面擦除和4 字节编程。 I/O控制器负责所有通用I/O引脚。CPU可以配置外设模块是否控制某个引脚或它们是否受软件控制,如果是的话,每个引脚配置为一个输入还是输出,是否连接衬垫里的一个上拉或下拉电阻。CPU 中断可以分别在每个引脚上使能。每个连接到I/O 引脚的外设可以在两个不同的I/O 引脚位置之间选择,以确保在不同应用程序中的灵活性。

系统可以使用一个多功能的五通道DMA控制器,使用XDATA存储空间访问存储器,因此能够访问所有物理存储器。每个通道(触发器、优先级、传输模式、寻址模式、源和目标指针和传输计数)用DMA 描述符在存储器任何地方配置。许多硬件外设(AES 内核、闪存控制器、USART、定时器、ADC 接口)通过使用DMA 控制器在SFR 或XREG 地址和闪存/SRAM 之间进行数据传输,获得高效率操作。定时器1 是一个16 位定时器,具有定时器/PWM 功能。它有一个可编程的分频器,一个16 位周期值,和五个各自可编程的计数器/捕获通道,每个都有一个16 位比较值。每个计数器/捕获通道可以用作一个PWM输出或捕获输入信号边沿的时序。它还可以配置在IR产生模式,计算定时器3 周期,输出是ANDed,定时器3 的

输出是用最小的CPU 互动产生调制的消费型IR 信号。

MAC定时器(定时器2)是专门为支持IEEE 802.15.4 MAC或软件中其他时槽的协议设计。定时器有一个可配置的定时器周期和一个8 位溢出计数器,可以用于保持跟踪已经经过的周期数。一个16 位捕获寄存器也用于记录收到/发送一个帧开始界定符的精确时间,或传输结束的精确时间,还有一个16 位输出比较寄存器可以在具体时间产生不同的选通命令(开始RX,开始TX,等等)到无线模块。定时器3 和定时器4 是8 位定时器,具有定时器/计数器/PWM 功能。它们有一个可编程的分频器,一个8 位的周期值,一个可编程的计数器通道,具有一个8 位的比较值。每个计数器通道可以用作一个PWM 输出。

睡眠定时器是一个超低功耗的定时器,计算32-kHz 晶振或32-kHz RC 振荡器的周期。睡眠定时器在除了供电模式3 的所有工作模式下不断运行。这一定时器的典型应用是作为实时计数器,或作为一个唤醒定时器跳出供电模式1 或2。

ADC支持7到12位的分辨率,分别在30 kHz或4 kHz的带宽。DC和音频转换可以使用高达八个输入通道(端口0)。输入可以选择作为单端或差分。参考电压可以是内部电压、AVDD 或是一个单端或差分外部信号。ADC 还有一个温度传感输入通道。ADC 可以自动执行定期抽样或转换通道序列的程序。

随机数发生器使用一个16 位LFSR 来产生伪随机数,这可以被CPU 读取或由选通命令处理器直接使用。例如随机数可以用作产生随机密钥,用于安全。

AES加密/解密内核允许用户使用带有128位密钥的AES算法加密和解密数据。这一内核能够支持IEEE 802.15.4 MAC 安全、ZigBee 网络层和应用层要求的AES 操作。 一个内置的看门狗允许CC2530 在固件挂起的情况下复位自身。当看门狗定时器由软件使能,它必须定期清除;否则,当它超时就复位它就复位设备。或者它可以配置用作一个通用32-kHz 定时器。

USART 0和USART 1每个被配置为一个SPI主/从或一个UART。它们为RX和TX提供了双缓冲,以及硬件流控制,因此非常适合于高吞吐量的全双工应用。每个都有自己的高精度波特率发生器,因此可以使普通定时器空闲出来用作其他用途。

无线设备

CC2530 具有一个IEEE 802.15.4 兼容无线收发器。RF 内核控制模拟无线模块。另外,它提供了MCU 和无线设备之间的一个接口,这使得可以发出命令,读取状态,自动操作和确定无线设备事件的顺序。无线设备还包括一个数据包过滤和地址识别模块。 4.系统软件设计

本系统软件设计基于T i公司推出的跟CC2530芯片配套的ZS T A CK协议栈和I A R集成开发环境。ZS T A CK协议栈运行在一个基于任务调度机制的OS A L操作系统上,O S A L通过触发任务的事件来实现任务调度OS A L中的任务以通过任务A PI将其添加到系统中,实现多任务机制。系统中传感器节点由CC243 0内部的MCU控制,定时向温湿度传感器SHT10发送读温度和湿度指令,S H T 1 1完成温度和湿度转换后会发出转换完成信号,M CU在接收到转换完成信号后,读取温湿度值,并将这些数据信号传送给协调器。协调器通过串口RS 232和上位机(PC)相连,通过人机交互的方式对整个区域的进行检测。为了实现这一功能,必须知道节点的长短地址对应表,这就需要节点在加入网络后发送自己的长短地址给协调器,协调器将长短地址对应列表存储起来,以便用户要求采集数据时依据地址表来采集每个传感器的数据。

(1)协调器节点设计

网络协调器主要负责网络的建立,信息的接收、汇总、处理及控制指令的发送。ZigBee网络最初由协调器发动并建立。协调器通过主动扫描选择一个合适信道,根据扫描的结果选择自己的PA N I D及0x 000 0作为自己的短地址,其网络层将通过向M A C层发送M LM ES

T A RT.r e qu est原语启动一个新的P A N。协调器节点在建成网络后,开始数据收发工作及各种操作指令的执行。当协调器收到数据时,根据数据的串I D来判断传送的数据是地址信息还是传感器采集的数据,根据不同的数据类型解析数据包提供给PC机显示和处理。程序流程如图4左所示。 (2)传感器节点的设计

传感器节点主要负责温湿度数据的采集、发送以及控制指令的接收执行。节点开启初始化后,主动扫描有效网络信道,寻找合适的父节点,通过关联过程加入网络。如果已经加入到网络中而暂时与网络失去联系的节点想重新加入网络,可以进行孤立通知过程重新加入网络。设备在加入网络后,首先完成其内部系统的初始化,即通信协议的初始化,各端口使能与初始化,发送本节点长短地址给协调器,然后定时查询有无事件发生,事件轮询分媒体接入层、网络层、硬件、应用层等,如果没有事件,则节点进入休眠状态。如果有相应事件,则进行处理。节点在休眠期间,如果有外部中断或定时器中断,节点会恢复到工作状态,开始执行任务。其程序流程如图4右所示。

图3.4节电工作流程图

(3)节点通信

传感器节点测量的温湿度数据在ZigBee RFD模块中转化为Z i g Bee通信协议包,传送给其父节点,以多跳的方式把数据包传给ZigBee协调器。协调器接收到数据包后,解析出出数据源的短地址,温度和湿度值并将其传送给P C显示出来,同时按原路径返回确认信息,实现握手信号。在ZStack中,每个应用任务都通过调用应用层的Process event()函数来处理

任务事件,在Process event()中有一个事件处理循环,循环检测事件的发生。发送端节点需要发送数据时,直接调用应用层的AF_Data Request()函数来发送数据。而接收端的应用层通过检测A F_INCOM NG_MSG_CM D消息事件来判断是否有数据收到。具体的数据通信流程如图5所示。

图3.5收发数据流程图

实验采用设计的节点组成测试网络, 在实验楼的不同的房间放置传感器节点, 把需要给其他节点路由转发数据包的节点配置为路由器节点, 协调器通过串口与PC机相连,将接收到数据在串口中显示出来,同时使用T i的网络抓包软件Packet sniffer观测数据发送和接收。协调器节点组网成功后,路由器R,传感器节点E加入网络并将自己的长短地址发送给协调器。随后传感器节点进入睡眠模式,定时唤醒检测有无发送数据的命令。串口中显示长地址为0xFF01222324252 627,短地址为0 x0001,长地址为0xC513 0100004B1202,短地址0x796F等节点加入到网络中。协调器可以通过广播方式给所有的路由器节点和传感器节点发送命令或者根据获取的长短地址对应列表,单播的方式给指定的节点发送命令。如果将其中的一个路由节点关闭,网络可以重新寻找路径,选择其他的路由节点进行数据中继。试验结果有效的验证了ZigBee无线网络能够实时的实现数据的采集,且具有良好的自组织、自愈特性,适合于仓库内的温湿度采集系统。

总结

经过此次为期数周的基于物联网的数据采集系统课程设计,我们基本完成了设计的

要求.这次课设依照任务书我完成了以下的任务:

1 、熟悉了物联网实验箱各种信息采集终端设备(温湿度、烟感、一氧化碳、压力等传感器嵌入式设备);

2、 掌握C了语言的串口数据收集的原理及应用;

3 、了解了设备信息采集及收集的一般过程; 4、验证了预期结果;

5、完成了课设任务书的书写。

课程设计是一个将理论运用于实践的过程,是将所学知识进行升华的过程。在此过程中不仅培养了我们独立思考、动手操作的能力,更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。

实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰.

致谢

此次课设是对之前所学嵌入式知识的一次具体的运用,是对所学知识的一次总结和升华。

课设的顺利完成离不开老师的悉心指导和同学的帮助鼓励。在此感谢我嵌入式的任课老师张玺君老师和此次课设的指导老师马维俊老师,在平时的嵌入式学习中张老师给了我莫们大的帮助,课设中马老师对于完成室内信息的采集给了我们指导性的意见,对于所遇到的问题给予了详细的解答,体现出了严谨求实的态度,值得我们学习。

饮其流时思其源。成吾学士念吾师。在课程设计完成的时刻,我谨向这次课程设计的指导老师表示诚挚的谢意和崇高的敬意。大学之大,不在大楼,而在大师。大师们才高八斗,学富五车,授我以专业知识;大师们高屋建瓴,宁静致远,予我以严谨之逻辑;大师们博闻多识,学高身正,释我以学者之楷模。

感谢我的同学,在搜集资料的过程中给与我实实在在的帮助,让我能够有充足的资源和信息,为课程设计的实施过程开辟了良好的空间。在遇到一些类似的问题时,可以相互讨论和交流经验,起到了很好的促进作用。在设计的过程中给与的关心和鼓励,给了我莫大的动力。

参考文献

[1] 李文仲,段朝玉著.ZigBee2007/PRO协议栈实验与实践. 北京航空航天大学出版社,2009.3

[2] 石志国等著. 物联网技术与应用. 北京交通大学出版社, 2012.9 [3] 吴大鹏等著. 物联网技术与应用. 电子工业出版社, 2012.6

[4] 吴洪贵,孙玉娣等著. 物联网应用系统开发. 东软电子出版社, 2012.11 [5] 付蔚著,家居物联网技术开发与实践.北京大学出版社,2013.8 [6] 熊茂华,熊昕著. 物联网技术与应用开发. 西安电子科技大学出版社, 2012.11

[7] 北京奥尔斯电子科技有限公司.物联网创新实验套件实验指导书 2012.11 [8]Jane K.Hart, Kirk Martinez.Environmental Sensor Networks:A revolution in the earth system science7.Earth—Science Reviews,2006 [9]阳成军.用单总线器件组建温湿度测控系统硬件设计[J].传感器世界2004(2):38-39

[10]秦永和.湿度传感器测试系统[D].哈尔滨:哈尔滨工程大学,2002

附录

系统源代码如下:

#include \#include \#include \#include \#include \#ifndef NONWK #include \#endif /* Hal */

#include \#include \#include \

#include \#include \#include \#include \

// Maximun number of Vdd samples checked before go on

#define MAX_VDD_SAMPLES 3 //电压检测

#define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4 //正常电压极限值

extern bool HalAdcCheckVdd (uint8 limit); //设备启动前的芯片电压检测函数 static void zmain_dev_info( void ); static void zmain_ext_addr( void ); static void zmain_vdd_check( void ); #ifdef LCD_SUPPORTED

static void zmain_lcd_init( void );

#endif

/*********************************************************************

* @fn main

* @brief First function called after startup.

* @return don't care */

int main( void ) {

// Turn off interrupts

osal_int_disable( INTS_ALL ); //关闭所有中断 EA=0 // Initialization for board related stuff such as LEDs

HAL_BOARD_INIT(); //初始化系统时钟 、LED所使用的IO等 // Make sure supply voltage is high enough to run

zmain_vdd_check(); //检测芯片电压是否正常

// Initialize board I/O

InitBoard( OB_COLD ); //初始化LED的IO // Initialze HAL drivers

HalDriverInit(); //初始化芯片各个硬件模块(包括LCD) // Initialize NV System

osal_nv_init( NULL ); //初始化FLASH存储 // Initialize the MAC

ZMacInit(); //初始化MAC层 // Determine the extended address

zmain_ext_addr(); //形成节点MAC地址 // Initialize basic NV items

zgInit(); //初始化一些非易失变量

#ifndef NONWK

// Since the AF isn't a task, call it's initialization routine afInit(); //初始化应用框架层

#endif // Initialize the operating system

osal_init_system(); //初始化操作系统 // Allow interrupts

osal_int_enable( INTS_ALL ); //使能全部中断 // Final board initialization

InitBoard( OB_READY ); //初始化按键 // Display information about this device

zmain_dev_info(); //在液晶上显示设备IEEE信息 /* Display the device info on the LCD */

#ifdef LCD_SUPPORTED

zmain_lcd_init(); //在LCD上显示该设备的信息 #endif

#ifdef WDT_IN_PM1

/* If WDT is used, this is a good place to enable it. */ WatchDogEnable( WDTIMX ); #endif

osal_start_system(); // No Return from here return 0; // Shouldn't get here.

}

/*********************************************************************

* @fn zmain_vdd_check

* @brief Check if the Vdd is OK to run the processor.

* @return Return if Vdd is ok; otherwise, flash LED, then reset *********************************************************************/ static void zmain_vdd_check( void ) //检测设备电压

{

uint8 vdd_passed_count = 0; bool toggle = 0;

// Repeat getting the sample until number of failures or successes hits MAX // then based on the count value, determine if the device is ready or not while ( vdd_passed_count < MAX_VDD_SAMPLES ) //电压正常情况下,检查3次 {

if ( HalAdcCheckVdd (ZMAIN_VDD_LIMIT) ) //设置电压正常的极限值 并使用AD检测电压

{

vdd_passed_count++; // Keep track # times Vdd passes in a row MicroWait (10000); // Wait 10ms to try again } else {

vdd_passed_count = 0; // Reset passed counter MicroWait (50000); // Wait 50ms

MicroWait (50000); // Wait another 50ms to try again }

/* toggle LED1 and LED2 */

if (vdd_passed_count == 0) {

if ((toggle = !(toggle))) HAL_TOGGLE_LED1(); else

HAL_TOGGLE_LED2(); } }

/* turn off LED1 */

HAL_TURN_OFF_LED1();

HAL_TURN_OFF_LED2(); }

/**************************************************************************************************

* @fn zmain_ext_addr

*

* @brief Execute a prioritized search for a valid extended address and write the results

* into the OSAL NV system for use by the *system. Temporary address not

saved to NV. * input parameters * None.

* output parameters * None.

* @return None.

**************************************************************************************************

*/

static void zmain_ext_addr(void) {

uint8 nullAddr[Z_EXTADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

uint8 writeNV = TRUE;

// First check whether a non-erased extended address exists in the OSAL NV.

if ((SUCCESS != osal_nv_item_init(ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL)) || (SUCCESS != osal_nv_read(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress)) ||

(osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN))) {

// Attempt to read the extended address from the location on the lock bits page // where the programming tools know to reserve it.

HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);

if (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN)) {

// Attempt to read the extended address from the designated location in the Info Page.

if(!osal_memcmp((uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), nullAddr, Z_EXTADDR_LEN))

{

osal_memcpy(aExtendedAddress,

*)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN);

}

else // No valid extended address was found. {

uint8 idx;

#if !defined ( NV_RESTORE )

writeNV = FALSE; // Make this a temporary IEEE address

#endif

/* Attempt to create a sufficiently random extended *address for expediency. * Note: this is only valid/legal in a test environment *and must never be used for a commercial product. */

for (idx = 0; idx < (Z_EXTADDR_LEN - 2);) {

uint16 randy = osal_rand();

aExtendedAddress[idx++] = LO_UINT16(randy); aExtendedAddress[idx++] = HI_UINT16(randy); }

// Next-to-MSB identifies ZigBee devicetype.

(uint8

#if ZG_BUILD_COORDINATOR_TYPE && !ZG_BUILD_JOINING_TYPE aExtendedAddress[idx++] = 0x10; #elif ZG_BUILD_RTRONLY_TYPE

aExtendedAddress[idx++] = 0x20; #else

aExtendedAddress[idx++] = 0x30; #endif

// MSB has historical signficance. aExtendedAddress[idx] = 0xF8; } }

if (writeNV)

{

(void)osal_nv_write(ZCD_NV_EXTADDR, aExtendedAddress);

}

}

// Set the MAC PIB extended address according to results //from above.

(void)ZMacSetReq(MAC_EXTENDED_ADDRESS, aExtendedAddress); }

/**************************************************************************************************

* @fn zmain_dev_info

* @brief This displays the IEEE (MSB to LSB) on the LCD. * input parameters

* None.

* output parameters

* None.

* @return None.

************************************************************************************************** */

static void zmain_dev_info(void) {

#ifdef LCD_SUPPORTED uint8 i; uint8 *xad;

uint8 lcd_buf[Z_EXTADDR_LEN*2+1]; uint8 num;

char s[16];

// Display the extended address.

xad = aExtendedAddress + Z_EXTADDR_LEN - 1; for (i = 0; i < Z_EXTADDR_LEN*2; xad--) {

0,

Z_EXTADDR_LEN,

uint8 ch;

ch = (*xad >> 4) & 0x0F;

lcd_buf[i++] = ch + (( ch < 10 ) ? '0' : '7'); ch = *xad & 0x0F;

lcd_buf[i++] = ch + (( ch < 10 ) ? '0' : '7'); }

lcd_buf[Z_EXTADDR_LEN*2] = '\\0';

//HalLcdWriteString( \

//HalLcdWriteString((char*)lcd_buf,HAL_LCD_LINE_2 ); // osal_nv_read(ZCD_NV_PANID, 0, 2, &zgConfigPANID);

sprintf(s, (char*)\

((UINT16)((uint16)zgConfigPANID000/1000)),((UINT16)((uint16)zgConfigPANID00/100)),

((UINT16)((uint16)zgConfigPANID0/10)),((UINT16)((uint16)zgConfigPANID)));

i = 0; do {

if(s[i] == '0') {

s[i] = ' '; num = 1; }

else num = 0; i++;

}while(num);

GUI_SetColor(1,0);

// GUI_LoadBitmap(80, 0, (uint8 *)Logo, 48, 30); // 向显示缓冲区加载一幅128×64点阵的单色位图 //LCM_Refresh();

GUI_PutString5_7(20,8,\ GUI_PutString5_7(5,22,\ GUI_PutString5_7(5,32,(char*)lcd_buf); GUI_PutString5_7(5,44,\

GUI_PutString5_7(40,44,(char *)s); //显示结果

LCM_Refresh(); #endif }

#ifdef LCD_SUPPORTED

/********************************************************************* * @fn zmain_lcd_init

* @brief Initialize LCD at start up.

* @return none

*********************************************************************/ static void zmain_lcd_init ( void ) {

#ifdef SERIAL_DEBUG_SUPPORTED {

HalLcdWriteString( \#if defined( MT_MAC_FUNC ) #if defined( ZDO_COORDINATOR )

HalLcdWriteString( \#else

HalLcdWriteString( \#endif // ZDO

#elif defined( MT_NWK_FUNC ) #if defined( ZDO_COORDINATOR )

HalLcdWriteString( \#else

HalLcdWriteString( \#endif // ZDO

#endif // MT_FUNC

}

#endif // SERIAL_DEBUG_SUPPORTED }

#endif

本文来源:https://www.bwwdw.com/article/h9ow.html

Top