智能家居毕业论文

课程设计报告

2014—2015学年第 一学期

课程名称

设计题目 智能家居(控制与通信的实现)

2014年9月3日

基于物联网的智能家居系统设计

摘要

物联网作为朝阳的产业,被列为国家五大新兴战略性产业之一。物联网是通过射频识别、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网络。智能家居是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设备集成形成智能家居系统的居住环境。物联网智能家居通过家居智能管理系统的设备来实现家庭安全、舒适、信息交互与通信的能力。本文结合了物联网和智能家居的相关技术,将传感器、控制器等设备通过无线技术连接和采集数据信息的处理,实现了使用传感器采集室内温度,光线等数据,在嵌入式终端中进行信息的读取和处理,做出相应的操作。整个过程涉及到基于ZigBee的无线传感网络和利用Java socket实现双机通信的应用。该设计分为以下几个部分:

一、首先分析课题来源与市场需求,然后对整个系统进行了概述;二、对该系统的框架进行介绍;三、对整个系统的软硬件设计进行详细的介绍。本论文设计是基于物联网和智能家居相结合的背景下,实现了对家居环境中的光线,温度,烟雾等因素的实时监测,并通过利用Java socket实现双机通信和管理系统作出相应的控制,以提升家居环境的安全性、舒适性、便利性。

关键词:物联网,智能家居,无线传感网络,Java socket关键词

目录

1绪论.............................................................1

1.1物联网智能家居系统概述......................................1

1.1.1物联网智能家居系统开发背景............................1

1.1.2物联网智能家居系统意义................................2

1.1.3物联网智能家居系统现状................................2

1.2论文的结构..................................................3

2系统开发工具.....................................................4

2.1ZigBee技术.................................................4

2.1.1ZgBee特点.............................................5

2.1.2ZigBee技术的优势......................................6

2.2无线传感器网络..............................................7

2.3Java socket双机通信模块...............................................7

3需求分析.........................................................9

3.1实际业务工作流程............................................9

3.2设计目标...................................................10

3.3设计特点...................................................10

3.4设计原则...................................................11

3.5功能需求...................................................11

4系统设计........................................................13

4.1传感器节点WSN网络模块设计.................................13

4.2嵌入式服务器终端模块设计...................................15

4.3Java socket双机通信模块设计..........................................20

5结束语..........................................................25

附录

1绪论

随着人们生活水平的提高和科技的发展,家居智能化已成为一种必然趋势而深入千家万户。家居智能化是利用计算机、通信、网络、电力自动化、信息、结构化布线、无线等技术将所有不同的设备应用和综合功能互连于一体的系统。它以住宅为平台,兼备建筑、网络家电、通信、家电设备自动化、远程医疗、家庭办公、娱乐等功能,集系统、结构、服务、管理为一体的安全、便利、舒适、节能、娱乐、高效、环保的居住环境。

1.1物联网智能家居系统概述

这个章节主要分三个部分介绍:物联网智能家居系统的开发背景,开发意义和应用现状。

1.1.1物联网智能家居系统开发背景

2009年1月,IBM公司提出了“智慧地球”的理念;2009年8月,温家宝在中科院无锡高新微纳传感网工程技术研发中心考察时,提出了“感知中国”。物联网被预言为继计算机、互联网与移动通信网之后的世界信息产业第三次浪潮,一时间很多人预见到了一场新的技术革命。现代社会努力创造着舒适的环境,空调的出现让人们得到了舒畅的体验。在使用空调时,人们出现了两种心态,有的人怕浪费电,在家里没人的时候把空调关掉,可是回到家时却不得不面对冷冰冰或热烘烘的情况;也有的人为了舒适一直开着空调,长时间地让空调运转既费电又影响使用寿命。进入新世纪,我国人民的物质文化生活水平不断提高,移动通信

的飞速发展给人们的生活注入新鲜血液,丰富了人们的生活。众所周知,越来越多的人拥有自己的手机,而我国移动网络的铺建将使我们更好地在移动网络的世界里遨游,如果能够通过手机来远程控制家里的空调,让人们在到家之前把家里的空调打开,当我们迈进家门时,舒适的温度会使我们的心情更加愉悦。在互联网已经普及的今天,互联网已经联系起了每一个人,随着各种消费电子的智能化,还有无线传感器的迅速发展,人们想到了是否可以用网络将每一个物体都联系起来,以实现对物体的智能化识别、定位、跟踪、监控和管理。这样就形成了一种新的网络,被称为物联网。物联网的核心仍然是互联网,通过各种有线和无线网络与互联网融合,将物体的信息实时准确地传递出去。而从20世纪80年代开始,随着大量采用电子技术的家用电器面世,直到现在,经过了30年的发展,家用电器已经普及,而且具有了很高的智能化。这时人们便开始追寻一种更加智能的家庭管理方式,希望实现安保,防灾,家电一体化控制,这就是智能家居的原型。对于物联网的出现,大大加快了智能家居的发展。在国家大力推动工业化与信息化两化融合的大背景下,物联网将是家居行业乃至更多行业信息化过程中一个比较现实的突破口。一旦物联网大规模普及,无数的物品需要加装更加小巧智能的传感器,用于家居设备的传感器与电子标签及配套的接口装置数量将大大超过目前的手机数量,物联网是下一个超过万亿的行业。

1.1.2物联网智能家居系统意义

社会经济的发展,信息化程度的不断提高,人们生活节秦的不断加快,使人们对居家环境智能化的程度也提出了更高的要求。当人们离开自已的居住环境时,如何获取家中的环境信息,已成为一种现实需求,基于Internet与GSM网

成为可选择的发展方向。利用互联网传输信息具有信息量大、直观等优势,但目前实现成本相对较高,阻碍其进入普通家庭。近年来,短消息业务(SMS)作为GSM的一种增值服务,随着GSM网络覆盖范围的不断扩大,得到了迅速发展,它具有传输速度快,费用低,不占用语音通信通道等优点,本系统重在研究基于SMS短信业务,一种操作方便、经济、实用、可扩展性好的智能家居控制系统。

物联网智能家居产品融合自动化控制系统、计算机网络系统和网络通讯技术于一体,将各种家庭设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、网络家电等)通过智能家庭网络联网实现自动化,通过宽带和无线网络,可以实现对家庭设备的远程操控。与普通家居相比,智能家居不仅提供舒适宜人且高品位的家庭生活空间,实现更智能的家庭安防系统;还将家居环境由原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交互功能。物联网中的无线传感器应用对家庭的智能防灾,灯光控制,以及家电联网都提供了一种很好的解决办法。而且使用Java socket双机通信模块,可以将家庭中的突发事件信息告知户主,并且进行智能报警。这样就极大降低了家庭意外灾难的损失。

1.1.3物联网智能家居系统现状

智能家居是利用微处理电子技术,来集成或控制家中的电子电器产品或系统。家庭网络是在家庭范围内(可扩展至邻居、小区)将PC、家电、安全系统、照明系统和广域网相连接的一种新技术。网络家电是将普通家用电器利用数字技术、网络技术和智能控制技术设计改进的新型家电产品。网络家电是一种价格低廉、操作简便、实用性强、带有PC主要功能的家电产品。物联网智能家居现在

处于起步阶段,由于智能家居受产品生产厂家的限制,在短时间内还没有统一的标准协议,所以一般都是一个厂家单独做系统研发的。智能家居产品大规模批量化生产还需要时间加之协议不统一,随之带来的就是产品成本相对较高。国内从事智能家居行业的生产厂家鱼龙混杂,良莠不齐,有独立从事智能家居系统的生产企业,有家电行业兼做智能家居系统,有安防企业兼做智能家居系统的,还有运营商也参与到智能家居行业的,各自的出发点不同,所以生产出的产品也就各不相同产品质量参差不齐,影响了消费者对智能家居产品的信任;再者智能家居行业的售后服务水平较低,智能家居系统相对比较复杂,系统之间的关联性较大,出问题的几率相对较高,这时候如果售后服务不能到位的话则会严重影响客户对智能家居产品的满意度。这些问题严重制约了智能家居行业的发展。所以目前在中国只有少部分用于试点研究安装,真正用于生活的还不多见。

1.2论文的结构

论文的结构主要分四个部分:1.绪论。主要介绍物联网智能家居的背景、意义、现状。2.系统开发工具。主要介绍系统设计需要的技术工具。3.需求分析。主要介绍系统功能需求性。4.系统设计。主要介绍系统各个部分设计。

2系统开发工具

该部分主要介绍系统所采用的技术及开发工具,涉及,采用的架构ZigBee技术的模块、无线传感器网络(WSN)、Java socket双机通信模块等。

2.1ZigBee技术

无线传感器技术是目前无线通信领域内研究的一个热点技术,它综合了传感器技术、嵌入式计算技术、现代网络及无线通信技术、分布式信息处理技术等,能够通过各类集成化的微型传感器协作地实时监测、感知和采集各种环境或监测对象的信息,通过嵌入式系统对信息进行处理,并通过随机自组织无线通信网络以多跳中继方式将所感知的信息传送到用户终端。所谓传感器网络是由大量部署在一定区域内的、具有无线通信与计算能力的微小传感器节点通过自组织方式构成的能根据环境自主完成指定任务的分布式智能化网络系统。传感器网络的节点间距离很短,一般采用多跳(multi-hop)的无线通信方式通信。传感器网络可以在独立的环境下运行,也可以通过网关连接到互联网,使用户远程访问[4]。ZigBee技术译为紫蜂技术,是一个有关组网、安全和应用软件方面的新型传感器网络,被称作IEEE802.15.4(ZigBee)技术标准在标准化方面,IEEE802.15.4工作组主要负责制定物理层和MAC层的协议,其余协议主要参照和采用现有的标准,高层应用、测试和市场推广等方面的工作将由ZigBee联盟负责。其结构简单、低功耗、低速率、低成本和可靠性高的双向无线网络通信技术,主要适合于自动控制领域,可以嵌入各种设备中,同时支持地理定位功能。完整的ZigBee协议套件由高层应用层、应用会聚层、网络层、数据链路层和物理层组成。其协议如图2-1所示:

应用层汇聚层网络层LLC数据链路层MAC物理层

图2-1IEEE802.15.4协议架构

物理层分别是2.4GHz物理层和868/915MHz物理层,它们都基于

DSSS(DirectSequenceSpreadSpectrum,直接序列扩频)技术,使用相同的物理层数

据包格式,区别在于工作频率、调制技术、扩频码片长度和传输速率。其中2.4GHz波段为全球统一的无需申请的ISM频段,有助于ZigBee设备的推广和生产成本的降低,该频段的物理层使用了16个信道、250kb/s的传输速率。数据链路层分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC)。LLC子层功能包括传输可靠性保障、数据包的分段与重组、数据包的顺序传输;MAC层通过

SSCS(Service—SpecificConvergenceSublayer,业务相关的会聚子层)协议能支持多种LLC标准,其功能包括设备间无线链路的建立、维护和拆除、确认模式的帧传送与接收、信道接入控制、帧校验、预留时隙管理和广播信息管理。网络层采用基于adhoc技术的网络协议,功能包括拓扑管理、MAC管理、路由管理和安全管理根据节点的不同角色,可分为全功能设备(FullFunctionDevice;FFD)与精简功能设备(ReducedFunctionDevice;RFD)。前者具备控制器(Controller)的功能,能够提供数据交换;后者电路较为简单且存储体容量较小,只能传送数据给FFD或从FFD接收数据。应用汇聚层负责把不同的应用映射到ZigBee网络层上,包括安全与鉴权、多个业务数据流的汇聚、设备发现和业务发现。应用层定义了各种类型的应用业务是协议栈的最上层用户。

2.1.1ZgBee特点

无线传感器网络(WSN)由大量的节点根据自组织网络的方式构成,一般节点通过各种方式大量部署在被感知对象内部或者附近。这些节点通过无线自组织传输网络,以协作的方式感知、采集和处理网络覆盖区域中的信息,可以实现对任意地点的信息在任意时间的采集、处理和分析[5]。无线传感器网络结构如图2-2所示(虚线表示无线链路,实线表示有线链路)。1.无中心。WSN没有严格的控制

中心,所有节点地位平等,是一个对等式网络。节点可以随时加入或离开网络,任何节点的故障不会影响整个网络的运行,具有很强的抗毁性。2.自组织。网络的布设和展开无需依赖于任何预设的网络设施,节点通过分层协议和分布式算法协调各自的行为,节点开机后就可以快速、自动地组成一个独立的网络。3.动态拓扑。WSN是一个动态的网络,节点可以随处移动;一个节点可能会因为电池能量耗尽或其它故障,退出网络运行,也可能由于工作的需要而被添加到网络中。ZigBee会根据网络的拓扑结构随时发生变化,因此网络应该具有动态拓扑组织功能。4.节点数量众多,分布密集。WSN节点数量大、分布范围广。这样的无线传感器网络具备一定的软、硬件健壮性和容错性。

2.1.2ZigBee技术的优势

1.低功耗。在低耗电待机模式下,2节5号干电池可支持1个节点工作6-24个月,甚至更长。这是ZigBee的突出优势。相比较,蓝牙能工作数周、WiFi可工作数小时。2.低成本。通过大幅简化协议(不到蓝牙的1/10)降低了对通信控制器的要求,按预测分析,以8051的8位微控制器测算,全功能的主节点需要32KB代码,子功能节点少至4KB代码,而且ZigBee免协议专利费。3.低速率。ZigBee工作在250kbps的通讯速率,满足低速率传输数据的应用需求。4.近距离。传输范围一般介于10~100m之间,在增加RF发射功率后,亦可增加到1-3km。这指的是相邻节点间的距离。如果通过路由和节点间通信的接力,传输距离将可以更远。5.短时延。ZigBee的响应速度较快,一般从睡眠转入工作状态只需15ms,节点连接进入网络只需30ms,进一步节省了电能。相比较,蓝牙需要3-10s、WiFi需要3s。6.高容量。ZigBee可采用星状、片状和网状网络结构,由一个主

节点管理若干子节点,最多一个主节点可管理254个子节点;同时主节点还可由上一层网络节点管理,最多可组成65000个节点的大网。7.高安全。ZigBee提供了三级安全模式,包括无安全设定、使用接入控制清单(ACL)防止非法获取数据以及采用高级加密标准(AES128)的对称密码,以灵活确定其安全属性。8.免执照频段。采用直接序列扩频在工业科学医疗2.4GHz(全球)(ISM)频段。ZigBee的这些特点使之最适合作为传感器网络的标准。

2.2无线传感器网络

无线传感器网络(WirelessSensorNetwork,简称WSN)就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网络系统,其目的是协作地感知、采集和处理网络覆盖区域中被感知对象的信息,并发送给观察者。传感器、感知对象和观察者构成了无线传感器网络的三个要素。随着微机电系统(Micro-Electro-MechanismSystem,简称MEMS)、片上系统(SOC,SystemonChip)、无线通信和低功耗嵌入式技术的飞速发展,孕育出无线传感器网络(WirelessSensorNetworks,WSN),并以其低功耗、低成本、分布式和自组织的特点带来了信息感知的一场变革。无线传感器网络就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳自组织网络。很多人都认为,这项技术的重要性可与因特网相媲美:正如因特网使得计算机能够访问各种数字信息而可以不管其保存在什么地方,传感器网络将能扩展人们与现实世界进行远程交互的能力。它甚至被人称为一种全新类型的计算机系统,这就是因为它区别于过去硬件的可到处散布的特点以及集体分析能力。然而从很多方面来说,现在的无线传感器网络就如同远在1970年的因特网,那时

因特网仅仅连接了不到200所大学和军事实验室,并且研究者还在试验各种通讯协议和寻址方案。而现在,大多数传感器网络只连接了不到100个节点,更多的节点以及通讯线路会使其变得十分复杂难缠而无法正常工作。另外一个原因是单个传感器节点的价格目前还并不低廉,而且电池寿命在最好的情况下也只能维持几个月。不过这些问题并不是不可逾越的,一些无线传感器网络的产品已经上市,并且具备引人入胜的功能的新产品也会在几年之内出现。无线传感器网络所具有的众多类型的传感器,可探测包括地震、电磁、温度、湿度、噪声、光强度、压力、土壤成分、移动物体的大小、速度和方向等周边环境中多种多样的现象。基于MEMS的微传感技术和无线联网技术为无线传感器网络赋予了广阔的应用前景。这些潜在的应用领域可以归纳为:军事、航空、反恐、防爆、救灾、环境、医疗、保健、家居、工业、商业等领域。

2.3Java socket双机通信模块

利用Java Sock实现双机通信

摘要:Socket(套接字)是一种基于TCP/IP的编程接口。它采用客户/服务器通信机制,使客户端和服务器端通过Socket接口在网络上实现连接和数据交换。它提供了一系列系统调用,使用户可以方便地实现TCP和UDP等多种网络协议的通信。它使用户可以在网络协议上工作而不必对该网络协议有非常深入的了解。这样编写的程序可被迅速移植到任何支持Socket的网络系统中去。

本文通过主要利用Java Socket来实现双机通信,实现一个简单的服务器,客户端实时通讯工具。并对Java Socket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。

关键词:套接字、 SocketServer类、客户机/服务器模式

1 理论基础

1.1 套接字通信

套接字(Socket)是网络通信的基本单元操作,又被称作端口,通常用来实现客户方向和服务器的连接。网上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一个端都建立一个Socket,通过对Socket的读/写操作实现网络通信功能。套接字是网络通信的一个标准。套接字分为以下三种类型:

(1)流套接字

这是最常用的套接字类型,TCP/IP协议中的TCP协议用此类接口,它提供面向连接的(建立虚电路),无差错的、发送先后顺序一致的,包长度不限和非重复的网络信包传输。

(2)数据报套接字

TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。

(3)原始数据包套接字

提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或者用于协议教隐蔽的功能。

所有Socket通信程序的基本结构都是一样的,主要有创建Socket、打开连接到Socket的输入流和输出流、按照一定的协议对Socket进行读写操作。关闭Socket这四个步骤,通过这四个步骤可以完成一般的Socket通信。

1.2 JAVA Sockets编程概述:

用Java语言编程实现Socket通信,其原理与使用其他语言基本相同,不同之处是:(1)java是跨平台的编程语言,所以用java编写的Socket通信程序可以工作在所有支持TCP/IP协议和java的软硬件平台上;(2)因为Java是面向对象的语言,所以在编程中需要使用一些与Socket有关的系统类,其中用于实现流Socket的类主要有:InetAddress类,Socket

类,ServerSocket类。

InetAddress类的对象用来保存IP地址,Socket类的对象用来创建Socket通信的客户端,Socket通信的服务器端则有ServerSocket类的对象来实现,用上述几个类就可以很方便的生成用户自己的TCP/IP通信程序。这几个类都属于Java.net包,大部分用来处理网络操作的系统类都包含在这个包中,所以用JAVA编写程序是,一般要在程序开始部分用import语句加载这个包,以便引入这些类。用JAVA语言编写Socket程序的过程就是创建和定义Socket类和ServerSocket类的子类的过程。

1.3 JAVA 有关概

1.3.1 Java中输入/输出流概念

过滤流DataInputStream 和DataOutputStream 除了分别作为

FilterInputStream 和FilterOutputStream的子类外,还分别实现了接口 DataInput 和DataOutput。接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean() readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble() DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream 可以向所连接的输出流写入基本类型的数据。

1.3.2 Java语言

Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。

(1) 简单性

Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。 Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。

(2) 面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量

和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。

Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。

Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

(3) 多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。

(4) 分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。

(5) 体系结构中立

Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。Java为了做到结构中立,除生成机器无关的字节码外,还制定了完全统一的语言文本,如Java的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整型总是64位。 为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。

java.lang: 一般的语言包。其中包括用于字符串处理、多线程、异常处理和数字函数等的类,该包是实现Java程序运行平台的基本包

java.util: 实用工具包。其中包括哈希表、堆栈、时间和日期等

java.io: 基于流模型的输入/输出包。该包用统一的流模型实现了各种格式的输入/输出,包括文件系统、网络和设备的输入/输出等

java.net: 网络包。该包支持TCP/IP协议,其中提供了socket、URL和WWW的编程接口

java.awt: 抽象窗口工具集。其中实现了可以跨平台的图形用户界面组件,包括窗口、菜单、滚动条和对话框等

java.applet: 支持applet程序设计的基本包

(6) 安全性

用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

1.3.3与Socket有关的java类:

1.InetAddress类:

用来保存因特网上的IP地址的类,它含有很多成员变量和方法,其中比较常用的有getLocalHost,getByName和getAllByName,利用它们都可以创建该类的对象,获得一个Java程序操纵、处理的IP地址。例如下面的程序段可以根据主机名获取其IP地址:

try{

InetAddress remoteOP=InetAddress.getByName(“www.hpu.edu.cn”); }catch(UnknownHostException excpt){

System.err.println(“Unknown host:”+excpt);

}

2.Socket类:

用来实现TCP/IP通信的端口套接字类,所有希望通过socket来完成与远程主机进行TCP/IP连接和通信的程序,都必须创建一个socket类的对象。这个类对象的作用首先是根据远程主机的IP地址和端口号在本地主机创建一个与远程主机的联接;其次,在连接建立后,本地主机程序就可以使用这个类对象提供的输入/输出通道与远程主机实现通信。

当一个socket被创建时,它所指定的连接也将同时被建立并打开,若连接成功,调用这个socket对象的有关方法就可以实现与远程主机的读写通信操作;若连接失败,则构造函数会抛出例外,表示没有成功创建对象。

Socket 对象的方法getInputStream()和getOutputStream()用来实现程序通过Socket 对远程方的读写。调用getInputStream()方法返回一个抽象的getInputStream对象,可以从远程方读取二进制数据;调用getOutputStream()方法可以返回一个抽象的getOutputStream对象,实现远程方的写入操作。由于getInputStream和getOutputStream都只是对二进制的原始数据的读写,而不能实现对复杂数据结构的直接操作,所以在实际应用中一般要先对

getInputStream()和getOutputStream()方法返回的输入/输出流作加工变换后再使用。当与Socket的通信结束时,可用调用close()方法来关闭连接。另外,调用getLocalPort()和getInetAddress() 方法还可获得Socket连接的服务器

的有关服务器端口号和IP地址等有关信息。

3.ServerSocket 类

它是java 用来实现TCP/IP通信服务器端程序的主要机制。当一个

ServerSocket对象被创建时,程序在本机的指定端口处提供服务并开始监听可能的来自客户端的服务请求。当一个客户请求连接并被接受时,服务器程序将创建一个Socket对象与远程的客户机相连,实现读写通信操作。

该类的accept()方法用来等待并接受客户机的一个连接,当这个方法被调用时,服务器进程或线程将处于阻塞状态,直至它监听到有一个客户进程提出服务请求,并与之成功连接,这时方法将返回一个新创建的服务器端的Socket对象,这个对象已经与远程客户机连接成功,并可以与客户机的Socket实现读写操作。若服务器可同时提供的连接数超过一个,则服务器程序应该创建一个新的线程来完成与客户机的通信,而保留原有监听线程继续准备接受其它客户机的服务请求。当ServerSocket对象要结束它在特定端口上提供的服务时,可以调用close()方法实现。

2客户机/服务器通信的实现:

2.1服务器端的开发

(1)服务器端实现对主机某个端口不断监听,并不断接受客户端的连接请求,当受到连接后打印客户的的信息并向客户端完成一次服务。

(2)使用readUTF方法的DataInputStream处理流提供的方法,功能为读取满足UTF格式的字符串。并使用writeUTF方法为DataOutputStream处理流提供的方法,功能为写出满足UTF 格式的字符。一般在网络中发生消息都在发送端用writeUTF方法写,在接收端使用readUTF方法读取,这样程序的兼容性强,不容易受到乱码。

2.2客户端的开发

(1)客户端用于对某个固定IP的服务器进行连接,接着向服务器发送一条消息,最后接受服务器的返回消息并打印。

(2)为了与服务器对应,发送消息还要使用DataInputStream的writeUTF方法。同时应该注意的两边的首发顺序是互逆的,服务器现售后发,客户端先发后收。

程序附后!!!!!

3需求分析

随着社会经济结构、家庭人口结构以及信息技术的发展变化,人们对家居环境的安全性、舒适性、效率性、透明性提出了更高的要求。同时越来越多的家庭要求家居产品不仅要具备简单的智能,更要求整个系统在功能扩展、外延以及服务方面能够做到简单、方便、轻松、安全。很显然我们的家居生活需要改变,智能家居系统提供广泛的信息交互功能,优化居住环境,帮助人们有效地利用网络的便捷性各种实现了对家居环境的控制。智能家居产品为家居环境、家电设备提供一个共享的接入中心,实现对家庭环境及其设备的智能管理、远程管理、集中管理和资源共享。随着网络科技的高速发展,在可以预见的未来,在智能化住宅中,以宽带网络将家里的电脑、电视机、家电、安防系统等连成一体的自主控制、扩展、享用的工作、学习、娱乐家庭综合信息服务平台。

3.1实际业务工作流程

整个系统主要由三部分组成:传感器节点WSN网络,嵌入式服务器终端,Java socket双机通信模块及其他装置。其中传感器节点网络中包含了多个无线传感器节点,每个节点都是由一个传感器模块加上一个ZigBee通信模块组成的。传感器进行实时的检测,检测到的数据通过ZigBee通信模块传到节点控制,节点控制处理收集到的信息,做出相应的操作处理。手机终端可以远程通过GPRS网络,连接到嵌入式服务器终端中心控制台,中心控制台处理连接的信息,通过ZIgBee模块发送处理信息到相应的ZigBee模块,节点控制台收到指令作出相应的处理。系统流程如图3-1。

图3-1整体框架图

3.2设计目标

由于住宅设计情况比较多种多样性,信号的覆盖采取整体设计,局部进行设计实施,由于每个房间的封闭性,可能会引起信号的衰减,采取信号覆盖区域连接,各个区域内的信号能够连通进行信号的传输,系统使用的无线信号传输频率是2.4GHz,在此频率的无线传感网络为全球统一的,无需申请的ISM频段,同时可以对无线信号进行加密,保证了无线传输数据的安全性。根据物联网智能家居系统的需求进行开发设计,主要实现如下设计目标:1.当用户需要远程控制的空调开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与空调相连接的控制器上,通过控制器实现了对空调的控制。2.当用户需要远程控制窗帘的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与窗帘电机相连接的控制器上,通过控制器实现了对窗帘的控制。3.当用户需要远程控制窗户的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与窗户连接的控制器上,通过控制器实现了对窗户的控制。4.当我们需要远程控制电视机的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令

发送到与电视机相连接的控制器上,通过控制器实现了对电视机的控制。5.当我们需要远程控制空气加湿器的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与空气加湿器相连接的控制器上,通过控制器实现了对空气加湿器的控制。

3.3设计特点

1.它的对象是结构和特性完全相异的各种家用电器,相互之间兼容性比较差,电器之间的数据共享比较困难。

2.家电的信息量小但对实时性要求较高,必须针对当时的家庭环境进行实时的调整。3.家电运行时所处环境有很大差异,对系统的抗干扰性和稳定性要求较高。4.家庭用户对于价格要求比较高,必须把组建网络的费用降低到一定程度,才能被广泛认可和接受。5.家电完成的功能各有不同,需要达到的智能水平也有很大的差异,要针对不同的功能要求,设计不同家电的智能水平(比如说,如果让电灯也共享Internet资源,显然没有必要,但是家中的烟雾设备则需要较高的智能水平)。6.从用户的角度来说,用户需要简化家电的操作过程,统一家电的操作方法因此,组建智能家庭网络时需要考虑的问题有很多。

3.4设计原则

基于设计的特点,列出了系统设计原则:1.标准化:家庭自动化产品应当依照国际上流行的相关协议进行设计,充分保证各厂家产品间的兼容性和相互操作能力。2.开放性:目前,在智能住宅、家庭自动化、家电网络领域尚处于一家一户自

行开发的局面,而实际上用户不可能全部使用同一厂家生产的产品,这将极大阻碍互联互通和长远发展。因此,家庭自动化系统应该具有开放的协议、统一的接口。3.模块化:采用模块化的设计可以适应各种场合的需要,保障用户的利益并允许系统的逐步到位。模块之间遵循一定的协议,可以相互通讯和协调。4.实用性:人们购买家庭自动化产品是为了享有更加便利舒适的生活,绝非追逐潮流的概念。5.普及化:家庭自动化系统应该面向低成本、高性能的目标设计,住户对价格较为敏感,所以智能住宅采用的技术要较为经济。同时,家庭自动化系统应该能最大程度兼容用户原有电器设备,保护用户投资。6.简洁易用:高科技带来的应该是一种享受而绝不是一种负担。好的家庭自动化产品应该简便易用、用户界面友好,并且不需要使用者花上太多的精力就能掌握。

3.5功能需求

对于家居生活环境,因每个人的不同,要求得也不尽相同。功能的设计要求主人能够远程设置家居环境,如图3-2。

1.主人可以通过手机设置空调温度。2.主人可以通过手机设置窗帘的开启和关闭。3.主人可以通过手机设置窗户的开启和关闭。4.主人可以通过手机设置电视的开关。

4系统设计

物联网智能家居要将各成体系,互不相连的子系统协调起来,就必须有一个兼容性强的中央家居处理平台,接受并处理控制设施发出的信息,然后传送信号给你希望控制的家电或者其他家居子系统。中央处理平台职能就是在家庭智能局

域网中,引导和规划家居子系统中的各种信号,有了它,你可以通过手持无线遥控设备来和家居子系统进行快速的沟通。中央家居处理平台还必须具有良好的扩展性能,以满足用户在使用过程中不断增长的需求点。目前已经出现的主流中央家居处理平台分为两类,其中一类平台是网关式中央家居处理平台。这种方式推出的家庭网关集成智能家居系统中,网关与中央家居处理平台组合,这种平台能够与家庭安全防范系统、家庭自动化系统,以及互联网结成一体,实现家电控制、娱乐、交流和信息分享等方面的智能化。第二种则直接利用家用电脑去控制各种家电设备。智能家居系统将家庭中各种与信息相关的通讯设备、家用电器和家庭保安装置,通过家庭总线技术连接到一个家庭智能化系统上进行集中的或异地的监视、控制和家庭事务性管理,并保持这些家庭设施与住宅环境的和谐与协调。这些功能都是通过智能家居系统中的家庭网络控制器未实现的,家庭网络控制器具有家庭总线系统、通过家庭总线系统提供各种服务功能、并和住宅以外的外部世界相通连。可以这样说,智能家居系统是智能住宅的核心。由此可见,智能家居系统在智能住宅中的重要地位。本系统的设计选择了第一种平台,主要是三个模块:传感器节点WSN网络模块,嵌入式服务器终端模块,Java socket双机通信模块及其他装置。

4.1传感器节点WSN网络模块设计

WSN模块主要是以AT89C51为核心处理器,使用多个I/O口进行传感器检测阵列的信号采集,其中包括温度、湿度、光线、烟雾有害气体等信号的检测,如烟雾传感器负责烟雾中有害气体的检测,烟雾传感器如图4-1。

烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡。当传

感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。所以系统采用烟雾传感器对家用的天然气、煤气、烟雾进行监控检测。气体烟雾感应器是这个模块的主要器件;U1BLM323运算放大器是把采集的信号放大,传输到ZigBee无线模块,运算放大器是延时作用,继电器是相当一个开关的作用,在这里只要有信号输出,继电器就闭合,其余的时间都是断开的,喇叭有报警的作用,PT2262是无线模块的芯片,是发送信号给中心控制器。通过传感器采集到的数据,由ZigBee无线模块传输到节点控制器,然后由红外发射芯片IR6721C芯片进行家电设备控制信号的发射,可以完成家庭内部控制和GPRS远程控制;使用通信串口连接无线数据传输芯片ZigBee网络模块,ZigBee网络模块是UART接口半双工无线传输模块。本文采用了加强型的ZigBee无线技术,符合工业标准应用的无线数据通信设备,可实现多设备间的数据透明传输;通过无线ZigBee进行组网通信,无线功能强大,具备中继路由和终端设备功能。WSN网络模块硬件结构框图如图4-2,WSN在家庭中的网络信号覆盖如图4-3。

图4-2WSN网络模块硬件结构框图

图4-3网络信号覆盖

4.2嵌入式服务器终端模块设计

嵌入式服务器终端模块硬件主要有中心控制器、GPRS模块和ZigBee网络模块。其中中心控制器是单片机,单片机为本系统的核心部件,它除了具备单片机最小系统的必备期间外,它的串口通过RS232电路与MC703模块通信,单片

机的P0口与显示器相连,P1口与键盘相连。P2口用各种控制及传感器的连接。GPRS模块采用华为的MC703模块如图4-4,该模块具有一路串口,波特率为115200bps,通过该路串口,该模块可以与单片机进行通信。另外,华为公司的MC703模块价格相对低廉,且支持部分标准AT命令,此外还支持华为公司拓展的命令,使用起来更加的灵活[7]。ZigBee网络模块可以方便用户使用各种移动智能终端,轻松控制任何基于ZigBee协议的产品,实现无线数据高速、安全、可靠传输。如图4-5为ZigBee无线网络模块。

图4-5MC703模块

图4-5无线网络模块

本系统采用ARM11S3C6410控制芯片为核心控制器,完成所有家庭内部数据的处理,包括数据的采集与控制命令的发出,是整个智能家居控制的核心,采用Linux嵌入式系统为家居总中心监控系统,能够自动运行、处理数据,通过串口管理、无线网络来控制各控制终端,并且中心控制器通过GPRS模块实现家庭系统与手机的通信,使用户可以通过短信方式实现家庭系统的远程控制[8]。服务器控制端硬件结构框图如图4-6。

图4-6服务器控制端硬件结构框图

整个系统以智能家居中心控制台做为信息的控制中心,负责各个模块的协调其中手机终端可以向主机发送查询与命令信息,空调控制模块与窗帘控制模块等为智能控制模块,具有单独的模块控制程序,它们向主机发送温湿度信息,同时分别接收主机发送的空调控制信号,主机通过程序查询的方式获取此信息。人体

感应模块与液化气因此系统中主泄露检测模块则只能向主机发送信号,主机通过中断方式获取其信息[9]。机的软件控制成为关键因素。WSN网络模块与嵌入式服务器终端模块通过基于ZigBee的无线网络完成通信,传输一个指令的数据包由以下几部分组成:起始编码bite[0][1],地址编码bite[2],数据类型编码bite[4],功能编码bite[5],效验编码bite[6],结束编码bite[7].每个编码1个字节,发送数据范围在0~255之间,不同家庭内部的起始编码都是惟一的,防止相互信号的干扰,每个接收终端在接收到数据后,都进行地址码判断是否为自己接收的数据包,是则接收,否则不接收,接收到数据包后,对数据要执行的功能进行校验,校验正确,则进行解码,并且在解码成功后通过ZigBee的无线网络发出一个确认接受码,中心控制器在接收到确认接收码后停止再次发生控制指令,否则间隔100ms再次发生相同指令,确保整个ZigBee的无线网络数据通信的准确性和完整性。每个智能终端在正确接收到中心控制器的控制信号后,必须根据信号完成相应家庭内部的控制工作,所以家电设备的控制信号都是由统一的嵌入式服务器终端模块外编码完成的。

整个模块的电路如图4-7。

图4-7电路原理图

主机的单片机采用ARM的ATmega128,具有4K的EPROM,4K的SRAM,支持8个外部中断,53个可编程I/O口[3],完全满足系统的硬件、软件设计要求。EPROM可编程存储器的引入便于以软件方式,在断电的情况下保存系统的状态变量,如各种模式开关状态变量。各个功能以模块的形式实现,各个模块的切换通过状态机的完成[11]。单片机的初始化数据设置:

voidmain(void){LCD_init();//LCD初始化Uart1_init();//串口初始化Device_init();//中断初始化LCD_Display();//液晶显示rF905_init();//rf905模块初始化

GSM_init();//GSM模块初始化EEPROM_READ(0x22,SysInforBuf);//在EPROM中读取系统状态信息state=SMS_Standby;//设定系统初始状态

while(1){switch(state){caseDehumidifier://自动抽湿状态

Dehumidifier_75();break;caseSMS_Standby://接收GSM模块回复信息

Receive_Check();break;caseSMS_CMGR://读取手机短信并处理

Receive_CMGR();break;caseSMS_CMGD://删除手机短信

break;caseSMS_CMGS://向手机发送短信

Receive_CMGS();break;caseSMS_Answer://读取手机来短信信息

Receive_Ans();break;default:break;}}}为了保证电路的可靠性,复位电路是必不可少的一部分,复位操作有手动复位和上电自动复位两种。如图4-8、图4-9所示的复位电路基本功能是:当系统上电时,提供复位信号,直到系统电源稳定撤销复位信号。为可靠起见,电源稳定后还要经一定的演示才撤销复位信号,以防止电源开关或电源插头分合过程中引起的抖动而影响复位。其中手动复位电路的工作原理:在单片机启动0.1S后,电容C两端的电压持续充电为5V,这时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。

图4-8上电复位电路图

0为总控制核心,通过GPRS进行远程数据的发送与处理,使用6410串 口与GPRS进行数据通信,可以将家庭内部数据信息发送给远离房间的主人手机,并可以通过主人手机发送的控制信息控制房间内家电设备。Java socket双机通信模块安装在智能家居控制器中,主要功能为通过GPRS网络连接到Internet网络,并主动与监控中心建立通信链路,进行双向数据通信。此部分采用的是华为MC703的模块接收和传送用户手机短信息。单片机对收到信息进行解释同时将处理结果通过ZigBee无线网络传给相应节点达到控制目的,实现外部网络对室内控制。在MC703的基带处理器上有一个综合SIM接口,他直接接线到主机接口(端到端连接器)用于连接到外部的SIM卡座。电路图如图4-10。这里接的SIM卡有6个引脚CCCLK,CCVCC,CCIO,CCRST,CCIN以及CCGND分别对应接在TC35i的第24到第29个引脚上。模块的连接器和SIM卡座的引脚之间的距离不要超过20cm,为了达到最佳的效果,在SIM支架下敷设一层铜隔离网,该层敷铜与SIM卡的CCGND引脚相连。CCVCC和CCGND之间的两个电容要离引脚尽量近,并且走线尽量阻抗低,以满足规范要求。单片机与键盘相连,可以通过键盘来向单片机发送数据。该单片机的振荡器的晶振为

11.0592MHz,数据传输率设置为9600b/s。单片机的复位键RESET为高电平时复位。1~14引脚为电源部分,其中l~5引脚为电源电压输入端VBATT+;6~10引脚为电源地GND;11~12引脚为充电端;13引脚为对外输出电压(供外部电路使用);14引脚ACCU/TEMP接负温度系数的热敏电阻;24~29引脚为SIM卡连接端;33~40引脚为语音接口用来接电话手柄。15、30、31和32引脚为控制部

分;15引脚为启动线IGT(Ignition)。当TC35i通电后必须给IGT一个大于100mV的低电平,模块才能启动。30引脚为RTCbackup;31引脚为掉电控制;32引脚为SYNC,16~23引脚为数据输入/输出端。Java socket双机通信模块设计采用了内嵌TCP/IP协议的G24GPRSOEM。该模块尺寸小,功耗低,便于集成。GPRS通信终端收发模块主要由G24模块、天线、SIM卡、相关的电平转换电路和RS232串口组成。其供电电压为5V,可采用USB端口供电;通过RS232串行口与智能家居控制器ARM进行通信。单片机与GSM模块采用串行异步通信接口,由于单片机与GSM模块工作电平不一致,二者之间要用电平转换电路连接。GSM模块通过I2C总线扩展了一个E2PROM存储器芯片AT24C64,其主要作用是存储手机发送的短消息。该芯片能够反复擦/写,能够持久保存数据,而且断电信息也不会丢失,这些特性正是存储数据所必需的。在单片机通过I2C总线扩展了一个Flash存储器,系统选用Am29F016D作为闪存(Flash),单片存储容量为2M字节,16位数据宽度,用于存放显字库信息。现在市场上大多数手机均支持

GSM07.05规定的AT指令集。该指令集是ETSI(欧洲通信技术委员会)发布的,其中包含了对SMS的控制。利用GSM手机的串行接口,单片机向手机发送一系列的AT命令,就能达到控制GSM模块接收SMS的目的。必须注意的是,用单片机实现时,编程必须注意它接收到的响应都是字符的ASCII码。收发模块采用AT指令操作,通过RS232串行口进行数据通信[12]。AT命令使计算机或终端与调制解调器通讯。可以按照自己的需要设置您的调制解调器,AT指令的所有命令行必须由ASCII字符―AT‖开始并由结束。字母

空格会被忽略,命令行的最多字符数为39(包括

图4-11AT常用指令

在输入一条命令期间,可以用退格键(backspace)改正除

AT+CMGF=0AT+CMGS=21其流程图如图4-12。

图4-12信息接收处理流程图

后面这一长串的数字就是PDU数据,它的长度为60位,扣掉前面短信中心的号码18位(即前9个字节不计数),同时除以2,得到21(字节长),填入―AT+CMGS=_‖;而PDU数据的具体含义如表4-1所示。通过上面的分析,由图表在这里可以能够看到这条短信的内容是―ktopen‖,通过7-bit编码编译成

―6B746F70656E‖。这样我们便可以在串口中将获得的数据发送出去,空调打开。整个数据处理都是要经过中心控制器的读取,分析,发送指令。系统的每个指令都可以同过嵌入式的指令方式,存储在单片机的存储芯片中,当无线手持设备远

程发送信息指令时,单片机芯片进行信息的读取,分析,处理,做出如指令需求的所相应的操作。

表4-1PDU格式说明表分段

[**************]6F411000B[1**********]876F500含义SMSC地址信息的长度SMSC地址格式(TON/NPI)SMSC地址基本参数(TP-MTI/VFP)消息基准值

(TP-MR)目标地址数字个数目标地址格式(TON/NPI)目标地址(TP-DA)协议标识(TP-PID)用户信息编码方式(TP-DCS)00007-bit编码048-bit编码

0800066B746F70656EUCS2编码5分钟实际长度6个字节―ktopen‖7-bit编码说明共8个八位字节(包括91)用国际格式号码(在前面加‗+‘)[1**********]74,补‗F‘凑成偶数个发送,TP-VF用相对格式0共11位,不包括补足的‗F‘用国际格式号码(在前面加‗+‘)[1**********]75,补‗F‘凑成偶数个是普通GSM类型,点到点方式

有效期(TP-VP)短信长度(TP-UDL)短信内容(TP-UD)

5结束语

目前,在无线传输技术种类多样,各有优势。ZigBee作为一种新出现的无线通信技术,以其协议简单、成本低、功耗小、组网容易等特点,在家用系统控制、楼宇自动化、工业监控领域具有广阔的市场空间,本文主要以ZigBee为主要的无线通信,这在家居行业的技术发展和应用方面的研究具有前沿性和实用性。通过GSM网络实现了手机终端与智能家居系统远距离双向通讯,突破了对传统有线距离的约束,达到远距离接收、发送通讯信息,并且具有很高的模块化程序和可扩展性,智能化程度高。物联网智能家居系统是嵌入式控制终端系统,

ZigBee无线传感网络和GPRS通信。模块的嵌入式智能产品。它很好的改善了家居的环境,它也包含了影音娱乐等功能,满足家庭的娱乐需求。由于时间和资源有限,这里并没有将自己所有的想法都付诸实践。其实物联网和智能家居都是很大的项目,它们涉及了太多的内容,这个系统只是实现了其中的很小一部分功能。而且,由于知识水平所限,在系统设计当中也必然存在着很多漏洞和不足。不过,我始终觉得这是一个很好的项目,很具有实际意义,如果有可能,我会继续将它完善,做得更好。

附录

嵌入式系统的搭建:

在PC机上安装Ubuntu10.04。然后下载并解压交叉编译链

arm-linux-gcc-4.4.3。从Qt官网下载linux版本的Qt开发框架,这里使用4.7.2版本,下载的安装包文件为qt-everywhere-opensource-src-4.7.2.tar.gz。然后使用交叉编译链对Qt源码进行交叉编译,最后使用makeinstall命令来安装Qt。我们再从Qt官网下载linux版本的QtCreator2.1,然后安装它,用它来进行Qt程序的开发。嵌入式终端软件平台的搭建,包含以下几步。第一,烧写BIOS。进入到―EELiod/Jflashmm‖目录下,输入―tarxzvfJflash–Xsbase270.tar.gz‖解压Jflash工具。进入到―Jflash-Xbase270‖目录下,输入―./jflashmmboot‖下载―‖Bootloader。第二,烧写Linux的内核。先在PC的Linux的根目录下建立一个―tftpboot‖目录。把―EELiod/image‖目录下的―zImage和rootfs.img‖文件复制到―tftpboot‖目录下。打开minicom并且重启目标板,按下数字键―3‖选择第三个选项,把内核映像文件zImage文件下载到板子上。第三,烧写文件系统。按下数字键―5‖选择选项5,

把文件系统的映像文件rootfs.img下载到目标平台上。

MC703模块收发短信程序:

#include#include#defineucharunsignedchar#defineuintunsignedint#defineRxIn90//定义接收的数组长度为90ucharcodeAT[]=

ucharcodeATE[]=

ucharcodeAT_CSCA[]=

ucharcodeAT_CMGR[]=

ucharcodeAT_CMGS[]=

ucharcodeAT_CMGD[]=

ucharcodesuccessfully[]=

ucharAT_SendNumber[25];//用来存储发送短信号码指令ucharnumberbuf[3];//用来保存短信条数ucharidataSystemBuf[RxIn];//储存出口接收数据

ucharCommandBuf[6];//用来储存指令

ucharidatastate[17];//用来存储IO口状态ucharidatastate1[17];//用来存储IO口状态ucharRx=0;uinttemp;//记录状态uchartemp1;//用于记录P0口状态

uchartemp2;//用于记录P2口状态bitcheck=0;//查询标志位bitreceiveready=0;//接收短信标志位bitsendready=0;//发送短信准备标志位bitsend=0;//发送短信标志位

bitflag=0;//指令标志位sbitP3_7=P3^7;//启动GSM的启动线连

IGTsbitrealy0=P0^0;//继电器1sbitkey1=P2^0;//开关1sbitkey2=P2^1;//开关2函数voidDelay_ms(uinti);实现功能:进行毫秒延时。

voidDelay_ms(uinti){unsignedintj;for(;i>0;i--){for(j=0;j

voidStart_GSM(void);实现功能:对TC35进行启动。开启TC35功能详述:单片机上的P3_7管脚是与TC35的IGT管脚相连;需要启动TC35,必须在15脚(IGT)加时长至少为100ms的低电平信号,且该信号下降沿时间小于1ms。启动后,15脚的信号应保持高电平.:

voidStart_GSM(void){P3_7=0;Delay_ms(1000);P3_7=1;Delay_ms(1000);}函数voidsendchar(ucharch);实现功能:发送一字节数据。

voidsendchar(ucharch){SBUF=ch;while(TI==0);TI=0;}函数

voidsendstring(uchar*p);实现功能:通过串口发送字符串。

voidsendstring(uchar*p){while(*p){sendchar(*p);p++;}sendchar(0x0D);sendchar(0x0A);}函数voidreceive(void)interrupt4using1;实现功能:通过串口接收数据。

3程序的实现

3.1服务器端的实现

3.1.1服务器端用一个类Sa来实现,创建一个ServerSocket类的对象,实现对端口9999的不断监听,直到受到客户端的信息。

3.1.2代码如下:

import java.io.*;

import java.net.*;

import java.util.*;

public class Sa

{

public static void main(String[] args)

{

int count =0;

//String s=

try{

ServerSocket server=new ServerSocket(9999);

//打印提示信息

System.out.println(

//服务器循环接受客户断请求

//if(!s.equals(

while(true){

Socket sc=server.accept();

//获取当前连接的输入流,并使用处理流进行封装

DataInputStream din=new DataInputStream(sc.getInputStream());

//获取当前连接的输出流,并使用处理流惊喜封装

DataOutputStream dout=new DataOutputStream(sc.getOutputStream()); //打印客户端的信息

System.out.println(

System.out.print(

System.out.println(

System.out.println(

//向客户端发送回应信息

dout.writeUTF(sc.getInetAddress()+

//关闭流

} //BufferedReader in=new BufferedReader(new InputStreamReader(din.read())); //s=in.readLine(); //s=din.readUTF(); din.close(); dout.close(); sc.close(); }// else // server.close(); } catch(Exception e){ e.printStackTrace(); } }

3.1.3运行结果:

3.2客户端的实现:

3.2.1客户端主要用Sb类来实现对服务器端的连接功能,创建一个Socket对象实现对服务器的连接。

3.2.2代码如下:

import java.io.*;

import java.net.*;

public class Sb

{

public static void main(String[] args){

String m1,m2;

m1=

m2=

try{

//创建连接到服务器的Socket对象

while(!m2.equals(

Socket sc=new Socket(m1,9999);

DataInputStream din=new DataInputStream(sc.getInputStream());

DataOutputStream dout=new DataOutputStream(sc.getOutputStream());

System.out.println(

BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

m2=input.readLine();

dout.writeUTF(m2);

System.out.println(din.readUTF());

din.close();

dout.close();

sc.close();

}

}

catch(Exception e){

e.printStackTrace();

}

} }

3.2.3运行结果如下:

4打包发布

(1) 要发布应用程序,需要将应用程序打包。使用jar.exe,可以把应用程序中涉及的类

和图片压缩为一个jar文件,这样可以便利发布程序。

(2) 首先,编写一个清单文件,名为manifest.mf,其代码如下:

Manifest-Version: 1.0

Created-By: 1.6.0_06 (Sun Microsystems Inc.)

Main-class: Sb

将清单文件保存到.class所在文件中。使用命令:jar cfm Sa.jar manifest.mf *.class 运行后出现Sa.jar文件,

(3) 编写批处理文件,用来打开Sa.jar文件

Cj.bat

@echo off

title 【服务器系统】

color 0a

java -jar Tc.jar

pause

Cj1.bat

@echo off

title 【客户端程序】

color 0a

java -jar Tc1.jar

pause

结束语

本文通过主要利用Java Socket来实现双机通信,实现一个简单的服务器,客户端聊天通信工具。并对Java Socket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。

通过本次课程设计,让我学到了很多东西,对java socket有了进一步的了解,同时也让我学会了开发系统的结构理念及一些基本步骤。不足之处就是有些东西我掌握的还不够牢固和不够深入,我以后还须加倍努力。

由于时间的仓促,加之水平有限,本课程设计中的缺点和不足之处在所难免,敬请老师给予批评指正!

课程设计报告

2014—2015学年第 一学期

课程名称

设计题目 智能家居(控制与通信的实现)

2014年9月3日

基于物联网的智能家居系统设计

摘要

物联网作为朝阳的产业,被列为国家五大新兴战略性产业之一。物联网是通过射频识别、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网络。智能家居是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设备集成形成智能家居系统的居住环境。物联网智能家居通过家居智能管理系统的设备来实现家庭安全、舒适、信息交互与通信的能力。本文结合了物联网和智能家居的相关技术,将传感器、控制器等设备通过无线技术连接和采集数据信息的处理,实现了使用传感器采集室内温度,光线等数据,在嵌入式终端中进行信息的读取和处理,做出相应的操作。整个过程涉及到基于ZigBee的无线传感网络和利用Java socket实现双机通信的应用。该设计分为以下几个部分:

一、首先分析课题来源与市场需求,然后对整个系统进行了概述;二、对该系统的框架进行介绍;三、对整个系统的软硬件设计进行详细的介绍。本论文设计是基于物联网和智能家居相结合的背景下,实现了对家居环境中的光线,温度,烟雾等因素的实时监测,并通过利用Java socket实现双机通信和管理系统作出相应的控制,以提升家居环境的安全性、舒适性、便利性。

关键词:物联网,智能家居,无线传感网络,Java socket关键词

目录

1绪论.............................................................1

1.1物联网智能家居系统概述......................................1

1.1.1物联网智能家居系统开发背景............................1

1.1.2物联网智能家居系统意义................................2

1.1.3物联网智能家居系统现状................................2

1.2论文的结构..................................................3

2系统开发工具.....................................................4

2.1ZigBee技术.................................................4

2.1.1ZgBee特点.............................................5

2.1.2ZigBee技术的优势......................................6

2.2无线传感器网络..............................................7

2.3Java socket双机通信模块...............................................7

3需求分析.........................................................9

3.1实际业务工作流程............................................9

3.2设计目标...................................................10

3.3设计特点...................................................10

3.4设计原则...................................................11

3.5功能需求...................................................11

4系统设计........................................................13

4.1传感器节点WSN网络模块设计.................................13

4.2嵌入式服务器终端模块设计...................................15

4.3Java socket双机通信模块设计..........................................20

5结束语..........................................................25

附录

1绪论

随着人们生活水平的提高和科技的发展,家居智能化已成为一种必然趋势而深入千家万户。家居智能化是利用计算机、通信、网络、电力自动化、信息、结构化布线、无线等技术将所有不同的设备应用和综合功能互连于一体的系统。它以住宅为平台,兼备建筑、网络家电、通信、家电设备自动化、远程医疗、家庭办公、娱乐等功能,集系统、结构、服务、管理为一体的安全、便利、舒适、节能、娱乐、高效、环保的居住环境。

1.1物联网智能家居系统概述

这个章节主要分三个部分介绍:物联网智能家居系统的开发背景,开发意义和应用现状。

1.1.1物联网智能家居系统开发背景

2009年1月,IBM公司提出了“智慧地球”的理念;2009年8月,温家宝在中科院无锡高新微纳传感网工程技术研发中心考察时,提出了“感知中国”。物联网被预言为继计算机、互联网与移动通信网之后的世界信息产业第三次浪潮,一时间很多人预见到了一场新的技术革命。现代社会努力创造着舒适的环境,空调的出现让人们得到了舒畅的体验。在使用空调时,人们出现了两种心态,有的人怕浪费电,在家里没人的时候把空调关掉,可是回到家时却不得不面对冷冰冰或热烘烘的情况;也有的人为了舒适一直开着空调,长时间地让空调运转既费电又影响使用寿命。进入新世纪,我国人民的物质文化生活水平不断提高,移动通信

的飞速发展给人们的生活注入新鲜血液,丰富了人们的生活。众所周知,越来越多的人拥有自己的手机,而我国移动网络的铺建将使我们更好地在移动网络的世界里遨游,如果能够通过手机来远程控制家里的空调,让人们在到家之前把家里的空调打开,当我们迈进家门时,舒适的温度会使我们的心情更加愉悦。在互联网已经普及的今天,互联网已经联系起了每一个人,随着各种消费电子的智能化,还有无线传感器的迅速发展,人们想到了是否可以用网络将每一个物体都联系起来,以实现对物体的智能化识别、定位、跟踪、监控和管理。这样就形成了一种新的网络,被称为物联网。物联网的核心仍然是互联网,通过各种有线和无线网络与互联网融合,将物体的信息实时准确地传递出去。而从20世纪80年代开始,随着大量采用电子技术的家用电器面世,直到现在,经过了30年的发展,家用电器已经普及,而且具有了很高的智能化。这时人们便开始追寻一种更加智能的家庭管理方式,希望实现安保,防灾,家电一体化控制,这就是智能家居的原型。对于物联网的出现,大大加快了智能家居的发展。在国家大力推动工业化与信息化两化融合的大背景下,物联网将是家居行业乃至更多行业信息化过程中一个比较现实的突破口。一旦物联网大规模普及,无数的物品需要加装更加小巧智能的传感器,用于家居设备的传感器与电子标签及配套的接口装置数量将大大超过目前的手机数量,物联网是下一个超过万亿的行业。

1.1.2物联网智能家居系统意义

社会经济的发展,信息化程度的不断提高,人们生活节秦的不断加快,使人们对居家环境智能化的程度也提出了更高的要求。当人们离开自已的居住环境时,如何获取家中的环境信息,已成为一种现实需求,基于Internet与GSM网

成为可选择的发展方向。利用互联网传输信息具有信息量大、直观等优势,但目前实现成本相对较高,阻碍其进入普通家庭。近年来,短消息业务(SMS)作为GSM的一种增值服务,随着GSM网络覆盖范围的不断扩大,得到了迅速发展,它具有传输速度快,费用低,不占用语音通信通道等优点,本系统重在研究基于SMS短信业务,一种操作方便、经济、实用、可扩展性好的智能家居控制系统。

物联网智能家居产品融合自动化控制系统、计算机网络系统和网络通讯技术于一体,将各种家庭设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、网络家电等)通过智能家庭网络联网实现自动化,通过宽带和无线网络,可以实现对家庭设备的远程操控。与普通家居相比,智能家居不仅提供舒适宜人且高品位的家庭生活空间,实现更智能的家庭安防系统;还将家居环境由原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交互功能。物联网中的无线传感器应用对家庭的智能防灾,灯光控制,以及家电联网都提供了一种很好的解决办法。而且使用Java socket双机通信模块,可以将家庭中的突发事件信息告知户主,并且进行智能报警。这样就极大降低了家庭意外灾难的损失。

1.1.3物联网智能家居系统现状

智能家居是利用微处理电子技术,来集成或控制家中的电子电器产品或系统。家庭网络是在家庭范围内(可扩展至邻居、小区)将PC、家电、安全系统、照明系统和广域网相连接的一种新技术。网络家电是将普通家用电器利用数字技术、网络技术和智能控制技术设计改进的新型家电产品。网络家电是一种价格低廉、操作简便、实用性强、带有PC主要功能的家电产品。物联网智能家居现在

处于起步阶段,由于智能家居受产品生产厂家的限制,在短时间内还没有统一的标准协议,所以一般都是一个厂家单独做系统研发的。智能家居产品大规模批量化生产还需要时间加之协议不统一,随之带来的就是产品成本相对较高。国内从事智能家居行业的生产厂家鱼龙混杂,良莠不齐,有独立从事智能家居系统的生产企业,有家电行业兼做智能家居系统,有安防企业兼做智能家居系统的,还有运营商也参与到智能家居行业的,各自的出发点不同,所以生产出的产品也就各不相同产品质量参差不齐,影响了消费者对智能家居产品的信任;再者智能家居行业的售后服务水平较低,智能家居系统相对比较复杂,系统之间的关联性较大,出问题的几率相对较高,这时候如果售后服务不能到位的话则会严重影响客户对智能家居产品的满意度。这些问题严重制约了智能家居行业的发展。所以目前在中国只有少部分用于试点研究安装,真正用于生活的还不多见。

1.2论文的结构

论文的结构主要分四个部分:1.绪论。主要介绍物联网智能家居的背景、意义、现状。2.系统开发工具。主要介绍系统设计需要的技术工具。3.需求分析。主要介绍系统功能需求性。4.系统设计。主要介绍系统各个部分设计。

2系统开发工具

该部分主要介绍系统所采用的技术及开发工具,涉及,采用的架构ZigBee技术的模块、无线传感器网络(WSN)、Java socket双机通信模块等。

2.1ZigBee技术

无线传感器技术是目前无线通信领域内研究的一个热点技术,它综合了传感器技术、嵌入式计算技术、现代网络及无线通信技术、分布式信息处理技术等,能够通过各类集成化的微型传感器协作地实时监测、感知和采集各种环境或监测对象的信息,通过嵌入式系统对信息进行处理,并通过随机自组织无线通信网络以多跳中继方式将所感知的信息传送到用户终端。所谓传感器网络是由大量部署在一定区域内的、具有无线通信与计算能力的微小传感器节点通过自组织方式构成的能根据环境自主完成指定任务的分布式智能化网络系统。传感器网络的节点间距离很短,一般采用多跳(multi-hop)的无线通信方式通信。传感器网络可以在独立的环境下运行,也可以通过网关连接到互联网,使用户远程访问[4]。ZigBee技术译为紫蜂技术,是一个有关组网、安全和应用软件方面的新型传感器网络,被称作IEEE802.15.4(ZigBee)技术标准在标准化方面,IEEE802.15.4工作组主要负责制定物理层和MAC层的协议,其余协议主要参照和采用现有的标准,高层应用、测试和市场推广等方面的工作将由ZigBee联盟负责。其结构简单、低功耗、低速率、低成本和可靠性高的双向无线网络通信技术,主要适合于自动控制领域,可以嵌入各种设备中,同时支持地理定位功能。完整的ZigBee协议套件由高层应用层、应用会聚层、网络层、数据链路层和物理层组成。其协议如图2-1所示:

应用层汇聚层网络层LLC数据链路层MAC物理层

图2-1IEEE802.15.4协议架构

物理层分别是2.4GHz物理层和868/915MHz物理层,它们都基于

DSSS(DirectSequenceSpreadSpectrum,直接序列扩频)技术,使用相同的物理层数

据包格式,区别在于工作频率、调制技术、扩频码片长度和传输速率。其中2.4GHz波段为全球统一的无需申请的ISM频段,有助于ZigBee设备的推广和生产成本的降低,该频段的物理层使用了16个信道、250kb/s的传输速率。数据链路层分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC)。LLC子层功能包括传输可靠性保障、数据包的分段与重组、数据包的顺序传输;MAC层通过

SSCS(Service—SpecificConvergenceSublayer,业务相关的会聚子层)协议能支持多种LLC标准,其功能包括设备间无线链路的建立、维护和拆除、确认模式的帧传送与接收、信道接入控制、帧校验、预留时隙管理和广播信息管理。网络层采用基于adhoc技术的网络协议,功能包括拓扑管理、MAC管理、路由管理和安全管理根据节点的不同角色,可分为全功能设备(FullFunctionDevice;FFD)与精简功能设备(ReducedFunctionDevice;RFD)。前者具备控制器(Controller)的功能,能够提供数据交换;后者电路较为简单且存储体容量较小,只能传送数据给FFD或从FFD接收数据。应用汇聚层负责把不同的应用映射到ZigBee网络层上,包括安全与鉴权、多个业务数据流的汇聚、设备发现和业务发现。应用层定义了各种类型的应用业务是协议栈的最上层用户。

2.1.1ZgBee特点

无线传感器网络(WSN)由大量的节点根据自组织网络的方式构成,一般节点通过各种方式大量部署在被感知对象内部或者附近。这些节点通过无线自组织传输网络,以协作的方式感知、采集和处理网络覆盖区域中的信息,可以实现对任意地点的信息在任意时间的采集、处理和分析[5]。无线传感器网络结构如图2-2所示(虚线表示无线链路,实线表示有线链路)。1.无中心。WSN没有严格的控制

中心,所有节点地位平等,是一个对等式网络。节点可以随时加入或离开网络,任何节点的故障不会影响整个网络的运行,具有很强的抗毁性。2.自组织。网络的布设和展开无需依赖于任何预设的网络设施,节点通过分层协议和分布式算法协调各自的行为,节点开机后就可以快速、自动地组成一个独立的网络。3.动态拓扑。WSN是一个动态的网络,节点可以随处移动;一个节点可能会因为电池能量耗尽或其它故障,退出网络运行,也可能由于工作的需要而被添加到网络中。ZigBee会根据网络的拓扑结构随时发生变化,因此网络应该具有动态拓扑组织功能。4.节点数量众多,分布密集。WSN节点数量大、分布范围广。这样的无线传感器网络具备一定的软、硬件健壮性和容错性。

2.1.2ZigBee技术的优势

1.低功耗。在低耗电待机模式下,2节5号干电池可支持1个节点工作6-24个月,甚至更长。这是ZigBee的突出优势。相比较,蓝牙能工作数周、WiFi可工作数小时。2.低成本。通过大幅简化协议(不到蓝牙的1/10)降低了对通信控制器的要求,按预测分析,以8051的8位微控制器测算,全功能的主节点需要32KB代码,子功能节点少至4KB代码,而且ZigBee免协议专利费。3.低速率。ZigBee工作在250kbps的通讯速率,满足低速率传输数据的应用需求。4.近距离。传输范围一般介于10~100m之间,在增加RF发射功率后,亦可增加到1-3km。这指的是相邻节点间的距离。如果通过路由和节点间通信的接力,传输距离将可以更远。5.短时延。ZigBee的响应速度较快,一般从睡眠转入工作状态只需15ms,节点连接进入网络只需30ms,进一步节省了电能。相比较,蓝牙需要3-10s、WiFi需要3s。6.高容量。ZigBee可采用星状、片状和网状网络结构,由一个主

节点管理若干子节点,最多一个主节点可管理254个子节点;同时主节点还可由上一层网络节点管理,最多可组成65000个节点的大网。7.高安全。ZigBee提供了三级安全模式,包括无安全设定、使用接入控制清单(ACL)防止非法获取数据以及采用高级加密标准(AES128)的对称密码,以灵活确定其安全属性。8.免执照频段。采用直接序列扩频在工业科学医疗2.4GHz(全球)(ISM)频段。ZigBee的这些特点使之最适合作为传感器网络的标准。

2.2无线传感器网络

无线传感器网络(WirelessSensorNetwork,简称WSN)就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网络系统,其目的是协作地感知、采集和处理网络覆盖区域中被感知对象的信息,并发送给观察者。传感器、感知对象和观察者构成了无线传感器网络的三个要素。随着微机电系统(Micro-Electro-MechanismSystem,简称MEMS)、片上系统(SOC,SystemonChip)、无线通信和低功耗嵌入式技术的飞速发展,孕育出无线传感器网络(WirelessSensorNetworks,WSN),并以其低功耗、低成本、分布式和自组织的特点带来了信息感知的一场变革。无线传感器网络就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳自组织网络。很多人都认为,这项技术的重要性可与因特网相媲美:正如因特网使得计算机能够访问各种数字信息而可以不管其保存在什么地方,传感器网络将能扩展人们与现实世界进行远程交互的能力。它甚至被人称为一种全新类型的计算机系统,这就是因为它区别于过去硬件的可到处散布的特点以及集体分析能力。然而从很多方面来说,现在的无线传感器网络就如同远在1970年的因特网,那时

因特网仅仅连接了不到200所大学和军事实验室,并且研究者还在试验各种通讯协议和寻址方案。而现在,大多数传感器网络只连接了不到100个节点,更多的节点以及通讯线路会使其变得十分复杂难缠而无法正常工作。另外一个原因是单个传感器节点的价格目前还并不低廉,而且电池寿命在最好的情况下也只能维持几个月。不过这些问题并不是不可逾越的,一些无线传感器网络的产品已经上市,并且具备引人入胜的功能的新产品也会在几年之内出现。无线传感器网络所具有的众多类型的传感器,可探测包括地震、电磁、温度、湿度、噪声、光强度、压力、土壤成分、移动物体的大小、速度和方向等周边环境中多种多样的现象。基于MEMS的微传感技术和无线联网技术为无线传感器网络赋予了广阔的应用前景。这些潜在的应用领域可以归纳为:军事、航空、反恐、防爆、救灾、环境、医疗、保健、家居、工业、商业等领域。

2.3Java socket双机通信模块

利用Java Sock实现双机通信

摘要:Socket(套接字)是一种基于TCP/IP的编程接口。它采用客户/服务器通信机制,使客户端和服务器端通过Socket接口在网络上实现连接和数据交换。它提供了一系列系统调用,使用户可以方便地实现TCP和UDP等多种网络协议的通信。它使用户可以在网络协议上工作而不必对该网络协议有非常深入的了解。这样编写的程序可被迅速移植到任何支持Socket的网络系统中去。

本文通过主要利用Java Socket来实现双机通信,实现一个简单的服务器,客户端实时通讯工具。并对Java Socket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。

关键词:套接字、 SocketServer类、客户机/服务器模式

1 理论基础

1.1 套接字通信

套接字(Socket)是网络通信的基本单元操作,又被称作端口,通常用来实现客户方向和服务器的连接。网上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一个端都建立一个Socket,通过对Socket的读/写操作实现网络通信功能。套接字是网络通信的一个标准。套接字分为以下三种类型:

(1)流套接字

这是最常用的套接字类型,TCP/IP协议中的TCP协议用此类接口,它提供面向连接的(建立虚电路),无差错的、发送先后顺序一致的,包长度不限和非重复的网络信包传输。

(2)数据报套接字

TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。

(3)原始数据包套接字

提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或者用于协议教隐蔽的功能。

所有Socket通信程序的基本结构都是一样的,主要有创建Socket、打开连接到Socket的输入流和输出流、按照一定的协议对Socket进行读写操作。关闭Socket这四个步骤,通过这四个步骤可以完成一般的Socket通信。

1.2 JAVA Sockets编程概述:

用Java语言编程实现Socket通信,其原理与使用其他语言基本相同,不同之处是:(1)java是跨平台的编程语言,所以用java编写的Socket通信程序可以工作在所有支持TCP/IP协议和java的软硬件平台上;(2)因为Java是面向对象的语言,所以在编程中需要使用一些与Socket有关的系统类,其中用于实现流Socket的类主要有:InetAddress类,Socket

类,ServerSocket类。

InetAddress类的对象用来保存IP地址,Socket类的对象用来创建Socket通信的客户端,Socket通信的服务器端则有ServerSocket类的对象来实现,用上述几个类就可以很方便的生成用户自己的TCP/IP通信程序。这几个类都属于Java.net包,大部分用来处理网络操作的系统类都包含在这个包中,所以用JAVA编写程序是,一般要在程序开始部分用import语句加载这个包,以便引入这些类。用JAVA语言编写Socket程序的过程就是创建和定义Socket类和ServerSocket类的子类的过程。

1.3 JAVA 有关概

1.3.1 Java中输入/输出流概念

过滤流DataInputStream 和DataOutputStream 除了分别作为

FilterInputStream 和FilterOutputStream的子类外,还分别实现了接口 DataInput 和DataOutput。接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean() readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble() DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream 可以向所连接的输出流写入基本类型的数据。

1.3.2 Java语言

Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。

(1) 简单性

Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。 Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。

(2) 面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量

和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。

Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。

Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

(3) 多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。

(4) 分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。

(5) 体系结构中立

Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。Java为了做到结构中立,除生成机器无关的字节码外,还制定了完全统一的语言文本,如Java的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整型总是64位。 为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。

java.lang: 一般的语言包。其中包括用于字符串处理、多线程、异常处理和数字函数等的类,该包是实现Java程序运行平台的基本包

java.util: 实用工具包。其中包括哈希表、堆栈、时间和日期等

java.io: 基于流模型的输入/输出包。该包用统一的流模型实现了各种格式的输入/输出,包括文件系统、网络和设备的输入/输出等

java.net: 网络包。该包支持TCP/IP协议,其中提供了socket、URL和WWW的编程接口

java.awt: 抽象窗口工具集。其中实现了可以跨平台的图形用户界面组件,包括窗口、菜单、滚动条和对话框等

java.applet: 支持applet程序设计的基本包

(6) 安全性

用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

1.3.3与Socket有关的java类:

1.InetAddress类:

用来保存因特网上的IP地址的类,它含有很多成员变量和方法,其中比较常用的有getLocalHost,getByName和getAllByName,利用它们都可以创建该类的对象,获得一个Java程序操纵、处理的IP地址。例如下面的程序段可以根据主机名获取其IP地址:

try{

InetAddress remoteOP=InetAddress.getByName(“www.hpu.edu.cn”); }catch(UnknownHostException excpt){

System.err.println(“Unknown host:”+excpt);

}

2.Socket类:

用来实现TCP/IP通信的端口套接字类,所有希望通过socket来完成与远程主机进行TCP/IP连接和通信的程序,都必须创建一个socket类的对象。这个类对象的作用首先是根据远程主机的IP地址和端口号在本地主机创建一个与远程主机的联接;其次,在连接建立后,本地主机程序就可以使用这个类对象提供的输入/输出通道与远程主机实现通信。

当一个socket被创建时,它所指定的连接也将同时被建立并打开,若连接成功,调用这个socket对象的有关方法就可以实现与远程主机的读写通信操作;若连接失败,则构造函数会抛出例外,表示没有成功创建对象。

Socket 对象的方法getInputStream()和getOutputStream()用来实现程序通过Socket 对远程方的读写。调用getInputStream()方法返回一个抽象的getInputStream对象,可以从远程方读取二进制数据;调用getOutputStream()方法可以返回一个抽象的getOutputStream对象,实现远程方的写入操作。由于getInputStream和getOutputStream都只是对二进制的原始数据的读写,而不能实现对复杂数据结构的直接操作,所以在实际应用中一般要先对

getInputStream()和getOutputStream()方法返回的输入/输出流作加工变换后再使用。当与Socket的通信结束时,可用调用close()方法来关闭连接。另外,调用getLocalPort()和getInetAddress() 方法还可获得Socket连接的服务器

的有关服务器端口号和IP地址等有关信息。

3.ServerSocket 类

它是java 用来实现TCP/IP通信服务器端程序的主要机制。当一个

ServerSocket对象被创建时,程序在本机的指定端口处提供服务并开始监听可能的来自客户端的服务请求。当一个客户请求连接并被接受时,服务器程序将创建一个Socket对象与远程的客户机相连,实现读写通信操作。

该类的accept()方法用来等待并接受客户机的一个连接,当这个方法被调用时,服务器进程或线程将处于阻塞状态,直至它监听到有一个客户进程提出服务请求,并与之成功连接,这时方法将返回一个新创建的服务器端的Socket对象,这个对象已经与远程客户机连接成功,并可以与客户机的Socket实现读写操作。若服务器可同时提供的连接数超过一个,则服务器程序应该创建一个新的线程来完成与客户机的通信,而保留原有监听线程继续准备接受其它客户机的服务请求。当ServerSocket对象要结束它在特定端口上提供的服务时,可以调用close()方法实现。

2客户机/服务器通信的实现:

2.1服务器端的开发

(1)服务器端实现对主机某个端口不断监听,并不断接受客户端的连接请求,当受到连接后打印客户的的信息并向客户端完成一次服务。

(2)使用readUTF方法的DataInputStream处理流提供的方法,功能为读取满足UTF格式的字符串。并使用writeUTF方法为DataOutputStream处理流提供的方法,功能为写出满足UTF 格式的字符。一般在网络中发生消息都在发送端用writeUTF方法写,在接收端使用readUTF方法读取,这样程序的兼容性强,不容易受到乱码。

2.2客户端的开发

(1)客户端用于对某个固定IP的服务器进行连接,接着向服务器发送一条消息,最后接受服务器的返回消息并打印。

(2)为了与服务器对应,发送消息还要使用DataInputStream的writeUTF方法。同时应该注意的两边的首发顺序是互逆的,服务器现售后发,客户端先发后收。

程序附后!!!!!

3需求分析

随着社会经济结构、家庭人口结构以及信息技术的发展变化,人们对家居环境的安全性、舒适性、效率性、透明性提出了更高的要求。同时越来越多的家庭要求家居产品不仅要具备简单的智能,更要求整个系统在功能扩展、外延以及服务方面能够做到简单、方便、轻松、安全。很显然我们的家居生活需要改变,智能家居系统提供广泛的信息交互功能,优化居住环境,帮助人们有效地利用网络的便捷性各种实现了对家居环境的控制。智能家居产品为家居环境、家电设备提供一个共享的接入中心,实现对家庭环境及其设备的智能管理、远程管理、集中管理和资源共享。随着网络科技的高速发展,在可以预见的未来,在智能化住宅中,以宽带网络将家里的电脑、电视机、家电、安防系统等连成一体的自主控制、扩展、享用的工作、学习、娱乐家庭综合信息服务平台。

3.1实际业务工作流程

整个系统主要由三部分组成:传感器节点WSN网络,嵌入式服务器终端,Java socket双机通信模块及其他装置。其中传感器节点网络中包含了多个无线传感器节点,每个节点都是由一个传感器模块加上一个ZigBee通信模块组成的。传感器进行实时的检测,检测到的数据通过ZigBee通信模块传到节点控制,节点控制处理收集到的信息,做出相应的操作处理。手机终端可以远程通过GPRS网络,连接到嵌入式服务器终端中心控制台,中心控制台处理连接的信息,通过ZIgBee模块发送处理信息到相应的ZigBee模块,节点控制台收到指令作出相应的处理。系统流程如图3-1。

图3-1整体框架图

3.2设计目标

由于住宅设计情况比较多种多样性,信号的覆盖采取整体设计,局部进行设计实施,由于每个房间的封闭性,可能会引起信号的衰减,采取信号覆盖区域连接,各个区域内的信号能够连通进行信号的传输,系统使用的无线信号传输频率是2.4GHz,在此频率的无线传感网络为全球统一的,无需申请的ISM频段,同时可以对无线信号进行加密,保证了无线传输数据的安全性。根据物联网智能家居系统的需求进行开发设计,主要实现如下设计目标:1.当用户需要远程控制的空调开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与空调相连接的控制器上,通过控制器实现了对空调的控制。2.当用户需要远程控制窗帘的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与窗帘电机相连接的控制器上,通过控制器实现了对窗帘的控制。3.当用户需要远程控制窗户的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与窗户连接的控制器上,通过控制器实现了对窗户的控制。4.当我们需要远程控制电视机的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令

发送到与电视机相连接的控制器上,通过控制器实现了对电视机的控制。5.当我们需要远程控制空气加湿器的开关时,只要用手机发送指定命令的短信息,通过GPRS模块的接收,并将短信息翻译成为可以识别的命令传输给家庭控制器,控制器经过处理,通过ZigBee模块的无线传输将命令发送到与空气加湿器相连接的控制器上,通过控制器实现了对空气加湿器的控制。

3.3设计特点

1.它的对象是结构和特性完全相异的各种家用电器,相互之间兼容性比较差,电器之间的数据共享比较困难。

2.家电的信息量小但对实时性要求较高,必须针对当时的家庭环境进行实时的调整。3.家电运行时所处环境有很大差异,对系统的抗干扰性和稳定性要求较高。4.家庭用户对于价格要求比较高,必须把组建网络的费用降低到一定程度,才能被广泛认可和接受。5.家电完成的功能各有不同,需要达到的智能水平也有很大的差异,要针对不同的功能要求,设计不同家电的智能水平(比如说,如果让电灯也共享Internet资源,显然没有必要,但是家中的烟雾设备则需要较高的智能水平)。6.从用户的角度来说,用户需要简化家电的操作过程,统一家电的操作方法因此,组建智能家庭网络时需要考虑的问题有很多。

3.4设计原则

基于设计的特点,列出了系统设计原则:1.标准化:家庭自动化产品应当依照国际上流行的相关协议进行设计,充分保证各厂家产品间的兼容性和相互操作能力。2.开放性:目前,在智能住宅、家庭自动化、家电网络领域尚处于一家一户自

行开发的局面,而实际上用户不可能全部使用同一厂家生产的产品,这将极大阻碍互联互通和长远发展。因此,家庭自动化系统应该具有开放的协议、统一的接口。3.模块化:采用模块化的设计可以适应各种场合的需要,保障用户的利益并允许系统的逐步到位。模块之间遵循一定的协议,可以相互通讯和协调。4.实用性:人们购买家庭自动化产品是为了享有更加便利舒适的生活,绝非追逐潮流的概念。5.普及化:家庭自动化系统应该面向低成本、高性能的目标设计,住户对价格较为敏感,所以智能住宅采用的技术要较为经济。同时,家庭自动化系统应该能最大程度兼容用户原有电器设备,保护用户投资。6.简洁易用:高科技带来的应该是一种享受而绝不是一种负担。好的家庭自动化产品应该简便易用、用户界面友好,并且不需要使用者花上太多的精力就能掌握。

3.5功能需求

对于家居生活环境,因每个人的不同,要求得也不尽相同。功能的设计要求主人能够远程设置家居环境,如图3-2。

1.主人可以通过手机设置空调温度。2.主人可以通过手机设置窗帘的开启和关闭。3.主人可以通过手机设置窗户的开启和关闭。4.主人可以通过手机设置电视的开关。

4系统设计

物联网智能家居要将各成体系,互不相连的子系统协调起来,就必须有一个兼容性强的中央家居处理平台,接受并处理控制设施发出的信息,然后传送信号给你希望控制的家电或者其他家居子系统。中央处理平台职能就是在家庭智能局

域网中,引导和规划家居子系统中的各种信号,有了它,你可以通过手持无线遥控设备来和家居子系统进行快速的沟通。中央家居处理平台还必须具有良好的扩展性能,以满足用户在使用过程中不断增长的需求点。目前已经出现的主流中央家居处理平台分为两类,其中一类平台是网关式中央家居处理平台。这种方式推出的家庭网关集成智能家居系统中,网关与中央家居处理平台组合,这种平台能够与家庭安全防范系统、家庭自动化系统,以及互联网结成一体,实现家电控制、娱乐、交流和信息分享等方面的智能化。第二种则直接利用家用电脑去控制各种家电设备。智能家居系统将家庭中各种与信息相关的通讯设备、家用电器和家庭保安装置,通过家庭总线技术连接到一个家庭智能化系统上进行集中的或异地的监视、控制和家庭事务性管理,并保持这些家庭设施与住宅环境的和谐与协调。这些功能都是通过智能家居系统中的家庭网络控制器未实现的,家庭网络控制器具有家庭总线系统、通过家庭总线系统提供各种服务功能、并和住宅以外的外部世界相通连。可以这样说,智能家居系统是智能住宅的核心。由此可见,智能家居系统在智能住宅中的重要地位。本系统的设计选择了第一种平台,主要是三个模块:传感器节点WSN网络模块,嵌入式服务器终端模块,Java socket双机通信模块及其他装置。

4.1传感器节点WSN网络模块设计

WSN模块主要是以AT89C51为核心处理器,使用多个I/O口进行传感器检测阵列的信号采集,其中包括温度、湿度、光线、烟雾有害气体等信号的检测,如烟雾传感器负责烟雾中有害气体的检测,烟雾传感器如图4-1。

烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡。当传

感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。所以系统采用烟雾传感器对家用的天然气、煤气、烟雾进行监控检测。气体烟雾感应器是这个模块的主要器件;U1BLM323运算放大器是把采集的信号放大,传输到ZigBee无线模块,运算放大器是延时作用,继电器是相当一个开关的作用,在这里只要有信号输出,继电器就闭合,其余的时间都是断开的,喇叭有报警的作用,PT2262是无线模块的芯片,是发送信号给中心控制器。通过传感器采集到的数据,由ZigBee无线模块传输到节点控制器,然后由红外发射芯片IR6721C芯片进行家电设备控制信号的发射,可以完成家庭内部控制和GPRS远程控制;使用通信串口连接无线数据传输芯片ZigBee网络模块,ZigBee网络模块是UART接口半双工无线传输模块。本文采用了加强型的ZigBee无线技术,符合工业标准应用的无线数据通信设备,可实现多设备间的数据透明传输;通过无线ZigBee进行组网通信,无线功能强大,具备中继路由和终端设备功能。WSN网络模块硬件结构框图如图4-2,WSN在家庭中的网络信号覆盖如图4-3。

图4-2WSN网络模块硬件结构框图

图4-3网络信号覆盖

4.2嵌入式服务器终端模块设计

嵌入式服务器终端模块硬件主要有中心控制器、GPRS模块和ZigBee网络模块。其中中心控制器是单片机,单片机为本系统的核心部件,它除了具备单片机最小系统的必备期间外,它的串口通过RS232电路与MC703模块通信,单片

机的P0口与显示器相连,P1口与键盘相连。P2口用各种控制及传感器的连接。GPRS模块采用华为的MC703模块如图4-4,该模块具有一路串口,波特率为115200bps,通过该路串口,该模块可以与单片机进行通信。另外,华为公司的MC703模块价格相对低廉,且支持部分标准AT命令,此外还支持华为公司拓展的命令,使用起来更加的灵活[7]。ZigBee网络模块可以方便用户使用各种移动智能终端,轻松控制任何基于ZigBee协议的产品,实现无线数据高速、安全、可靠传输。如图4-5为ZigBee无线网络模块。

图4-5MC703模块

图4-5无线网络模块

本系统采用ARM11S3C6410控制芯片为核心控制器,完成所有家庭内部数据的处理,包括数据的采集与控制命令的发出,是整个智能家居控制的核心,采用Linux嵌入式系统为家居总中心监控系统,能够自动运行、处理数据,通过串口管理、无线网络来控制各控制终端,并且中心控制器通过GPRS模块实现家庭系统与手机的通信,使用户可以通过短信方式实现家庭系统的远程控制[8]。服务器控制端硬件结构框图如图4-6。

图4-6服务器控制端硬件结构框图

整个系统以智能家居中心控制台做为信息的控制中心,负责各个模块的协调其中手机终端可以向主机发送查询与命令信息,空调控制模块与窗帘控制模块等为智能控制模块,具有单独的模块控制程序,它们向主机发送温湿度信息,同时分别接收主机发送的空调控制信号,主机通过程序查询的方式获取此信息。人体

感应模块与液化气因此系统中主泄露检测模块则只能向主机发送信号,主机通过中断方式获取其信息[9]。机的软件控制成为关键因素。WSN网络模块与嵌入式服务器终端模块通过基于ZigBee的无线网络完成通信,传输一个指令的数据包由以下几部分组成:起始编码bite[0][1],地址编码bite[2],数据类型编码bite[4],功能编码bite[5],效验编码bite[6],结束编码bite[7].每个编码1个字节,发送数据范围在0~255之间,不同家庭内部的起始编码都是惟一的,防止相互信号的干扰,每个接收终端在接收到数据后,都进行地址码判断是否为自己接收的数据包,是则接收,否则不接收,接收到数据包后,对数据要执行的功能进行校验,校验正确,则进行解码,并且在解码成功后通过ZigBee的无线网络发出一个确认接受码,中心控制器在接收到确认接收码后停止再次发生控制指令,否则间隔100ms再次发生相同指令,确保整个ZigBee的无线网络数据通信的准确性和完整性。每个智能终端在正确接收到中心控制器的控制信号后,必须根据信号完成相应家庭内部的控制工作,所以家电设备的控制信号都是由统一的嵌入式服务器终端模块外编码完成的。

整个模块的电路如图4-7。

图4-7电路原理图

主机的单片机采用ARM的ATmega128,具有4K的EPROM,4K的SRAM,支持8个外部中断,53个可编程I/O口[3],完全满足系统的硬件、软件设计要求。EPROM可编程存储器的引入便于以软件方式,在断电的情况下保存系统的状态变量,如各种模式开关状态变量。各个功能以模块的形式实现,各个模块的切换通过状态机的完成[11]。单片机的初始化数据设置:

voidmain(void){LCD_init();//LCD初始化Uart1_init();//串口初始化Device_init();//中断初始化LCD_Display();//液晶显示rF905_init();//rf905模块初始化

GSM_init();//GSM模块初始化EEPROM_READ(0x22,SysInforBuf);//在EPROM中读取系统状态信息state=SMS_Standby;//设定系统初始状态

while(1){switch(state){caseDehumidifier://自动抽湿状态

Dehumidifier_75();break;caseSMS_Standby://接收GSM模块回复信息

Receive_Check();break;caseSMS_CMGR://读取手机短信并处理

Receive_CMGR();break;caseSMS_CMGD://删除手机短信

break;caseSMS_CMGS://向手机发送短信

Receive_CMGS();break;caseSMS_Answer://读取手机来短信信息

Receive_Ans();break;default:break;}}}为了保证电路的可靠性,复位电路是必不可少的一部分,复位操作有手动复位和上电自动复位两种。如图4-8、图4-9所示的复位电路基本功能是:当系统上电时,提供复位信号,直到系统电源稳定撤销复位信号。为可靠起见,电源稳定后还要经一定的演示才撤销复位信号,以防止电源开关或电源插头分合过程中引起的抖动而影响复位。其中手动复位电路的工作原理:在单片机启动0.1S后,电容C两端的电压持续充电为5V,这时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。

图4-8上电复位电路图

0为总控制核心,通过GPRS进行远程数据的发送与处理,使用6410串 口与GPRS进行数据通信,可以将家庭内部数据信息发送给远离房间的主人手机,并可以通过主人手机发送的控制信息控制房间内家电设备。Java socket双机通信模块安装在智能家居控制器中,主要功能为通过GPRS网络连接到Internet网络,并主动与监控中心建立通信链路,进行双向数据通信。此部分采用的是华为MC703的模块接收和传送用户手机短信息。单片机对收到信息进行解释同时将处理结果通过ZigBee无线网络传给相应节点达到控制目的,实现外部网络对室内控制。在MC703的基带处理器上有一个综合SIM接口,他直接接线到主机接口(端到端连接器)用于连接到外部的SIM卡座。电路图如图4-10。这里接的SIM卡有6个引脚CCCLK,CCVCC,CCIO,CCRST,CCIN以及CCGND分别对应接在TC35i的第24到第29个引脚上。模块的连接器和SIM卡座的引脚之间的距离不要超过20cm,为了达到最佳的效果,在SIM支架下敷设一层铜隔离网,该层敷铜与SIM卡的CCGND引脚相连。CCVCC和CCGND之间的两个电容要离引脚尽量近,并且走线尽量阻抗低,以满足规范要求。单片机与键盘相连,可以通过键盘来向单片机发送数据。该单片机的振荡器的晶振为

11.0592MHz,数据传输率设置为9600b/s。单片机的复位键RESET为高电平时复位。1~14引脚为电源部分,其中l~5引脚为电源电压输入端VBATT+;6~10引脚为电源地GND;11~12引脚为充电端;13引脚为对外输出电压(供外部电路使用);14引脚ACCU/TEMP接负温度系数的热敏电阻;24~29引脚为SIM卡连接端;33~40引脚为语音接口用来接电话手柄。15、30、31和32引脚为控制部

分;15引脚为启动线IGT(Ignition)。当TC35i通电后必须给IGT一个大于100mV的低电平,模块才能启动。30引脚为RTCbackup;31引脚为掉电控制;32引脚为SYNC,16~23引脚为数据输入/输出端。Java socket双机通信模块设计采用了内嵌TCP/IP协议的G24GPRSOEM。该模块尺寸小,功耗低,便于集成。GPRS通信终端收发模块主要由G24模块、天线、SIM卡、相关的电平转换电路和RS232串口组成。其供电电压为5V,可采用USB端口供电;通过RS232串行口与智能家居控制器ARM进行通信。单片机与GSM模块采用串行异步通信接口,由于单片机与GSM模块工作电平不一致,二者之间要用电平转换电路连接。GSM模块通过I2C总线扩展了一个E2PROM存储器芯片AT24C64,其主要作用是存储手机发送的短消息。该芯片能够反复擦/写,能够持久保存数据,而且断电信息也不会丢失,这些特性正是存储数据所必需的。在单片机通过I2C总线扩展了一个Flash存储器,系统选用Am29F016D作为闪存(Flash),单片存储容量为2M字节,16位数据宽度,用于存放显字库信息。现在市场上大多数手机均支持

GSM07.05规定的AT指令集。该指令集是ETSI(欧洲通信技术委员会)发布的,其中包含了对SMS的控制。利用GSM手机的串行接口,单片机向手机发送一系列的AT命令,就能达到控制GSM模块接收SMS的目的。必须注意的是,用单片机实现时,编程必须注意它接收到的响应都是字符的ASCII码。收发模块采用AT指令操作,通过RS232串行口进行数据通信[12]。AT命令使计算机或终端与调制解调器通讯。可以按照自己的需要设置您的调制解调器,AT指令的所有命令行必须由ASCII字符―AT‖开始并由结束。字母

空格会被忽略,命令行的最多字符数为39(包括

图4-11AT常用指令

在输入一条命令期间,可以用退格键(backspace)改正除

AT+CMGF=0AT+CMGS=21其流程图如图4-12。

图4-12信息接收处理流程图

后面这一长串的数字就是PDU数据,它的长度为60位,扣掉前面短信中心的号码18位(即前9个字节不计数),同时除以2,得到21(字节长),填入―AT+CMGS=_‖;而PDU数据的具体含义如表4-1所示。通过上面的分析,由图表在这里可以能够看到这条短信的内容是―ktopen‖,通过7-bit编码编译成

―6B746F70656E‖。这样我们便可以在串口中将获得的数据发送出去,空调打开。整个数据处理都是要经过中心控制器的读取,分析,发送指令。系统的每个指令都可以同过嵌入式的指令方式,存储在单片机的存储芯片中,当无线手持设备远

程发送信息指令时,单片机芯片进行信息的读取,分析,处理,做出如指令需求的所相应的操作。

表4-1PDU格式说明表分段

[**************]6F411000B[1**********]876F500含义SMSC地址信息的长度SMSC地址格式(TON/NPI)SMSC地址基本参数(TP-MTI/VFP)消息基准值

(TP-MR)目标地址数字个数目标地址格式(TON/NPI)目标地址(TP-DA)协议标识(TP-PID)用户信息编码方式(TP-DCS)00007-bit编码048-bit编码

0800066B746F70656EUCS2编码5分钟实际长度6个字节―ktopen‖7-bit编码说明共8个八位字节(包括91)用国际格式号码(在前面加‗+‘)[1**********]74,补‗F‘凑成偶数个发送,TP-VF用相对格式0共11位,不包括补足的‗F‘用国际格式号码(在前面加‗+‘)[1**********]75,补‗F‘凑成偶数个是普通GSM类型,点到点方式

有效期(TP-VP)短信长度(TP-UDL)短信内容(TP-UD)

5结束语

目前,在无线传输技术种类多样,各有优势。ZigBee作为一种新出现的无线通信技术,以其协议简单、成本低、功耗小、组网容易等特点,在家用系统控制、楼宇自动化、工业监控领域具有广阔的市场空间,本文主要以ZigBee为主要的无线通信,这在家居行业的技术发展和应用方面的研究具有前沿性和实用性。通过GSM网络实现了手机终端与智能家居系统远距离双向通讯,突破了对传统有线距离的约束,达到远距离接收、发送通讯信息,并且具有很高的模块化程序和可扩展性,智能化程度高。物联网智能家居系统是嵌入式控制终端系统,

ZigBee无线传感网络和GPRS通信。模块的嵌入式智能产品。它很好的改善了家居的环境,它也包含了影音娱乐等功能,满足家庭的娱乐需求。由于时间和资源有限,这里并没有将自己所有的想法都付诸实践。其实物联网和智能家居都是很大的项目,它们涉及了太多的内容,这个系统只是实现了其中的很小一部分功能。而且,由于知识水平所限,在系统设计当中也必然存在着很多漏洞和不足。不过,我始终觉得这是一个很好的项目,很具有实际意义,如果有可能,我会继续将它完善,做得更好。

附录

嵌入式系统的搭建:

在PC机上安装Ubuntu10.04。然后下载并解压交叉编译链

arm-linux-gcc-4.4.3。从Qt官网下载linux版本的Qt开发框架,这里使用4.7.2版本,下载的安装包文件为qt-everywhere-opensource-src-4.7.2.tar.gz。然后使用交叉编译链对Qt源码进行交叉编译,最后使用makeinstall命令来安装Qt。我们再从Qt官网下载linux版本的QtCreator2.1,然后安装它,用它来进行Qt程序的开发。嵌入式终端软件平台的搭建,包含以下几步。第一,烧写BIOS。进入到―EELiod/Jflashmm‖目录下,输入―tarxzvfJflash–Xsbase270.tar.gz‖解压Jflash工具。进入到―Jflash-Xbase270‖目录下,输入―./jflashmmboot‖下载―‖Bootloader。第二,烧写Linux的内核。先在PC的Linux的根目录下建立一个―tftpboot‖目录。把―EELiod/image‖目录下的―zImage和rootfs.img‖文件复制到―tftpboot‖目录下。打开minicom并且重启目标板,按下数字键―3‖选择第三个选项,把内核映像文件zImage文件下载到板子上。第三,烧写文件系统。按下数字键―5‖选择选项5,

把文件系统的映像文件rootfs.img下载到目标平台上。

MC703模块收发短信程序:

#include#include#defineucharunsignedchar#defineuintunsignedint#defineRxIn90//定义接收的数组长度为90ucharcodeAT[]=

ucharcodeATE[]=

ucharcodeAT_CSCA[]=

ucharcodeAT_CMGR[]=

ucharcodeAT_CMGS[]=

ucharcodeAT_CMGD[]=

ucharcodesuccessfully[]=

ucharAT_SendNumber[25];//用来存储发送短信号码指令ucharnumberbuf[3];//用来保存短信条数ucharidataSystemBuf[RxIn];//储存出口接收数据

ucharCommandBuf[6];//用来储存指令

ucharidatastate[17];//用来存储IO口状态ucharidatastate1[17];//用来存储IO口状态ucharRx=0;uinttemp;//记录状态uchartemp1;//用于记录P0口状态

uchartemp2;//用于记录P2口状态bitcheck=0;//查询标志位bitreceiveready=0;//接收短信标志位bitsendready=0;//发送短信准备标志位bitsend=0;//发送短信标志位

bitflag=0;//指令标志位sbitP3_7=P3^7;//启动GSM的启动线连

IGTsbitrealy0=P0^0;//继电器1sbitkey1=P2^0;//开关1sbitkey2=P2^1;//开关2函数voidDelay_ms(uinti);实现功能:进行毫秒延时。

voidDelay_ms(uinti){unsignedintj;for(;i>0;i--){for(j=0;j

voidStart_GSM(void);实现功能:对TC35进行启动。开启TC35功能详述:单片机上的P3_7管脚是与TC35的IGT管脚相连;需要启动TC35,必须在15脚(IGT)加时长至少为100ms的低电平信号,且该信号下降沿时间小于1ms。启动后,15脚的信号应保持高电平.:

voidStart_GSM(void){P3_7=0;Delay_ms(1000);P3_7=1;Delay_ms(1000);}函数voidsendchar(ucharch);实现功能:发送一字节数据。

voidsendchar(ucharch){SBUF=ch;while(TI==0);TI=0;}函数

voidsendstring(uchar*p);实现功能:通过串口发送字符串。

voidsendstring(uchar*p){while(*p){sendchar(*p);p++;}sendchar(0x0D);sendchar(0x0A);}函数voidreceive(void)interrupt4using1;实现功能:通过串口接收数据。

3程序的实现

3.1服务器端的实现

3.1.1服务器端用一个类Sa来实现,创建一个ServerSocket类的对象,实现对端口9999的不断监听,直到受到客户端的信息。

3.1.2代码如下:

import java.io.*;

import java.net.*;

import java.util.*;

public class Sa

{

public static void main(String[] args)

{

int count =0;

//String s=

try{

ServerSocket server=new ServerSocket(9999);

//打印提示信息

System.out.println(

//服务器循环接受客户断请求

//if(!s.equals(

while(true){

Socket sc=server.accept();

//获取当前连接的输入流,并使用处理流进行封装

DataInputStream din=new DataInputStream(sc.getInputStream());

//获取当前连接的输出流,并使用处理流惊喜封装

DataOutputStream dout=new DataOutputStream(sc.getOutputStream()); //打印客户端的信息

System.out.println(

System.out.print(

System.out.println(

System.out.println(

//向客户端发送回应信息

dout.writeUTF(sc.getInetAddress()+

//关闭流

} //BufferedReader in=new BufferedReader(new InputStreamReader(din.read())); //s=in.readLine(); //s=din.readUTF(); din.close(); dout.close(); sc.close(); }// else // server.close(); } catch(Exception e){ e.printStackTrace(); } }

3.1.3运行结果:

3.2客户端的实现:

3.2.1客户端主要用Sb类来实现对服务器端的连接功能,创建一个Socket对象实现对服务器的连接。

3.2.2代码如下:

import java.io.*;

import java.net.*;

public class Sb

{

public static void main(String[] args){

String m1,m2;

m1=

m2=

try{

//创建连接到服务器的Socket对象

while(!m2.equals(

Socket sc=new Socket(m1,9999);

DataInputStream din=new DataInputStream(sc.getInputStream());

DataOutputStream dout=new DataOutputStream(sc.getOutputStream());

System.out.println(

BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

m2=input.readLine();

dout.writeUTF(m2);

System.out.println(din.readUTF());

din.close();

dout.close();

sc.close();

}

}

catch(Exception e){

e.printStackTrace();

}

} }

3.2.3运行结果如下:

4打包发布

(1) 要发布应用程序,需要将应用程序打包。使用jar.exe,可以把应用程序中涉及的类

和图片压缩为一个jar文件,这样可以便利发布程序。

(2) 首先,编写一个清单文件,名为manifest.mf,其代码如下:

Manifest-Version: 1.0

Created-By: 1.6.0_06 (Sun Microsystems Inc.)

Main-class: Sb

将清单文件保存到.class所在文件中。使用命令:jar cfm Sa.jar manifest.mf *.class 运行后出现Sa.jar文件,

(3) 编写批处理文件,用来打开Sa.jar文件

Cj.bat

@echo off

title 【服务器系统】

color 0a

java -jar Tc.jar

pause

Cj1.bat

@echo off

title 【客户端程序】

color 0a

java -jar Tc1.jar

pause

结束语

本文通过主要利用Java Socket来实现双机通信,实现一个简单的服务器,客户端聊天通信工具。并对Java Socket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。

通过本次课程设计,让我学到了很多东西,对java socket有了进一步的了解,同时也让我学会了开发系统的结构理念及一些基本步骤。不足之处就是有些东西我掌握的还不够牢固和不够深入,我以后还须加倍努力。

由于时间的仓促,加之水平有限,本课程设计中的缺点和不足之处在所难免,敬请老师给予批评指正!


    相关文章

    智能电网的技术组成和实现顺序

    2009年第3卷第2期 2009.VbI.3.No.2 SOUTHERN 南方电网技术 PoWERSYSTEMTECHNOLOGY 中图分类号:TM73:TM933 特约々稿 FeaturedArticles 文章编号:1674.0629( ...

    [家用电器的智能化现状及发展趋势]

    桂林电子科技大学职业技术学院 毕业设计(论文) 家用电器智能化的现状及发展趋势 学院(系): 电子信息工程系 专 业: 电子信息工程技术 学 号: 091222317 学生姓名: 李英胜 指导教师: 刘海燕 摘要 ------------- ...

    基于GSM网络智能家居系统设计_毕业论文

    天津工业大学 毕业设计(毕业设计(论文)论文) 基于GSM网络智能家居系统设计 网络智能家居系统设计 姓 名 名: 院(系)别: 电子与信息工程学院 电子与信息工程学院 专 业 业: 通信工程 通信工程 通信工程 班 级 级: 通信 通信 ...

    电气自动化毕业设计论文题目

    电 气 自 动 化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6 ...

    电气自动化设计论文题目大全

    机电一体化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入 ...

    自动化毕业设计论文题目

    自 动 化 毕 业 设 计 论 文 题 目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. ...

    智能家居安防设计(论文)任务书

    东华理工大学机电学院 毕 业 设计论文 任 务 书 东华理工大学 学院(部) 专业 班 毕业设计论文题目 智能家居安防系统设计 专题题目 家居安防设计 (2人) 发题日期: 2010 年 11月25 日 开始时间:自2011 年12月28 ...

    单片机毕业设计题目

    1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. ...

    [人工智能]在生活中的应用论文

    人工智能论文 题目:人工智能在生活中的应用 班 学 姓 级: 号: 名: 090615 指导老师: 王 全 计算机科学与技术系 2011 年 12 月 26 日 人工智能 论文评定表 题 目 陈芳青 人工智能在生活中的应用 学号 09061 ...

    智能电表和传统电表的异同比较

    万方数据 智能电表和传统电表的异同比较 作者:作者单位:刊名:英文刊名:年,卷(期): 郭敏 贵州电网兴义供电局,贵州黔西,562400科技与生活2011(24) 1. 牛军蕊 智能电表在智能电网中的应用[期刊论文]-科技风 2010(06 ...