基于Android 手机的设备远程控制的研究与实现
2018-11-14张倩
张 倩
(沈阳工程学院自动化学院,辽宁 沈阳 110136)
1 远程控制系统组成
远程控制系统由智能手机、受控设备和Web服务器三大主要部分组成,其结构框图如图1所示。无线路由(AP)为系统提供WiFi无线网络。手机、平板等智能终端可以远程监测和控制处于工厂和车间的设备。受控设备通过单片机接收WiFi无线模块的控制指令,通过PLC或继电器可以实现对设备的远程智能控制。系统的设计思路是将服务器应用程序部署在Tomcat网络服务器上,负责提供用户逻辑和MySQL数据库查询服务,并与Android智能手机和受控设备通信。用户通过手机软件可以完成登录、设备添加、监控和控制等功能。
客户端和服务器的通信过程由双方的接口实现。首先,客户端通过httpClient接口发送一个请求给服务器端;其次,Web服务器将来自于客户端的请求送到Servlet接口,在接口中进行用户逻辑分析后,将响应内容从Servlet接口返回给客户端。Tomcat服务器作为Servlet接口类的容器,负责接收和响应手机客户端请求。在无线网络通信过程中,双方使用的通信协议是HTTP协议,规定了传输数据的内容和格式。
图1 远程控制系统结构
2 HTTP的工作原理与报文
2.1 HTTP工作原理
HTTP协议,即超文本传输协议,定义客户端和服务器端之间文件传输的沟通方式。HTTP协议的内容是HTTP报文,报文是由一行一行字符串组成的。协议采用客户端/服务器结构,即Client/Server模式,客户端向服务器发送一个请求报文,服务器返回一个响应报文。HTTP请求和响应实现流程:首先,客户端发送连接请求到Web服务器,客户端和服务器建立起一个TCP连接,客户端向服务器发送一个请求报文;其次,服务器接收客户端请求并返回HTTP响应,在服务器程序中解析用户请求,并根据用户逻辑做出响应,由TCP连接返回给客户端;最后,根据连接类型保持或释放TCP连接,若连接类型为keepalive,在一段时间内服务器可以继续接收该客户端的请求,若连接类型为close,则服务器在做出响应后会释放连接。网络通信的客户端/服务器模型如图2所示,httpClient和httpServlet为客户端和服务器的通信接口函数。
图2 网络通信的客户端/服务器模型
2.2 HTTP的报文格式
HTTP事务=请求命令+响应结果。命令和响应以报文的形式传递,HTTP请求报文主要由请求行、请求头部、请求正文组成。HTTP响应报文由状态行、响应头部和响应包体组成。
2.2.1 请求报文结构
请求报文由请求行、请求头部、空行和请求正文4部分组成,请求报文结构如图3所示。请求行由请求方法类型、URL地址和协议版本字段组成,需使用空格隔开。请求类型有GET和POST两种方法。GET方法是要求服务器把URL定位的资源放在响应报文的数据部分,一般用于客户端向服务器请求某个资源。POST方法一般用于客户端向服务器提交数据,如智能电器向服务器发送设备状态数据的表单,将数据提交给服务器处理,例如:POST/index.jsp HTTP/1.1,其中POST是请求方法,/index.jsp是访问路径,HTTP/1.1是协议版本。请求头部由关键字和值对组成,用于通知服务器关于客户端的请求信息。例如,host∶192.168.24.56,用于指定访问服务器地址。请求头部之后是一个空行,发送回车符和换行符,通知服务器以下内容是请求包体。请求包体在POST方法中用于传递大量数据,与请求包体相关的最常用的包体类型和包体长度,最后将传送数据附在后面构成请求报文。
图3 请求报文结构
2.2.2 响应报文结构
HTTP响应报文由响应状态行、响应头部、空行和响应包体4部分组成。响应状态行由协议版本、状态码和状态描述组成。响应状态码由三位数字组成,200 OK表明客户端请求成功,400 Bad Request表明客户端请求出现了语法错误。响应头部和请求头部的格式相同,Content-Type和Content-Length是对响应内容的类型和长度进行设置。响应头部后是一个空行,通知客户端以下为响应包体内容。响应包体中主要附加服务器返回给客户端的数据信息。图4为手机客户端的请求报文和服务器的响应报文举例。
图4 请求报文和响应报文举例
3 通信接口程序设计方法
手机客户端点击Button按钮触发一个访问服务器的操作,客户端会调用访问服务器的通信请求程序,服务器则通过Tomcat服务器中的Servlet通信接口接收客户端请求,并按照用户逻辑做出响应并返回给客户端。单片机通过WiFi无线模块接收信号也是作为客户端与Web服务器连接,单片机中采用C语言编程,数据的报文格式和手机一致,以Android手机客户端为例加以说明,应用程序采用Java语言编程实现。客户端和服务器通信的流程如图5所示。
客户端首先新建一个HttpClient接口、一个HttpGet对象,指向所访问服务器IP地址,并把需要传递的数据附在地址后面传递,采用的语句如下:
httpGet=new HttpGet("http∶//192.168.1.3"+"id");
图5 客户端和服务器的HTTP通信接口程序流程
GET传递方式适合传递较少数据,当需要完成大量数据传递需要使用POST方法。在try函数中调用通信接口中的execute方法,执行客户端向服务器的连接请求,准备通过HttpResponse类接收服务器返回的响应。当接收到响应数据后,调取状态码判断连接是否成功,将返回数据用getEntity()方法取出,并转化成字符串。客户端访问服务器通信接口任务完成。
try{
HttpResponse serverResponse=httpCient.execute(httpGet);
if(serverResponse.getStatusLine().getStatus-Code()==200){
HttpEntity serverEntity = serverResponse.getEntity();
String response=EntityUtils.toString(serverEntity,"utf-8");
}
服务器接收请求的接口是HttpServlet,在其中重写了doGet()方法,完成Servlet接口接收请求数据(HttpServletRequest)和返回服务器响应(HttpServletResponse)的任务。在doGet()方法中,首先调用了getParamete()方法获取request请求参数,然后设置response响应内容类型和数据格式,在try函数中进行用户逻辑处理之后,把响应数据封装为JSON格式并装载到JSONObject对象中,调用getWriter()方法返回服务器给客户端的response响应,最后通过PrintWriter对象把jObject响应发送给客户端,关闭连接响应任务结束。doGet()方法的程序内容如下:
doGet(){String nidStr=request.getParameter("id");
response.setContentType("text/html;charset=UTF-8");
JSONObject jObject=new JSONObject();
try{jObject.put("data",nidStr);}catch(Exceptione){…}
PrintWriter out=response.getWriter();
out.println(jObject);out.flush();out.close();}
4 系统开发与测试
在Android手机端点击相应控制按钮,通过智能手机的HttpClient通信接口将指令发送到Web服务器端,服务器通过HttpServlet通讯接口接收客户端指令,再把命令通过无线网络发送给Wifi模块,指令由单片机负责接收并执行电器控制动作。安卓手机和服务器的开发采用Eclipse平台,包括界面设计、通信接口和数据库操作等模块;单片机采用Keil平台开发,负责收发指令和执行继电器控制;服务器采用Tomcat轻量级Web服务器为系统提供用户应答和数据库访问。经过系统现场调试和测试,实现了无线网络中智能手机对电器设备的远程监控。
5 结 论
设计一个基于Android手机的远程控制电器的通信系统,阐述了无线网络中通信接口的原理和设计方法,测试并验证了该控制系统的正确性和有效性。手机用户通过访问Web服务监测和管理电器设备,通信模式采用HTTP协议下的C/S网络结构,通过客户端的HttpClient接口和服务器的HttpServlet接口完成请求和响应报文的传递。该系统可根据用户需求灵活设计,可移植性强,可广泛应用于工厂和车间设备的远程监控。