基于WebSocket技术的温湿度监控系统研究
2016-10-19范鹏程陈钟荣
范鹏程 陈钟荣
摘要:研究了一种新的基于WebSocket技术的温湿度监控系统,介绍了系统的总体设计,包含数据采集和数据传输两大模块,系统采用了W5500网络芯片以及AM2302数字温湿度传感器,在HTTP协议的基础上进行了应用开发。结果表明,基于WebSocket技术的温湿度监控系统具有成本低、数据传输灵活实时等优点,并可广泛应用于需要温湿度监控的场所。
关键词:W5500网络芯片;HTTP协议;温湿度监控;系统
中图分类号:P412.1 文献标识码:A 文章编号:0439-8114(2016)06-1558-04
DOI:10.14088/j.cnki.issn0439-8114.2016.06.050
温度和湿度是衡量环境的重要指标。在农业生产、工业控制、仓库存储等领域里,温湿度监控设备成为研究的重点,并正在走向大规模的实施阶段。传统的温湿度监测设备大多数采用有线方式,其优点是可靠稳定,而缺点是布线困难、可移动性差。针对这些问题与不足,本研究以高性能ARM芯片STM32为核心的温湿度监控系统,采用最新的WebSocket技术,实现了远程温湿度的实时监测。
1 系统总体结构
温湿度监控系统主要由数据采集模块、主控制模块、以太网模块等模块组成。数据采集模块是传感器在主控制器的驱动下完成對温湿度数据的采集,主控制模块使用的是高性能Cortex-M3内核的STM32处理器,可以完成对数据采集模块的控制以及对采集数据的数据处理工作,处理完成的数据通过以太网模块W5500发送至客户端。
2 系统硬件设计
2.1 温湿度传感器模块
温湿度数据采集使用AM2302湿敏电容数字温湿度模块,它是一款含有己校准数字信号输出的温湿度复合传感器,应用温湿度传感技术和数字模块采集技术,具有极高的可靠性和长期的稳定性[1,2],传感器引脚名称描述如表1所示。
该传感器采用单线制串行接口,与单片机之间仅仅需要一个I/O口就能够采集到本地的温度和湿度,其与单片机的典型连接如图1所示。
2.2 以太网模块
以太网模块使用WIZnet公司生产的W5500芯片,该芯片直接采用硬件协议栈实现网络连接,主要应用在性能高和成本低的嵌入式系统中,具有设计简单方便、应用快捷灵活等特点。W5500芯片内部集成全硬件TCP/IP协议栈、10/100M以太网介质传输层MAC和物理层PHY,支持TCP、ARP、IGMP等协议,同时W5500内部还集成有32 Kb存储器用作TX/RX缓存以供以太网包处理,使用W5500芯片仅需要一些简单的Socket编程就能实现以太网的应用,这样可以为嵌入式的设计开发提供硬件参考。
W5500芯片提供了SPI接口,容易与STM32处理器进行通信,而且W5500芯片使用了新的高效SPI协议,支持80 MHz速率,能够更好地实现高速网络通信。如图2所示,本设计采用SPI接口将STM32处理器和以太网模块连接构成以太网接口电路[3,4],其中RJ-45接口作为以太网通信接口是实现Internet接入的枢纽,网络传输状态指示灯指示网络的工作状态是否正常。
3 系统软件设计
系统的硬件设计相对比较简单,软件设计是核心工作,软件设计工作主要包括HTTP协议处理流程和WebSocket处理函数流程。本设计中使用W5500芯片的2个Socket资源,一个用来创建HTTP服务器,在客户端浏览器中输入配置的IP地址就能远程访问硬件系统;另一个用来创建WebSocket服务器,与网页端建立通信来传输温湿度数据。软件设计的总体流程如图3所示。
3.1 HTTP协议及处理流程
HTTP(超文本传输协议)是因特网中在Web服务器和客户浏览器之间传输数据使用的协议。首先,HTTP协议是TCP/IP模型中应用层一个面向对象的协议,在HTTP工作开始前,浏览器与服务器之间要建立TCP连接,然后浏览器向服务器发送请求信息,服务器接受到请求信息之后返回响应信息,浏览器接收到服务器的响应信息后,对数据进行处理执行。如图4所示,即HTTP协议传输数据的基本过程。
在STM32处理器和W5500芯片搭建的硬件平台上,要实现HTTP服务器的通信过程,分为以下几个步骤:
1)初始化服务器。完成Web服务器的初始化,W5500芯片作为Web服务器,首先分配Socket去监听HTTP请求。
2)接受并解析客户端请求。当Socket连接建立完成后,W5500芯片接收来自客户端的HTTP请求并进行分析。
3)回应响应消息。如果请求方法为GET,则先返回响应首部,再将客户端请求的URL目标文件从内存中读出,作为HTTP应答发送给客户端[5]。
4)关闭。HTTP 响应消息完成后,关闭与客户端的连接。
由于Web服务器和浏览器在通信时使用TCP协议工作,根据SOCK_HTTP之间状态的不同,执行不同的操作。http( )函数就实现了Web服务器接受请求和回复响应的全过程。以下是对http( )函数部分重点语句的详细解释以及HTTP服务器实现的具体流程[6],如图5所示。
void do_http( )
{
uint8 ch=SOCK_HTTP; //定义了HTTP通信的Socket端口变量
…………
switch(getSn_SR(ch)) //获取Socket的状态
{
case SOCK_INIT: //Socket状态初始化
listen(ch); //Web服务器的监听
break;
case SOCK_LISTEN: //Socket监听状态
break;
case SOCK_ESTABLISHED: //Socket建立连接成功
…………
len = recv(ch, (uint8*)http_request, len); //接收来自客户端的请求
proc_http(ch, (uint8*)http_request);//解析HTTP请求,并发送HTTP Response
disconnect(ch); //断开TCP连接
break;
case SOCK_CLOSE_WAIT: //Socket等待关闭状态
…………
disconnect(ch); // 断开TCP连接
break;
case SOCK_CLOSED: // Socket 关闭状态
Socket(ch, Sn_MR_TCP, 80, 0x20)//重新初始化Socket端口,等待下一次连接
break;
}
}
3.2 WebSocket处理流程
WebSocket是HTML5规范中的一个重要组成部分,是下一代客户端服务器的异步通信方法。WebSocket协议是一种双向通信协议,建立在TCP基础之上,同http一样通过TCP来传输数据[7]。
当在客户端浏览器上访问硬件的IP地址,会向W5500芯片发送http请求,W5500芯片在收到请求后将网页信息发送给浏览器,浏览器就能显示温湿度检测系统的主界面。在网页的代码中,浏览器会主动连接W5500芯片的WebSocket,在完成握手操作后数据通信通道即可建立。这样硬件就可以将温湿度数据发送给浏览器端,浏览器在收到温湿度数据后,使用画布功能,在指定位置画出温湿度示数的点和曲线。WebSocket处理函数具体流程如图6所示。
WebSocket服务器和客户端之间交互过程大致分为以下4个步骤并且给出了函数原型:
1)为了创建一个WebSocket连接,需要创建一个WebSocket接口传入Web服务URL地址,sensorWebSocket会试图连接监听于相应的URL服务。
varwsUri=‘ws:192.168.3.171:1818′;
sensorWebSocket=newWebSocket(wsUri);
2)注册事件并为事件链接相应处理函数,例如,当浏览器页面收到来自服务器端的数据后,触发onmessage事件,进而调用onMessage函数。
sensorWebSocket.onmessage=function(evt){onMessage(evt)};
代码中还注册了onopen、onclose和onerror 3个事件,onopen表示WebSocket建立连接完成,onclose表示WebSocket连接被关闭或无法建立连接,onerror表示WebSocket发生错误。
3)消息处理函数,在硬件上将采集来的温湿度数据用‘.号连接,在浏览器端接收到数据后,使用字符串分割函数将温度和湿度数据分割,存储在一个数组对象里,之后将数据转化成坐标值在画布上显示出来。
functiononMessage(evt)
{
vararrayTH=new Array(2);
arrayTH=evt.data.split(‘.);
……
}
4)主动关闭WebSocket连接
sensorWebSocket.close();
有了WebSocket这个功能就可以与远程服务器连接并接受和发送消息,该功能在双向通信方面十分有用,特别是在服务器需要主动向浏览器页面发送消息时。
4 客户端的数据监测
程序中设定Web服务器的IP地址为192.168.3.171,客户端PC机也位于同一网段,设定IP地址为192.168.3.18。在PC机浏览器地址栏输入嵌入式Web服务器的IP地址192.168.3.171,运行结果如图7所示,在测试期间可以使用加湿器来增加空气中湿度。
5 小结
随着信息化的推进与网络技术的发展,嵌入式系统设备实现网络连接成为了一大趋势。本研究设计了一种基于WebScoket的温湿度监测系统方案,实现实时更新,降低数据流量和网络延迟,减轻服务器负担。W5500芯片的使用,比其嵌入式以太网方案更加快捷、方便实现温湿度监测,可用于农业生产、工业控制、仓库储存等多个领域。
参考文献:
[1] 王东涛,鞠凤船.农业大棚温湿度监控系统设计[J].安徽农业科学,2010,38(35):20446-20447.
[2] 刘继忠,邱于兵,黄 翔.基于ARM的远程温湿度监测系统的设计[J].仪表技术与传感器,2012(8):90-92.
[3] 于春雪.W5100在遠程电力质量监测设备中的应用[J].电力系统通信,2011,32(9):59-64.
[4] 陈 实,王 琪,张铁军,等.一种基于W5100的数据传输系统[J].电子技术应用,2013,39(9):54-56.
[5] 高 嵩.基于HTTP协议的嵌入式远程监控系统的研究[D].北京:北京工业大学,2009.
[6] 林笑君.基于Cortex-M3的嵌入式WEB服务器监控系统的设计与实现[D].太原:太原理工大学,2013.
[7] 郑 玲,郑晓天.基于WebSocket的电力系统实时数据更新研究[J].计算机与现代化,2013(1):85-87.