基于Android的Socket(TCPIP)在LED灯光控制系统中的应用.doc_第1页
基于Android的Socket(TCPIP)在LED灯光控制系统中的应用.doc_第2页
基于Android的Socket(TCPIP)在LED灯光控制系统中的应用.doc_第3页
基于Android的Socket(TCPIP)在LED灯光控制系统中的应用.doc_第4页
基于Android的Socket(TCPIP)在LED灯光控制系统中的应用.doc_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

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

文档简介

计算机应用与软件Computer Applications and Software基于Android的Socket(TCP/IP)在LED灯光控制系统中的应用孙 剑,董 超,夏继媛(深圳职业技术学院 电子与通信工程学院,广东 深圳 518055)摘 要 论文中采用了Socket的通信方法,根据TCP/IP通信协议进行数据传输,基于Android操作系统平台,通过ZigBee无线通信与自组网技术,设计了以Android操作系统为平台的客户端应用程序,实现了通过无线wifi网络与Windows系统的电脑服务器之间进行通信,解决了如何利用基于Android系统的手持终端对ZigBee无线网络中的LED灯光进行远程调控的问题,提出并实现了一种新的LED灯的智能控制方案。关键词 socket tcp/ip android zigbee 灯光调控中图分类号 TP3 文献标识码 ATHE APPLICATION BASED ON THE ANDROID SOCKET (TCP/IP) IN THE LED LIGHTING CONTROL SYSTEMSun Jian , Dong Chao , Xia Jiyuan (Electronic and communication engineering institute, Shenzhen Polytechnic, Shenzhen 518055, Guangdong province,China)Abstract This paper used the Socket communication method, according to the TCP/IP communication protocols for data transmission, based on the Android platform, through the ZigBee wireless communication technology and the ad hoc network technology, design the android platform of the client application, realize the wifi network and server through wireless communication between, solve how to use the android system with terminal to the network to control the light in the ZigBee network. Proposed and implemented a new LED lamp intelligent control scheme.Keywords socket tcp/ip android zigbee lighting control1 引言我国照明用电占总发电量的12%,而对照明时间长,照明场所多的学校、办公室、商场、街道等地点的照明灯具多为白炽灯、荧光灯和节能灯,照明耗电严重。LED被认为是21世纪的照明光源。LED发光器是冷光源,光效高,工作电压滴,而且能耗低,使用寿命长。用LED替代白炽灯或荧光灯,环保无污染,使用安全可靠,便于维护。目前,公共建筑的照明灯具控制大多采用原始手动开关,不能连续调剂,有些地方不论有人或者无人,白天或者黑天都,灯都是持续点亮的,这样就造成了大量的能源浪费和使用上的不便,而且会缩短灯具的使用寿命。设计一套LED灯光控制系统,可以根据工作环境的改变等来远程控制灯光的开关和亮暗程度,提高用电效率,从而节约电能和缓解了用电高峰的电力供应压力双重作用。同时,增加灯具的控制终端种类,更能即时、方便的控制灯光,而且,自从Android操作系统的问世,它的开源、开放等诸多好处和Google公司的大力支持,使得越来越多的手机和平板厂商都使用Android系统作为其设备的操作系统。从当前的发展趋势看来,实现将控制程序移植到Android手机和平板电脑等移动终端上,达到远程控制灯光的目的,将会对LED灯的推广起到积极的推动作用。孙剑:基于Android的Socket(TCP/IP)在LED灯光控制系统中的应用2 Android系统简介Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。 目前国际市场上,移动互联列终端基于的平台主要有:Symbian、Windows Mobile、iPhone IOS、Black Barry IOS,这四者与Android相比,Symbian缺乏创新、日落西山不可避免,Windows Mobile太昂贵,iPhone和Black Barry太封闭。Android的最大优势在于其开放性,自2007年11月推出后,Android得到了众多手机制造商、电信运营商、半导体公司和软件公司的大力支持。在移动智能终端支持方面,三星、摩托罗拉、HTC等国际一线厂商在2010年几乎倾倒性的发展Android,尤其摩托罗拉几乎将2010年发布的所有智能手机都预装Android平台,2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。此外,包括国外的三星和国内的联想等厂商已经开发并推出了一系列的以Android为操作系统的平板电脑,Android的应用范围正在进一步扩大。早期的Android应用程序开发,通常通过Android SDK(Android软件开发包)下使用Java作为编程语言来开发应用程序,但通过不同的软件开发包,则使用的编程语言也不同。例如开发者可以通过Android NDK(Android Native开发包)使用C语言或者C+语言来作为编程语言开发应用程序。同时谷歌还推出了适合初学者编程使用的Simple语言,该语言类似微软公司的Visual Basic语言。此外,谷歌公司还推出了Google App Inventor开发工具,该开发工具可以快速地构建应用程序,方便新手开发者。不过,就目前的发展状况来看,SDK开发包的功能比较完善,所以大部分开发者都选择使用Java作为编程语言,而且考虑到Java虚拟机的效率和资源占用,谷歌重新设计了Android的Java,以便能提高效率和减少资源的占用。3 Socket(TCP/IP)通信3.1 Socket介绍Socket在计算机网络中通常被成为“套接字”,用于描述IP地址和端口,是两台机器间通信的端点。应用程序通常通过“套接字”向网络发出请求或者答应网络请求。以JDK1.7为例,Socket和ServerSocket类库都位于包中,ServerSocket用于服务器端,Socket是建立网络连接时使用的。ServerSocket端会有一个accept方法等待连接请求,当成功连接时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需要的对话,在这个网络连接里面,“套接字”是平等的,并不会因为在服务器端或是客户端而产生不同级别。3.2 TCP/IP协议TCP/IP是指一整套数据通信协议,其名字是由这些协议中的两个协议组成的,即传输控制协议(Transmission Control Protocol TCP)和网间协议(Internet ProtocolIP)。虽然还有很多协议,但是TCP/IP显然是两个最重要的协议。虽然TCP传输的效率不及UDP(User Datagram Protocol无连接的协议),但是很多时候,对数据内容的正确性的检验是必需的,这样必然会相对更占用计算机的处理时间和网络带宽,不过,这样换来的是数据的可靠传输。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。如图1所示:图1 TCP连接的正常建立TCP 用一个校验和(Checksum)函数来检验数据是否有错误,在发送和接收时都要计算校验和。3.3 开发一个Server-Client的程序 程序采用TCP/IP协议进行通信。Server端(仅列举主要代码):ServerSocket server;server = new ServerSocket(int port); 上面的代码用于创建一个ServerSocket对象实例,int类型的port表示设定的通信端口,端口可以随意指定,但是由于1024以下的端口是保留端口,所以选择大于1024的端口。Socket socket = server.accept();在这一行代码中,accept方法用于产生一个“阻塞”,直到接受到一个正确的连接请求,连接成功并返回客户端一个Socket的对象实例。“阻塞”是一个术语,它使程序运行暂时“停留”在这个地方,直到一个网络对话产生,然后程序继续,这个“阻塞”通常是循环实现的,以达到持续监听对话请求的目的。如:while(true) . InputStream in = socket.getInputStream();in.read();OutputStream out =socket.getOutputStream();out.write();上面的代码中,getInputStream方法获得网络输入,并返回一个InputStream对象实例,getOutputStream方法连接的另一端获得输入,并返回一个OutputStream对象实例。此外,上面代码的执行,需要在新启动的线程里面进行处理,这样才能保证Server端能够持续的接收Client端发送的数据,并且随时反馈数据,保证通信的可靠性。如:new Thread(new Runnable().).start;);同时必须注意的是getInputStream方法和getOutputStream方法均可能会产生一个IOExpection,它必须被捕获,因为他们返回的流对象,通常会被另一个流对象使用。如:try.catch(IOExpection e)Client端(仅列举主要代码):static Socket client;client = new Socket(String site,int port); 在上面的代码中,字符串类型(String)的site是指服务器的IP地址,整数型(int)的port是指通信端口号,一旦IP地址和端口号都与服务器端匹配,客户端发送连接请求时就会被服务器端accept,正式建立对话。OutputStream out =client.getOutputStream();out.write();InputStream in = client.getInputStream();in.read();上面代码的执行同样需要在一个新的线程里进行,也同样需要捕获IOException,理由均与Server端相同。在服务器端(Server)和客户端(Client),分别创建OutputStream和InputStream的对象实例,便可以分别调用write方法和read方法进行通信对话。 4 系统设计Android客户端控制器(Zigbee模块)LED灯控制器(Zigbee模块)Windows服务器Zigbee网络wifi 、socket图2 系统通信流程 4.1 系统硬件设计图2中的Zigbee模块组成Zigbee无线通信网络,在服务器端和LED灯都分别与Zigbee模块连接,与服务器连接的Zigbee模块是唯一的总控制终端,控制信号都是从这个模块上发出的,传给网络中的每个节点,与LED灯相连接的Zigbee模块就相当于组网中的节点,所以它并不是唯一的。4.2 系统软件设计软件设计主要有主界面设计,手动模式设计,自动模式设计。主界面的功能类似一个目录,可以从主界面中选择进入手动模式,进入自动模式,退出软件这三种功能,程序界面如图3所示。图3主界面截图4.2.1 手动模式选择主界面中的手动模式,便可以手动调节LED灯光的亮度,如图4所示:图4 手动模式截图手动模式里面会显示出当前网络中的所有灯光场景分布,选定某一个场景时,就会显示出当前场景内分布了哪些LED灯,选择场景,就可以调节整个场景的亮度,并且会通知服务器对当前的设置进行保存,选择场景下面的单个LED灯,也可以分别调节场景内不同LED灯的亮暗。4.2.2 自动模式在自动模式中,将一天分成48个时段,可以分时段设置网络中全部LED灯的亮度,也可以设置某一个场景的亮度,只要选择开启自动模式功能,并将各个时段的亮度设置好,保存之后,设置便即时生效,如图5、图6所示。图5 设置前自动模式图6 设置后自动模式4.3 设计公共通信类创建一个客户端公共类Client,实现客户端与服务器的Socket(TCP/IP)通信,创建一个公共类,有利于代码的重复利用,提高编码的工作效率,也有利于将来对代码进行升级与维护。具体代码如下:public class Client extends Threadstatic Socket client;byte buf;public Client(String site, int port)/类函数,site为IP地址,port为端口号try client = new Socket(site,port);/创建客户端catch(UnknownHostException e1) e1.printStackTrace(); catch (IOException e1) e1.printStackTrace();public void connectServer()/创建连接服务器方法OutputStream out;tryout=client.getOutputStream();byte b=0x1c,0x20,0x00,0x02,0x0c,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c;/数组b为请求与服务器建立连接的数据out.write(b);/发送数据out.flush(); catch (IOException e) e.printStackTrace(); public void sendMsg(byte msg)/创建向服务器发数据msg的方法try OutputStream out = client.getOutputStream();byte buf1 = msg;out.write(buf1);out.flush();catch (IOException e) e.printStackTrace(); public void getMsg()/创建接收服务器返回数据的方法 new Thread(/利用独立线程持续监听服务器的返回情况 new Runnable() public void run() InputStream in;while(true)tryin = client.getInputStream();buf = new byte2048;in.read(buf);/获取数据并存放到数组buf中 Thread.sleep(20);catch (IOException e) e.printStackTrace(); catch (InterruptedException e) e.printStackTrace();).start(); 设计好公共类,便可以在手动模式和自动模式的通信实现中,分别创建公共类Client的对象实例,再分别调用Client中的connectServer,sendMsg,getMsg方法即可实现与服务器端的Socket通信。4.4 系统测试 图7中可以看出,服务器端显示,已经接受了一个客户端请求的进程,同时也可以看出来客户端的IP地址为12,当服务器显示下图中的语句时,说明客户端已经成功连接到服务器端,后续的对话都是建立在这个基础之上的。图7 服务器连接成功4.4.1手动模式测试图8 手动模式获取场景灯光数据从图8中,能看出当前服务器端已有的场景的个数为5个,三次返回给客户端的数据长度分别为14、12和1028,单位为byte。第一次的数据是通知客户端成功建立了通信连接,第二次的数据是在客户端请求从服务器端获取场景数据之后,服务器做出“已收到正确请求指令”的回应,第三次的数据则是包含场景信息、灯光信息的数据。第二次和第三次返回数据的过程正是TCP通信过程,确保了通信的可靠性,当客户端收到第三次返回的数据之后,通过checksum位验证之后,也会返回给服务器反馈一帧数据,意为“已收到正确的数据”。通过点击图4中的下拉框便可以改变亮度等级,通信成功时,服务器端如图9所示,意为“将第二个id对应的场景(对应图4中的场景一)的亮度值调为40”。图9 手动模式设定场景亮度4.4.2 自动模式测试 自动模式中,不但要先进行获取场景信息的通信(与手动模式获取方式相同),还要获取各个时间段设置的参数(如亮度、场景分布等),获取自动模式参数的通信成功建立后,服务器端如图10所示。图10 自动模式获取已设置数据图11 自动模式更改设置当设置完自动模式,打开自动调节开关点击保存,设置成功之后,服务器端如图11所示。结 论本文实现了一种基于Android平台的Socket(TCP/IP)通信,并成功的进行了与Windows端服务器的跨平台通信,

温馨提示

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

最新文档

评论

0/150

提交评论