基于Linux的物联网监控平台的设计论文

摘  要

随着计算机技术发展的不断深入,物联网的世界在不断走进我们的生活,其中,最为典型之一的就是智能家居的概念。虽说当下有较为完善的设计方案,但其响应不及时、软件安装繁琐和可维护性差等缺陷阻碍着它的发展。本论文就是对其缺陷的优化,进一步完善智能家居设计方案。

本论文核心部分主要分为两部分:系统结构的设计和测试方案的设计;在系统结构的设计中,讲述了如何设计系统接够来解决上述缺陷。主要分为三部分,首先,对zigbee自组网节点管理的优化设计,使得各个节点能够被更合理监控;其次,对嵌入式服务器中间件设计,完成高效解析zigbee节点管理协议和生成zigbee节点控制指令,并完成和mysql数据库的交互使工作,使整个系统的控制更为流畅,优化响应慢的问题;最后对智能终端控制方案的设计,采用B/S架构,以浏览器的形式,有效规避了软件安装时繁琐个工作。在测试方案中,通过功能测试和稳定性测试来进一步验证设计方案的合理性。

    通过完成上述工作,改进方案达到了预期效果。控制延迟问题得到了极大的改善,不同控制终端都可以以浏览网页的形式,快速访问和控制zigbee节点。

关键词:zigbee;LAMP;CC2530;cortex a9;智能家居中间件

ABSTRACT

       With the development of computer technology deepening, the world of things constantly into our lives, among them, the most typical one is the concept of intelligent Home Furnishing. Though the present design scheme more perfect, but the response is not timely, complicated installation and software maintainability defects hindering its development. This paper is to analyze the defects of optimization, to further improve the Home Furnishing intelligent design.

      The core part of the thesis is mainly divided into two parts: design and test system structure; in the design of system structure, describes how to design the system with enough to solve the above defects. Mainly divided into three parts, first of all, the ZigBee self optimizing network node management design, so every node can be more reasonable monitoring; secondly, the design of embedded middleware server, complete and efficient analysis of ZigBee node management protocol and generating ZigBee node control instruction, and complete interactive and MySQL database to work, to control the entire system more smoothly, the optimization of the problem of slow response; at the end of the terminal control scheme of intelligent design, using B/S architecture, to the browser form, effectively avoid the tedious work. When installing the software in the test program, through the functional test and stability test to further verify the rationality of the design of the project.

      Through the completion of the above work, the improvement program has achieved the desired results. The control delay problem has been greatly improved. Different control terminals can quickly access and control ZigBee nodes in the form of browsing web pages.

Keywords: zigbee;LAMP;CC2530;cortex a9;Middleware for smart home

第1章 引言

1.1前言

    随着科学技术的不断发展和人们生活质量的渐渐提高,人们对生活的要求越来越高。伴随着物联网相关技术在全球的热度不断提升,这项技术已经逐步应用于智能家居设备里。为用户提供便利,舒适,智能化的生活体验。本文基于zigbee技术和LAMP技术,提出建立一种基于物联网技术的智能家居控制系统的通用zigbee节点协议解析的中间件系统,实现了不同设备的互联互通。该系统结合上底层的zigbee系统和以LAMP技术为基础的终端控制系统,形成了一个结构简单,操作方便,成本低廉,功耗小和便于大规模普及的智能家居解决方案。

1.2 国内外现状及发展趋势

1.2.1 国内外发展阶段

    智能家居相关技术的发展过程[1]: 

    首先是家居电子化时期,这个时期主要是面向单个的家用电子设备,家用电子设备间都是孤立工作,它们之间并没有信息的交流,形成信息网络。 

    其次是住所自动化时期,这个时期是面向功能的阶段,一部分的家居电子设备之间形成了简单的信息网络。

最后是家居智能化时期,这个时期是面向系统设计阶段,系系统通过合理的总线分布,将家庭中的各种传感器,电子化设备和安防设备中相关信息,汇聚到家庭网关,实现对家庭中所有智能化设备监控和管理功能,更有效、更合理地协调家庭环境参数,提升我们的生活,学习和工作品质,能够更好的营造出一种温馨舒适的家庭环境。除此之外,通过这种智能化的控制,更好的保证了我们生命和财产的安全;远程控制,实时掌握家中所有设备的状态,通过周围环境的变化,更合理地协同各个设备的工作,达到节约能源和资源合理利用的功能。

1.2.2 国外发展现状

    1984年,在美国康涅迪格州世界上第一栋智能建筑诞生,虽说是对原来大楼的改造,但已经具有了跨时代的意义。这栋大楼利用计算机系统,来对大楼中的空调,电梯,照明设备等进行协同控制;此外,还实现了语音通信的功能。直到2000年,这种系统设计逐步完善,并且渐渐走入普通家庭中。据不完善统计,当时的新加坡已有5000多户拥有这样的系统,而在美国会更多,大约有5万户安装了智能化家庭系统。之后 ,又在2003年,智能家庭网络化走进人们的视野,它的建设带来了惊人的4500亿美元的市场价值,其中智能家居电子设备这些硬件产品占有3700亿美元的市场价值。现在,在国外,智能家居系统已经趋于成熟,50%以上的房子具有智能化功能。与此同时,国外的标准化也趋于完善,这种智能化家庭的造价已经大大降低到了普通民众可接受的范围。

    在智能化家居系统研发能力方面,一些欧洲国家和美国不可否认一直处于行业的领跑地位。近些年,摩托罗拉和微软加大了在智能家居的研发中。如:经典的“梦幻之家”,“居所之门”和“家庭主任”分别是由微软,摩托罗拉和IBM公司研发的,这些系统已经占据了大半家居市场。见到智能家居市场如此之好,亚洲的日韩一些龙头企业也开始进入这个领域,想有所建树。

 

    目前市场上出现得智能家居控制系统主要有[2]: 

    1)X-10系统(美国),该系统是利用电力线作为网络平台,采用集中控制方式实现。这套系统功能强大,传输效率和使用的便捷性相比于ABB和C_BUS这两种控制系统都更优秀。因为该系统采用220v的电力线来作为信号传输的载体,并且采用的是通过发射器发送x10信号来实现实时控制,大大节省了布线的费用。这是其最大的创新点。完全放弃了布置低压线所需的在墙上和地面施工的方案,而那样的方案会产生高额的施工费用。但它的缺点是在国内推广的条件不成熟,因此,在国内使用的很少。 

    2)EIB系统(德国),该系统采用预埋总线及中央控制方式实现控制功能。但由于其工程要求复杂严苛,并且价格较高,因此一直无法打开国内市场。 

    3)8X系统(新加坡),该系统采用预处理总线跟集中控制方式来实现功能。它的优点在于利用的产品对系统进行扩展,系统较为成熟,比较适合中国国情。但是由于系统架构、灵活性及产品价格等方面还难以达到要求,所以目前在国内还较少应用。

1.2.3 国内发展现状

    20世纪90年代后期,我国的智慧社区在逐渐兴起。我们都知道,家庭智能化都是从沿海的上海,广州和深圳开始发展的,然后逐步向内陆发展。1997年,“97跨世纪住宅小区案竞赛活动”由国家的建设部组织。目的是推广我国的社区智慧化进程。在此次活动中,上海中皇广场脱颖而出,摘得首家“智能住宅示范工程”的称号。这标志着我国智慧化社区建设的大幕正式拉开。两年后,建设部为了进一步深化智慧社区的进程,又在全国的试点住宅小区进行了智能化的技术示范工程。之后,随着信息化的不断深入,家庭信息网络技术委员会就此成立,与此同时,网络信息技术也得到了国家的高度重视,被列为了国家创新技术重点专项项目。据建设部要求,截止今年,我国将有70%以上的家庭拥有Internet入网设备,大中城市中50%的住宅要实现智能化。

我国的智能家居起步晚育国外,并且仍旧没有形成相应的国家标准。当前,国内的产品主要还是采用国外的技术产品。但是,我国还是有一些企业推出了自己的产品,主要有[3]: 

 1)e家庭(海尔),该系列产品是以网关为控制中心,各种海尔智能家电终端为控制设备终端。同时,与微软合作,利用微软windowsMe技术和海尔智能家电,使“e家庭”初具雏形。目前已研发出了网络洗衣机、网络冰箱、网络空调、网络微波炉等一系列网络家电。

    2)e-home数字家园(清华同方),用户定位主要是针对中国家庭设计,技术标准严格按照国际标准,采用嵌入式技术和网路技术。功能模块的研发为主要产。其智能家居控制系统主要有以下三个部分: 

    A系列:适用于中高档住宅区(EIB协议)。 

    B系列:适用于中档住宅区(X-10协议)。 

易家三代:家庭控制产品集中安装在配电箱中。 

    国内各大软、硬件机构正在积极的研制、开发更为符合市场的智能化家居设备,以解决当前智能化产品实用性差、使用复杂及产品价格昂贵等缺点,而技术创新性也逐步向国际先进水平靠拢,这样的未来值得期待。

1.3 研究目的和意义

    根据前面提到的一些调查结果及数据可以看出,虽然目前智能家居系统有了一定的发展,并且市场上也开始出现相应的产品,但从总体的发展来看,不容乐观,特别是统一标准和权威产品的缺乏严重影响了家居智能化的发展。随着科技的提高,经济的发展,人们的物质生活水平的提高,对家居环境的要求也越来越高,作为家居智能化的核心部分——智能家居控制系统也越发显得重要。家居智能化控制的开发和建设是未来国家、经济发展的必然趋势。

2 使用的关键技术

2.1 zigbee技术

2.1.1 技术简介

    zigbee[4]技术是一种低功率、低成本、结构简单和可靠性高的蜂窝式短距离无线通信技术。主要用于自动识别和远程控制。常常是用在嵌入式系统的设计中,实现设备间的无线通信。在现有的无线短距离通信技术中,zigbee技术在成本和功耗方面首屈一指。

    zigbe[5]技术是基于IEEE的802.15.4无线标准研制开发。zigbee技术也是一种标准,主要是在安全、组网和应用软件方面制定的标准。软件开发人员利用标准制定的协议栈接口API来实现相应的应用程序。API和网络层协议有zigbee联盟来进行标准化,而底层的物理层和MAC协议IEEE组织来制定。 完整的zigbee协议套件由物理层、数据链路层、网络层、应用汇聚层和高层应用规范组成。整个协议架构如图:

图2.1  zigbee协议架构图

2.1.2 技术特点[6]

1) 短距离。 激活进入工作状态仅需15 ms, 节点入网便捷,仅需30 ms,拥有快速响应的特点,能够进一步节省了电能。

    2) 高容量。 一个zigbee网络可容纳255个设备,65 000个节点为最大容量。

    3) 低速率。 zigbee工作在20~250 Kbs速率下, 提供250 Kbs(2.4 GHz), 40 Kbs(915 MHz)和20Kbs(868MHz)的数据吞吐率, 低速率传输数据的应用要求能够满足。

    4) 近距离。 传输范围为10~100m之间。这指的是两个相邻节点间的距离。 是利用路由和节点间通信的接力, 可将传输距离变得更远。

    5) 低功耗。 在低功耗待机模式下,1个节点工作6~24个月需要2节7号干电池,是zigbee的突出优势。

    6) 免执照频段。 采用直接序列扩频在工业科学医疗频段, 2.4 GHz(全球)、915MHz(美国)和868MHz(欧洲)。

    7) 高安全性。 Zigbee提供了鉴权功能和数据完整性检查, 采用AES128加密算法,采用何种安全机制可由个应用灵活确定。

2.2 LAMP技术

LAMP[7]技术是指Linux操作系统、apached服务器,mysql数据库和php技术第一个字母的缩写。该技术主要用于web网站的开发。本身这些程序各自独立,没有任何联系。但软件开发人员常常一起使用这些技术,因此,为了缩短开发周期和开发效率,把这些各自独立的程序集成在一起,实现了LAMP技术。下面为各个相关技术的简介及在本系统中的作用。

2.2.1 php技术

PHP[8]是英文超级文本预处理语一言(PHP:Hypertext Preprocessor)的缩写,是一个嵌套的缩写名称。它是一种服务器端、跨平台、HTML嵌入式的被广泛使用的开源脚本语言。php脚本在服务器上执行,没有成本,可供免费下载和使用。php有着和其他同类脚本所有的特点和功能,除此之外,还具有自身的特色:免费性、快捷性、跨平台性强、效率高,支持图像处理、支持面向对象的机制和对数据库有强大的支持等。

在智能家居中间件系统中作用:用于编写客户端程序。

2.2.2 Mysql技术

mysql[9]数据库是一个精巧型关系数据库管理系统。该系统功能强大、灵活性高、拥有丰富的应用编程接口和简单精巧的系统结构。这些优点吸引了大量的开发人员的青睐,特别是和Apache和php的结合,web网站后台数据库的管理提供了强大的支持。

mysql是一个多用户和多线程数据库系统,支持标准的sql语句。mysql系统是B/S架构实现的。通过服务器上的一个守护进程mysqld和各个客户端程序以及mysql库进行数据交互,实现对数据库中的关系数据表的管理。以这种方式实现的数据库能够完全适应于网络,可在Internet上自由访问,共享数据,达到便捷管理、快速运行、高可靠性和强安全保密性的性能优势。除此以外,在unix和Linux系统上的免费使用的优势,在web开发中,拥有举足轻重的地位。

在本智能家居中间件系统中作用:存储zigbee系统节点信息和智能控制终端相关数据。

2.2.3 Apache 服务器

 Apache[10]目前应用广泛,它支持Linux,Unix, Win9X/20U0/NT/XP等多种操作系统,功能强大。并且它的源代码是开源的,很多程序员、开发人员不断的将它完善,它的特点是快速、可靠、易扩展,这种特点在所有的服务器软件中都占有优势。

 Apache不仅是Web服务器软件的一种,他也可以作为代理服务器软件来应用。客户端访问服务器时,采用URL请求,Apache接受该URL请求并取得在服务器上的资源,返回给客户机,以满足客户机的请求。Apache更适合于每天同时有数百万人访问量的Web服务器,这一点是很多服务器软件无法比拟的。

 Apache作为本系统的开发平台是非常合适的。因为PHP能够作为Apache web服务器的语台来执行,能比CGI或者Perl更快速地执行动态网页,使得它的执行效率要高于其他的程序。Apache, PHP在实际应用中为最佳组合。

 在本智能家居中间件系统中作用:为智能终端控制系统提供访问服务器。

2.2.4 Linux系统

 Linux[11]是能够自由传播的类Unix操作系统,并且是可以免费使用的。它支持多CPU的操作系统、多任务和UNIX的多用户功能,基于POSIX的操作系统。主要的网络协议、应用程序和UNIX工具软件都能在它上面运行。同时,它支持32位和64位硬件。Linux能够成为一个性能稳定的多用户网络操作系统,主要是基于它继承了Unix以网络为核心的设计思想。本智能家居中间件系统用的是乐美客guitar开发板,其中搭载Lemuntu系统。

 在本智能家居中间件系统中作用:为中间件软件提供软件开发环境和运行环境。

2.2.5 B/S体系结构

 B/S[12]结构是浏览器和服务器结构。是在C/S结构的基础上实现的,用户界面通过浏览器来呈现。在该结构中,客户端统一化,就是把的浏览器作为客户端,不必为了不同的用户开发相应的客户端,大大减少了工作量。而把系统功能实现的核心代码集中到服务器上完成,从而简化了系统的开发、维护和使用。

 架构特点:

1) 维护简单方便,仅需改变网页,就能实现所有用户的同步更新。

2) 成本降低,应用管理软件基本都运行在Linux服务器上,不必在意用户的操作系统,Linux操作系统是可以免费使用,同时,连接的msyql数据库也是免费的,这种选择非常盛行。因此,大大增加了客户端选择的可能性和大幅度的降低了成本。

3) 业务扩展简单方便,通过增加网页即可增加服务器功能。

4) 具有分布性特点,可以随时随地进行查询、浏览等业务处理。

5) 开发门槛地,能够共享

B/S结构模式分为三层体系结构[13]。如下图所示,用户只需通过浏览器就可以实现操作,其中,前端实现部分事务逻辑,主要事务逻辑由服务器处理。基于此,在数据管理层和用户界面层增加了一层,称为中间件层。中间件将应用分为了表示层、业务逻辑层和数据存储层三个不同的;逻辑处理层次,软件的可维护性和可扩展性得到了很大的提高,而且还节省了开发成本。

图 2.2 三层 B/S 结构模式

3 监控平台软硬件结构及实现原理

3.1 系统整体设计

系统融合了zigbee无线传感器技术,Linux串口编程技术,Linux网络编程技术和LAMP技术,实现了基于zigbee技术的传感器的无线组网及数据的传输协议设计,实现了基于Linux程序设计的串口对zigbee自组网络中数据的采集以及与终端控制软件的网络交互的软件设计和实现了基于LAMP技术的智能终端控制系统的软件设计。通过这些技术,可以实现智能终端对传感器的实时控制。

本系统的按照功能设计主要分为三个部分,数据采集部分,数据处理和存储部分,以及数据显示部分。系统通过中间件采集和处理传感器数据,并将处理后的数据存储到数据库中。终端控制软件之后通过适时访问数据库,读取该传感器数据,并在终端上以适当的形式显示;系统亦可通过操作终端控制软件,修改数据库数据。中间件之后通过适时访问数据库,读取相应数据,并将有效数据转换成zigbee自组网传输协议指令,来控制各个传感器。

图 3.1  硬件系统结构

    如图3.1的硬件系统结构图可以看出,整个系统被分成了三大块硬件模块。首先是zigbee网络,它是由一个zigbee基站和若干个zigbee节点组成,形成了一个星型网络。zigbee网络就是感知层,用来采集各个zigbee节点周围的环境信息,对应功能分类中的数据采集部分,具体如何采集、如何管理节点采集信息和如何发送采集信息指令等原理下文会详解;其次是本系统的核心部分,它是由一个ehome中间件程序和msyql数据库构成,主要完成对zigbee自组网构建的感知层采集信息的解析和对zigbee自组网基站和节点的实时监控任务。除此以外,还会和智能终端通过wifi的方式(当然ARM系统,也可以说是嵌入式服务器作为AP,构建了一个局域网)进行信息交互,更有效的实现实时控制zigbee基站和zigbee节点。同样,具体ehome中间件是如何完成对zigbee自组网的监控和智能终端的信息交互功能下文详解。ARM系统中的另一部分是mysql数据库。这部分主要是要完成LAMP环境的搭建,是ARM系统真正成为一个嵌入式服务器,为智能终端软件的开发打下坚实的基础。搭建嵌入式服务器环境的过程较繁琐,难度并不大,需要有足够的耐心即可。鉴于不是本文论述的重点,因此,不在赘述。最后一部分是智能终端控制程序,该程序运用的是就是LAMP技术来开发的,同样,该部分也不是本文要关注的重点,后文只做了少部分的介绍,点到,了解具体功能即可。

图 3.2  中间件软件通信结构图

图3.2展示的就是该监控平台通信数据流向情况图。通过理解该信息流向图,能够清晰的理解整个监控平台的工作流程。仔细分析该图可以看出,信息流向可以分为两类。一类是流向智能终端,另一类是流向zigbee自组网中。在流向智能终端的过程中,zigbee自组网会给ehome中间件软件发送相应格式的数据包,ehome中间件软件接收到数据包后,进行数据包数据解析,并将解析后的有效数据按照一定的规则存入msyql数据库中。智能终端再通过轮询的方式,获取mysql数据库更新信息,并及时显示在智能终端设备上,从而实现了智能终端对zigbee基站和zigbee节点状态信息的实时读取功能;而另一方面,数据流向zigbee自组网时,首先通过对智能终端的人为控制,产生控制信息,并将其按照一定规则存入mysql数据库中,然后智能终端程序,会给ehome中间件软发送TCP/IP数据包,告知中间件msyql数据库有数据更新,要及时查看(这里采用类似于中断的方式,而没有像智能终端软件一样采用轮询方式主要是因为;轮询的方式太消耗cpu资源,当控制终端多时,系统实时性会大大降低,达不到优化的目的)。当ehome中间件软件读取到更新后的数据后,根据获取的mysql数据库信息生成控制zigbee自组网的控制指令,并通过串口发送到zigbee自组网中,实现对zigbee基站和zigbee节点的实时控制功能。

3.2 Zigbee组网通信协议设计[14]

 这套智能家居的各个传感器节点都采用zigbee无线组网技术。为了实现较低功率的损耗和降低成本材料。无线传感网络中的主要设备是CC2530,又结合了德州仪器的zigbee协议栈(Z-Stack),提供了一个强大和完整的zigbee解决方案。系统又在其基础上,利用Z-Stack预留的协议栈接口上实现了对各个节点设备的管理协议。该节点设备管理协议对各个节点设备进行分类和分层管理,大大简化了zigbee自组网中的数据格式,有效地提高了zigbee自组网数据和中间件软件的通信效率。该协议的基本实现原理如下:

3.2.1 设备分层原理

将每个节点分为两层。一层为设备层,一层为子设备层。设备层包含子设备层的子设备类型和数量等信息。设备层作为该节点的逻辑系统,又存储了该节点的功能描述信息;子设备层作为设备层中的一部分,只关心其自身的功能和类型等信息。例如:一个温度传感器节点(有一个温度传感器和一个工作指示灯),温度传感器和指示灯,就分别为两个子设备,而把它们组合成一个系统来使用,就把这个逻辑系统叫做设备。

3.2.2 设备分类原理

这里的分类是针对子设备层来说的。就是所谓的子设备的设备类型。该协议将所有设备都归类为6类:DI设备(数字量输入设备)、DO设备(数字量输出设备)、AI设备(模拟量输入设备)、AO设备(模拟量输出设备)、SI设备(流输入设备)和SO设备(流输出设备)。通过不同的标识,实现了有效地管理和控制各个子设备。

3.2.3 节点数据交互命令定义(监控协议)

应用数据帧格式:FF FX ADDR SIZE DATA。

数据内容标识头:0XFFFX;X的值为1~4,代表不同命令。

ADDR:每个设备的地址(相同ADDR的子设备,属于同一个设备)。

SIZE:代表DATA的数据大小

DATA:要传送的数据信息

设计的两个应用层协议,完美解决了对任意复杂设备的描述问题,可以向前兼容未来无数的复杂设备;无需更改硬件设备,只升级设备的软件程序,就可以把普通设备升级为智能设备。相关结构体定义如下:

//存储f0数据

typedef struct f0_info{  //ps: '\0'

char addr[5];       //设备地址  

char panID[5];     //16网络ID

char description[40]; //设备简要描述:最多12个汉字,比如“应阁通用ZigBee基站”

int  dev_number[7];//子设备类型个数统计(子设备类型:DI DO AI AO SI SO)

}F0_INFO;

//存储f1数据

typedef struct f1_info{   //ps: '\0'

char dev_type[2];    //子设备类型

char state[2];  //子设备状态

char addr[5];        //设备地址

char number[2];      //子设备编号

char description[17];  //功能简要描述:最多8个汉字,比如“第一路开关”

char uint[7];  //度量单位文字描述,比如 mg/kg

char operation[17];   //操作简要描述:最多8个汉字,比如“输入控制温度”

}F1_INFO;

//存储f2数据

typedef struct f2_info{     //ps:'\0'

char index_ID[5];      //子设备索引号

char addr[5];    //设备地址

char dev_type[2];      //子设备类型

char dev_num[2];      //子设备编号

char state[2];          //子设备状态

char flag;             //0:update mysql  1:select mysql

}F2_INFO;

这三个结构体的定义完全按照zigbee节点设备的管理协议来定义的。各类结构体作用在介绍节点设备管理协议时已经说明,这里不再赘述。通过分析这三个结构体的成员变量,能够发现zigbee节点的管理方式和控制指令的具体内容。

首先来看一下zigbee节点的管理方式。设备通过自己的唯一标识(设备地址)来区分不同的设备。而子设备和设备具有同样的设备地址(这是用来表明哪些子设备属于该设备),除此以外,子设备最为关键的就是它的设备类型,这从根本上决定了该子设备的具体功能,同时也能通过具有相同设备地址的子设备类型来判断该设备具有什么功能。其余的结构体成员就是一些描述信息,可以由智能终端软件来修改。

其次,再分析一下控制指令;首先是数据头(FFFX),通过数据头来确定这条控制指令具体功能。接下来的2个字节表示的就是设备地址(ADDR),通过ADDR找到要控制的设备,之后的size表示的就是这里这三个结构体的大小。通过F0_INFO中的dev_number数组和F1_INFO中的dev_type数组来识别该设备所有的子设备个数和其类型,代码如下:

//获取数据包各个子设备类型

int i;

int dev_type;

int value;

for(i=0;i<6;i++)

{

       dev_type = *(pInfo+i+3)>>5;

value = *(pInfo+i+3)&0x0f;

if(!dev_type && !value)

f0_info.dev_number[i] = 0;

else

         f0_info.dev_number[dev_type] = value;

}

//统计子设备总数

f0_info.dev_number[6] = 0;

for(i=0;i<6;i++)

{

f0_info.dev_number[6] += f0_info.dev_number[i];

}

由于数据帧(FF FX ADDR SIZE DATA)格式的ADDR中,每个字节的高三位为子设备类型,低4位为实际子设备编号0--15,第5位保留,所以会有移位运算(pInfo指针指向的是串口程序获取的完整的zigbee自组网数据包)。程序按照数据帧的格式将pInfo指针指向的数据分解开并解析后,一一对应地存放到前文提到的F0_INFO结构体、F1_INFO结构体和F2_INFO结构体中。

3.3 嵌入式网关中间件设计

3.3.1 中间件软件作用

本系统的服务器为乐美客guitar开发板,该中间件软件,在乐美客guitar开发板上的Linux操作系统上开发,是本系统的核心部分。该中间件软件的作用主要是解析zigbee自组网数据,将解析后的数据按照mysql的数据格式存储,为智能终端控制软件提供可识别的有效数据,解决了智能控制终端软件无法识别zigbee自组网数据的问题。

3.3.2 中间件软件功能介绍

该软件从功能上分,主要有两大单元:数据处理单元和数据存储单元。数据处理单元主要功能有:读取功能,解析功能和指令生成功能;数据存储单元主要功能有:sql语句生成功能,建表存储功能和数据监控功能。单元和具体功能的关系如下图:

图 3.3  中间件软件功能图

由图3.3可知,中间件软件通过读取模块读取到完整的zigbee自组网基站信息包,将完整数据包给解析模块,解析为数据库存储格式数据,然后再通过sql语句生成模块生成相应的sql语句,最后,中间件软件调用mysql接口,通过建表存储模块将可识别的有效数据存入数据库中,以便智能控制终端软件访问,最终实现了智能终端控制软件对传感器状态的监控;另一方面,中间件软件通过msyql数据监控模块监控mysql数据变化,当发现了数据变化,sql语句生成模块生成相应sql语句,操作mysql,获取相关信息。然后,中间件软件通过解析模块和指令生成模块生成zigbee自组网基站能识别的指令,从而智能控制终端完成了对传感器的实时控制。

读取功能模块分析:

1)读取功能分析:

该模块有2个关键点,一个是通过串口驱动来对串口的配置,使其能够读取到zigbee自组网信息。另一个是如何控制串口程序获取到完整数据信息(因为通过测试发现zigbee自组网发来的信息串口不是一条一条的接收,它会先存入缓冲区,再一起读取,不去设计接收数据的逻辑,丢数据包就成了大概率事件了)。获取完整数据包代码如下:

*函数介绍:获取完整数据包

*参数说明: char *pInfo: 保存完整数据包内容

*          char *pbuff: 串口一次性接收到的数据

*          int nread:  串口一次性接收数据的大小

*返回值  : int:判断是否获得完整数据包

*/

int pos_Info[2]={0,0};  /*记录当前Info的大小及标识是否为完整数据包*/

int get_totall_Info(char *pInfo,char *pbuff,int nread)

{

 //判断是否为新的数据包

    if(pos_Info[1])

     pos_Info[0]=0;

    //拷贝数据

    int i,k;

    for(i=pos_Info[0],k=0;i<(pos_Info[0]+nread);i++,k++)

     *(pInfo+i) = *(pbuff+k);

    pos_Info[0] += nread;

//printf("pos_Info: %d\n",pos_Info[0]);

    //判断数据包完整性

if(nread<8)

    {

     pos_Info[1]=1;

    return 1;

    }

    else

    {

        pos_Info[1]=0;

        return 0;

    }

}

分析该代码能够看出,它是将串口读到的信息存放到pInfo指针指向的数组中,又通过全局变量pos_Info数组来存储当前串口接收到数据的大小和是否为完整数据包标识。该代码的核心是“nread<8”这个判断,当发现串口一次读到的数据小于8字节,那么一定是接收到了完整数据包。为什么是8字节,这就是串口驱动程序中 “newtio.c_cc[VMIN] = 8”设置的问题;表示串口接收的最大字节数为8;

2)指令生成单元模块分析:

该模块主要就是完成将F02_INFO结构体信息,根据zigbee节点管理协议翻译成控制zigbee自组网的控制指令;具体过程如下:

    //生成底层硬件控制指令

*(pstrcmd+0) = 0xff;

*(pstrcmd+1) = 0xf3;

*(pstrcmd+2) = (*q)[0];

  *(pstrcmd+3) = (*q)[1];

  *(pstrcmd+4) = 0x02;

  *(pstrcmd+5) = (dev_type<<5) + dev_num;

  *(pstrcmd+6) = pf2_info->state[0] - '0';

  *(pstrcmd+7) = '\0';

pstrcmd指针指向的就是命令字符串,从上述代码可以看出,程序是将控制指令分为了8个字节,然后进行单个字节的赋值工作。

3)SQL语句生成及建表存储模块分析:

该模块主要功能就是将F0_INFO结构体、F1_INFO结构体F2_INFO结构体成员信息翻译成sql语句,并存入数据库相应的数据表中。核心代码如下:

        //拼接插入sql的语句

   strcpy(table,"E_Device");

        field[0] = "D_Addr";

        field[1] = "D_Desc";

        field[2] = "D_PanID";

        value[0] = pf0_info->addr;

        value[1] = pf0_info->description;

        value[2] = pf0_info->panID;

   insert_strncat(table, field, value, strsql,3);

       //操作数据库

        res=mysql_query(conn_ptr,strsql);

   if (res)

             printf("SELECT error:%s\n",mysql_error(conn_ptr));

本段代码是展示了F0_INFO结构体成员信息存入msyq数据库的过程。不难看出,就是将sql关键词和结构体成员的拼接成完整的sql命令,然后调用mysql_query()函数就能完成数据入库的功能(虽然没有说mysql库文件的导入,但该工作是相当重要的)。剩余其他结构体信息入库原理都和F0_INFO结构体方式大同小异,不再赘述。

4)数据监控功能模块分析:

这里的数据监控指的是,信息流向zigbee自组网的过程中,中断部分的实现原理。通过在嵌入式服务器端建立socket server端,阻塞等待智能终端发来的msyql数据库更新消息,从而快速生成zigbee节点控制指令,及时控制zigbee节点,最终实现实时控制的效果。代码如下:

        //等待接收网页终端的数据包

       struct sockaddr_in fromaddr;

        socklen_t len = sizeof(fromaddr);

        int new_sd = accept(sockfd, (struct sockaddr*)&fromaddr, &len);

        if(-1 == new_sd)

        {

                perror("accept failed");

                return 1;

        }

      //获取客户端IP

    char *from_ip = inet_ntoa(fromaddr.sin_addr);

        printf("client_ip: %s\n",from_ip);

   //获取tcp数据包

        char buf[100]={0};

        int ret = read(new_sd, buf, sizeof(buf));

        if(ret<0)

        {

                perror("read failed");

                return 1;

        }

        else

        {

                //printf("buf= %s\n",buf);

        }

       //拷贝数据包到指定位置

       strcpy(pmsg,buf);

       //printf("pmsg= %s\n",buf);

      

    该代码很简单,阻塞等待智能终端发送控制信息,收到控制信息后,将其拷贝到buf数组中。

3.3.3 中间件软件实现原理

网关中间件软件主要分为两部分,一部分为节点数据采集、处理和存储部分,另一部分是终端控制响应和指令生成部分;这两个部分分别以两个进程的形式运行,互不干扰,提高了响应速率。该软件设计过程中用到了Linux串口编程,Linux网络编程和LAMP技术。在串口编程中,利用Linux系统为应用层提供的系统调用,配置guitar开发板的串口参数,以便能够快速和准确地获取zigbee自组网中基站的串口信息。Linux网络编程中,同样也是利用Linux系统应用层提供的系统调用,来进行TCP/IP的socket通信,以便终端控制软件及时通知中间件软件及时获取数据库实时更新的数据,实现了终端控制软件,中间件软件和底层zigbee自组网信息的实时同步。下面分别简介中间件软件主要的两部分处理过程:

1)节点数据采集、处理和存储部分。首先说明数据结构,中间件软件中定义了两个重要的结构体分别用来存储设备信息和子设备信息,它们分别为F0_INFO结构体和F1_INFO结构体。其次再看程序的工作机制,软件通过Linux串口API函数,获取到zigbee自组网中基站的串口数据信息;之后,软件根据zigbee自组网通信协议,将获取到的信息拆分,再存到相应的设备层的F0_INFO结构体和子设备层的F1_INFO结构体中;然后,软件利用Linux中的系统调用来操作mysql数据库,将这两个结构体中的信息,存储到相应的数据表中,并及时通知终端控制软件去尽快处理更新的数据信息。

其次再看程序的工作机制,软件通过Linux串口API函数,获取到zigbee自组网中基站的串口数据信息;之后,软件根据zigbee自组网通信协议,将获取到的信息拆分,再存到相应的设备层的F0_INFO结构体和子设备层的F1_INFO结构体中;然后,软件利用Linux中的系统调用来操作mysql数据库,将这两个结构体中的信息,存储到相应的数据表中,并及时通知终端控制软件去尽快处理更新的数据信息。

 2)终端控制响应和指令生成部分。首先说明数据结构,中间软件中定义了一个重要的结构体F2_INFO。该结构体主要是存储生成控制zigbee节点的指令信息。通过对终端控制软件的操作,来修改mysql数据库中响应的信息。与此同时,终端控制软件会通过TCP/IP网络通信,通知中间件软件及时从msyql数据中获取更新数据,存储到F2_INFO结构体中。然后,根据zigbee自组网通信协议,将F2_INFO结构体中数据生成相应的节点控制指令,最后,中间件软件,通过Linux串口API将生成的控制指令发送到zigbee自组网的基站,从而实现了对传感器节点的实时控制。

图3.4  中间件软件工作流程图

3.3.4 数据字典

这些mysql表中,主要存储了zigbee自组网通信协议中相关的数据和智能控制终端相关的操作数据。中间件软件和智能控制终端软件的数据交互桥梁就是这些数据库表。该系统中这两个软件通过以适时的时间对mysql表中的数据进行增、删、改和查,来实现数据交互,从而简单有效地实现了系统功能。Mysql表数据结构如下:

表3.1 E_Area(区域表)

字段

类型

NULL

默认

注释

A_ID

Int(11)

Auto_increment

A_ParentID

Int(11)

-1

区域父ID -1表示最高级

A_name

Varchar(20)

NULL

名称

A_ImgUrl

Varchar(30)

NULL

图片url路径

A_Desc

Varchar(30)

NULL

描述

A_Date

Int(11)

0

创建记录时间

A_Update

Int(11)

0

记录最后修改时间

A_status

Int(11)

1

1:新建    -1:删除

表3.2 E_DeviceType(设备类型表)

字段

类型

NULL

默认

注释

T_ID

Int(11)

Auto_increment

T_ImgUrl

Varchar(30)

NULL

图片url路径

T_Desc

Varchar(30)

NULL

描述

T_ParentID

Int(11)

-1

-1 表示自己是最高级

T_Date

Int(11)

0

记录创建时间

T_Update

Int(11)

0

记录最后修改时间

T_Status

Int(11)

1

1:新建    -1:删除

   表3.3 E_Device(设备表)

字段

类型

NULL

默认

注释

D_ID

Int(11)

Auto_increment

D_Addr

Varchar(2)

0

设备地址

D_Desc

Varchar(24)

0

设备描述

D_PanID

Varchar(2)

0

D_AID

Int(11)

-1

区域ID

D_TID

int

-1

设备类型ID

D_Date

Int(11)

0

记录创建时间

D_Update

Int(11)

0

记录最后修改时间

D_Status

Int(11)

1

1:新建    -1:删除

   表3.4 E_SubDevice(子设备表)

字段

类型

NULL

默认

注释

S_ID

Int(11)

Auto_increment

S_DeviceID

Int(11)

-1

父设备ID

S_Type

Int(11)

-1

0:DI 1:DO 2:AI 3:AO

S_Number

Int(11)

-1

第几个子设备

S_Desc

Varchar(22)

NULL

描述信息

S_Uint

Varchar(6)

NULL

单位

S_State

Varchar(3)

NULL

值,开关量,温湿值

S_Date

Int(11)

0

记录创建时间

S_Update

Int(11)

0

记录最后修改时间

S_Status

Int(11)

1

1:新建   -1:删除

   表3.5 E_Pattern(情景模式表)

字段

类型

NULL

默认

注释

P_ID

Int(11)

Auto_increment

P_Name

Varchar(20)

NULL

名称

P_Desc

Varchar(30)

NULL

描述

P_ImgUrl

Varchar(50)

NULL

图片url地址

P_Date

Int(11)

0

记录创建时间

P_Update

Int(11)

0

记录最后修改时间

P_Status

Int(11)

1

1:新建    -1:删除

  表3.6 E_PatSub(情景模式-子设备关联表)

字段

类型

NULL

默认

注释

P_ID

Int(11)

Auto_increment

P_PID

Int(11)

-1

情景模式ID

P_SID

Int(11)

-1

子设备ID

P_Desc

Varchar(30)

NULL

描述

P_Date

Int(11)

0

记录创建时间

P_Update

Int(11)

0

记录最后修改时间

P_Status

Int(11)

1

1:新建    -1:删除

表3.7 E_Message(消息表)

字段

类型

NULL

默认

注释

M_ID

Int(11)

Auto_increment

M_Type

Varchar(5)

消息类型

M_SID

Varchar(5)

控制的设备ID

M_Desc

Varchar(5)

描述信息

M_Date

Int(11)

0

记录创建时间

M_Update

Int(11)

0

记录最后窗机时间

M_Status

Int(11)

1

1:新建     -1:删除

在这些数据表中,最重要的是E_DeviceType设备类型表、E_SubDevice子设备表和E_Message消息表。E_DeviceType设备类型表示用来存储设备信息的,E_SubDevice子设备表是用来存储子设备信息的。E_Message消息表是专门为数据流向智能设备终端软件设计的,智能终端软件通过轮询的方式不断轮询该表,找到msyql数据库更新数据索引,然后去查询或修改mysql数据库信息。其他关系数据表主要用在智能终端模块,不是分析重点,了解即可。

通过E-R图,能更清新的看出这些mysql表的逻辑关系,图如下:

图 3.5  智能家居中间件系统E-R图

根据图3.5的E-R图,可以分析出mysql数据库的查询和修改过程。下面就是通过分析得到的sql指令结构:

1)插入一条数据记录

    insert into table(xxx) values(xxx)

2)插入若干条数据记录

insert into table(xxx0,xxx1,...) values('yyy0','yyy1',...)

3)删除一条数据记录

delete from table where field='xxx'

4)筛选并存储相关数据记录

select S_ID from E_Device,E_SubCMD where D_Addr=xxx and D_ID=S_DeviceID and S_type=xxx and S_Number=xxx

5)更新一条数据记录

update E_SubCMD set S_State=xxx where S_ID=xxx

3.4 智能终端软件设计

该软件使用了html5、css、js和MUI等技术,实现了智能终端控制软件的后台和前端UI设计。又依托php+mysql+apache+Linux的LAMP技术,对获取的数据进行处理和分析。软件功能图如下:

图 3.6  智能终端控制软件功能图

由图3.6可知:该软件通过扫描功能,把刚刚加入该系统的传感器添加到软件中,填入相关识别信息后,把其分区域管理。例如:客厅区传感器,卧室区传感器等。至此,该传感器就可以通过该软件进行控制以及信息的修改和删除。其次,可以根据需求进行多个传感器的联动控制,以实现相应的情景模式。

根据上述软件功能的描述,设计了如下智能控制终端UI界面:

图 3.7  智能控制终端UI界面

4 系统测试

系统测试主要关注软件的两个方面:功能是否都实现和系统的稳定性是否良好。

    首先,在这里展示研发设计的最终运行效果

       最左端的是zigbee基站,中间的是嵌入式服务器,最左端的是zigbee节点。

4.1 功能测试

4.1.1 设备初始化功能测试

中间是嵌入式网关,中间件程序就跑在这个服务器中,其次,它也是智能终端访问的服务器。嵌入式网关左右两个zigbee模块构成了一个以星型自组网结构的zigbee网络(zigbee节点不够,就用两个节点来表示一个星型网络),左端的为基站,右端的为节点。通过智能终端设备来控制基站和节点上led的形式。来模拟住所中照明设

备。

把设备连接好后,上电启动,嵌入式网关就会显示上图信息,以此来表征设备启动成功,初始化功能正常

4.1.2 节点控制功能测试

图 4.3  灯1控制效果图

这里控制的zigbee节点右侧的红灯,图左上角是嵌入式网关调试信息,图左下方是智能终端控制效果,图右侧是实物效果。

图 4.4   灯2控制效果图

这里控制的zigbee基站左侧的黄灯灯,图左上角是嵌入式网关调试信息,图左下方是智能终端控制效果,图右侧是实物效果。

表4.1 灯1测试记录表

测试的次数

20

40

60

80

正常工作数

20

39

57

77

表4.2 灯2测试记录表

测试的次数

20

40

60

80

正常工作数

20

37

59

77

    通过对上述2个led灯的多组反复测试,有接近98%的可能性工作正常。效果如图4.3和图4.4所示。证明,节点控制功能工作正常。

4.1.3 情景模式测试

图 4.5  情景模式效果图

情景模式的其实就是若干个led灯的联动控制,单个led灯测试工作正常后,这里的测试主要是测试多条控制指令打包发送时,zigbee自组网是否能不丢数据包产生响应。所有要尽可能让多个led等同时受到控制。由于硬件设备有限,最多有4个led,只能用这4个led做多组重复测试,来替代多个led控制的情况。

测试前,需要设置管理,使zigbee节点和zigbee基站上所有led灯都进行统一的联动控制。下图就为情景模式的配置过程:

图 4.6  情景模式设置控制图

通过情景模式的设定,能够一键完成对zigbee节点和zigbee基站上所有led灯同时亮或同时灭。

测试具体方案见下表:

表4.3 情景模式测试记录数据表

测试次数

20

40

60

80

0个led亮

0

0

0

0

1个led亮

0

0

0

0

2个led亮

0

1

1

0

3个led亮

1

1

3

7

4个led亮

19

38

56

73

由上表可知,绝大时候能够点亮4个led灯,少量3个灯亮,个别2个灯亮;基本达到了预期效果。

4.2 稳定性测试

在稳定性测试中,通过让设备长时间工作,来采集测试数据,实现稳定性测试的目标。测试时长2周;每次测试10次,测试时间间隔指数型增长;测试数据记录表如下表:

表4.4 稳定性测试记录数据表

测试次数

1

3

7

14

Led 0亮次数

10

10

10

10

Led 1亮次数

10

10

10

0

Led 2亮次数

10

8

9

10

Led 3亮次数

10

10

8

9

通过2周的长时间测试,由表中数据可以看出,除了led1坏掉外,其他led灯工作基本稳定,所有程序的稳定性达到了预期效果。

  

    本文研究了一种基于物联网技术的智能家居控制系统网关中间件控制系统。当下关于物联网智能家居控制系统的实现方案的研究已经非常多,本文中的系统实现方案就是其中较为成熟的,而本文的重点是对当下较成熟方案的优化。纵观当下的系统实现方案,zigbee技术以相当成熟,想做优化,实属不易。而控制系统中更为重要的就是这网关的设计。

基于上述原因,本文采用嵌入式网关,结合zigbee技术、Linux串口编程技术、Linux网络编程技术和LAMP技术,实现了一套网关中间件软件控制系统。首先,该系统最大的亮点是采用了将网关和服务器合二为一的方式,网关即服务器。大大地缩短了系统响应时间,拥有更为出色的用户体验。其次,维护更为简单,只要重启系统即可。最后,该系统仍保留了该智能家居控制系统原有方案的优点:扩展性好、结构简单、操作方便、反应灵敏、运行稳定、成本更低廉,而且该系统的智能控制终端是以网页的形式访问,很好的解决了智能控制终端可移植性问题,具有很大的应用前景。本系统也为物联网在未来生活中的应用提供参考。

参考文献

  1. 刘修文. 物联网技术应用 智能家居[M]. 北京:机械工业出版社. 2015
  2. 毛明毅. 智能家庭物联网系统[M]. 北京:机械工业出版社. 2015
  3. 徐勇军. 物联网关键技术[M]. 北京: 电子工业出版社. 2015
  4. 姚国风,庄斌,赵大明,霍晓蕊. 基于ZigBee无线技术的智能家居系统设计[J]. 现代电子技术,2016,22:81-84.
  5. 何芸,张腾. 基于zigbee技术的智能家居实时监控系统的设计研究[J]. 电子世界,2016,21:162.
  6. 刘玮. 基于zigbee技术的智能家居系统设计[J]. 电子科技,2016,11:51-53.
  7. 丁革建. LAMP开发实践教程[M]. 中国铁道出版社
  8. PHP100视频教程[J/OL]. 网址:http://www.verycd.com/topocs/2762837/
  9. 杜波依斯. MySQL权威指南[M]. 机械工业出版社
  10. 黄栋. Apache服务器配置与管理[M]. 清华大学出版社
  11. 杨明华. Linux命令、编辑器、shell编程实例大全[M]. 人名邮电出版社
  12. Muhammad Waqar Aziz, Service-Oriented Layer Atchitecture for Smart Home[J], Internation Jpurnal of Smart Home, vol.7, No.6(2013), 409-418
  13. NamKyung Lee,Hyum Woo Lee, Won Ryu, Consideration for Web of Object Service Architecture on IoT Environment[J], Internation Jpurnal of Smart Home, vol.9, No.1(2015),195-202
  14. 吴志辉. 基于物联网的智能家居设备系统组网及远程监控管理方法[P]. 中国专利: 201410406079.8, 2014-11-26.
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

STM32单片机定制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值