基于云服务的远程数据传输系统的设计与实现
2019-08-16房崇鑫张正华张嘉烽
房崇鑫,张正华,徐 杰,张嘉烽,钱 锦,苏 权,黄 星
(1.扬州大学 信息工程学院,江苏 扬州 225127;2.扬州国脉通信发展有限责任公司,江苏 扬州 225001)
0 引言
随着物联网技术的广泛运用,无线网络数据传输与监测在建设城市交通、发展科技农业中的应用需求不断增加[1]。而依靠云计算技术的发展[2],原有的多种局域化智慧农业[3]应用逐步向公共的共性服务平台迁移。在针对情况复杂多变的野外环境,如何通过设备合理利用有限能量依然能维持监测系统的正常运转是一个亟待解决的关键问题。利用云服务技术也是国内外现代化科技设计的重要研究领域,其中先进的云端数据采集方式引起了很多学者的高度关注[4]。
众多终端节点的低功耗多接口无线传感器监测系统成本低,应用方便,易于实现本地中短距离数据传输和自动控制等功能。但是,因前端传输距离的限制,简单的监控系统无法延伸到远程实现。为此设计一种结合GPRS无线通信技术,利用互联网云端服务器实时监测数据传输,从而扩展物联网覆盖范围的系统。
1 系统方案设计
科技信息的云服务下,本地远程数据传输技术系统主要有3部分:系统前端的本地实时数据传感采集与ZigBee的收发功能形成系统的数据采集模块;系统中端由协调器与单片机作为数据的分析与处理的网关模块;系统末端由GPRS无线模块与云端服务器作为对数据的最终接收与监控,从而实现整套远程监测本地实况的系统。系统总体结构如图1所示。
图1 系统总体结构
该系统前端采用改进简化无线协议后的CC2530型ZigBee星形拓扑结构作为终端节点,进行温湿度等数据采集[5],将数据能在短距离的无线通信下集中发送到协调器上。数据监测的网关部分则是在协调器后端串口连接STM32F407型单片机对数据进行分析。末端通过SIM800C型GPRS无线模块将采集的信息发送到云端服务器上,从远程计算机即可读取前端传感器上的温湿度等采集情况,监控本地实时状况。
2 系统硬件设计
2.1 ZigBee无线收发模块硬件的设计
系统前端采用以CC2530芯片为核心的ZigBee无线收发模块,经简化协议栈后,其极高的接收灵敏度和稳定的抗干扰性能适用于建筑墙体阻碍、无线噪声干扰等恶劣的野外采集环境,同时也缩短了网络握手时间,提高了信息交换速度[6]。低成本、高性能和抗干扰能力强是其能建立前端数据收集的主要优势[7]。
在此,ZigBee通信模块的组建选用星形拓扑[8]结构。由一个ZigBee协调器作为数据的总接收点放置于防水、防风的基站里,其他若干个ZigBee节点可连接温湿度等传感器采集农田环境信息放置于野外。比较于直接传感接收的组织设备,在本地环境下延伸了收发数据的距离,并且减少了主从设备的昂贵成本,也易于保护。通过本地信息的分散收集,ZigBee节点模块无线芯片将数据发送到协调器上,而协调器部分通过嵌入其他设备再对数据进行近一步处理和传输。
2.2 网关硬件的设计
STM32F4系列是一款高性能的微控制器单片机,它具有自适应的加速器,也拥有很高的操作性能,且ZigBee设备和GPRS无线模块与STM32F407型单片机具有很高的嵌入吻合度。STM32F407单片机微控制器单片机中融合了一个周期的数字信号处理器和浮点单元,大大提高了运算速度,可以执行很多复杂计算和数据处理[9]。
通过STM32F407单片机可以实现数据的传输和串接等工作,为后期控制模块提供了良好的基础平台,达到真正的程控网络服务科技发展。从而加长了本地采集数据的距离,可以将STM32F407单片机放置于环境良好的地方,增加了对主要设备的保护,保障了前端数据采集的稳定性与可靠性。
2.3 GPRS无线模块与云服务器的设计
SIM800C是一款四频切换的GSM/GPRS模块,可以在低功耗条件下实现语音、SMS和数据信息的传输[10-11]。内置专门稳压电路,可拓展为支持太阳能长期供电。其性能稳定,封装简便,性价比高,能应用于紧凑型野外产品设计需求。本系统中选用的GPRS功能无线模块最高工作速率可达到2 Mbps,基本能达到实时数据传输的目的[12]。GFSK调制能避免无线噪声干扰,多通信频道设计,满足多点通信和跳频通信的需求,为后期宽区域的通信网络建立提供基础。模块可以通过软件设置数据传输地址,只有收到本机地址请求连接才会成功发送信息,此外还提供中断指示。工作协议引擎具有自动数据包处理、自动分组事务处理功能,并且包含了可选的内置包应答机制,极大地降低了数据丢包率。
撰写STM32F407单片机的数据发送口驱动,使其能与GPRS无线模块实现数据传输。设置可接收数据的远程计算机识别端口号与IP地址,将数据通过GPRS功能发送至云服务器上[13],最终实现远程计算机读取本地数据采集情况的目的。
3 系统软件设计
本系统采用STM32F407单片机作为网关是软件系统的关键部分,接收数据口通过ZigBee进行数据集中采集[14],再加上延时器,对数据采集进行频率上的控制,防止GPRS流量的过度使用。并且可以将采集到的情况显示在LCD屏幕上,再通过GPRS模块的AT指令发送至云服务器[15]。
本节主要介绍前端数据采集处理、TCP/IP协议通信、GPRS模块的AT指令与远程计算机的数据传输。
3.1 前端收据采集处理设计
前端数据的采集:
DHT11_Read_Data(&temperature,&humidity);
LCD_ShowNum(30+40,150,temperature,2,16);
LCD_ShowNum(30+40,170,humidity,2,16);
delay_ms(1 000);
LED1=!LED1;
OOL[0]=temperature;
OOL[1]=humidity;
以温湿度为例,采用DHT11温湿度传感器,STM32F407单片机每隔1 s读取ZigBee协调器传递的信息。伴随着绿色小灯信号,绿灯闪亮一次表示数据读取成功一次,再将信息显示在LCD屏幕上。循环上述指令,以达到每1 s更新一次数据。
3.2 TCP/IP协议通信设计
为了实现不同协议之间的转换,采用TCP协议通信程序进行数据传输[16]。TCP协议可在数据传送之前将其分割为 IP 包进行信息通信,然后在到达目标设备时重组。而TCP/IP协议的源端与终端3次确认性通信更加保障了通信之间的安全性与可靠性。服务器直接通过TCP是面向连接的协议,在收发数据前,必须和对方建立准确无误的连接。一个TCP连接必须要经过3次确认才能建立起来[17],而3次确认的目的是使数据包同步发送与接收,经过3次确认后,ZigBee协调器才向STM32F407单片机正式发送数据。通过private ServerSocket serverSocket()函数绑定一个端口,然后增加InputStream()函数与客户端建立通信,获取输入流,读取信息。等待客户端连接System.out.printl(),再循环监听客户端的连接,达到数据打包传输的连接方法。
3.3 云端服务器与GPRS模块的数据传输设计
云服务器是一种处理能力可弹性伸缩的计算服务,相比于物理服务器,管理方式更加简单高效。多数据处理的情况下,云服务器的优势更为突出。云服务器可以快速构建更稳定、更安全的应用,方便广大客户端使用,还具有多点备份、运行稳定和独享宽带的特点[18]。其虚拟化和分布式存储等云计算技术,能将采集后的大数据和存储的历史资源融合在一起,通过Web方式从远程计算机中读取所需相关数据,进行深度归纳与分析。
GPRS无线模块驱动程序设计如下:
sim800c_send_cmd("AT+CIPSTATUS","OK",500);
if(strstr((const char*)USART3_RX_BUF,"CONNECT OK"))state=0;
if(strstr((const char*)USART3_RX_BUF,"CLOSED"))
{LCD_Fill(30+40,650,lcddev.width,650+16,WHITE);
Show_Str(30+40,650,200,16,"GPRS连接失败’’,16,0);
sim800c_send_cmd("AT+CIPCLOSE=1","CLOSE OK",500);
sim800c_send_cmd("AT+CIPSHUT","SHUTOK",500);
sprintf((char*)p,"AT+CIPSTART="%s","%s","%s"",modetbl[mode],ipaddr,port);
if(sim800c_send_cmd(p,"OK",500)==0)state=0;
}
if(state==0)
{LCD_Fill(70,650,lcddev.width,650+16,WHITE);
if(sim800c_send_cmd("AT+CIPSEND",">",100)==0)
{Show_Str(30+40,650,200,16,"数据发送中",16,0);
printf("CIPSEND DATA:%s ",p1);
u3_printf("%s ",p1);
delay_ms(1 000);
if(sim800c_send_cmd((u8*)0X1A,"SEND OK",1 000)==0)
{LCD_Fill(70,650,lcddev.width,650+16,WHITE);
Show_Str(40+30,650,200,16,"数据发送成功",16,0);
}
else {LCD_Fill(70,650,lcddev.width,650+16,WHITE);Show_Str(40+30,650,200,12,"数据发送失败!",16,0);}
delay_ms(1000);
state=0;
}
else sim800c_send_cmd((u8*)0X1B,0,0);
通过发送AT指令激活GPRS模块发送数据功能。若连接失败,启动重新连接模块;若与云端服务器连接成功,则可在云服务端的远程计算机中读取到前端采集的信息。该段指令循环发送,达到将传感器上大量实时数据收集到云服务器中的目的。GPRS数据传输程序流程如图2所示。
图2 GPRS数据传输程序流程
4 系统测试分析
ZigBee节点采集的温湿度数据如图3所示。
图3 ZigBee节点采集的温湿度数据
远程计算机socket读取的数据如图4所示。
图4 远程计算机socket读取的数据
图3所示的ZigBee模块数据采集情况中,温度20 ℃,湿度63%,每隔1 s发送一次数据,在登录云端服务器后远程计算机准确无误地接收上述数据。相比于短距离数据接收设备,该系统可以实现云端数据采集与储存,不仅延伸了信息传递的距离,还为后期数据分析提供了有利基础。
5 结束语
随着人工智能化时代的到来,前端本地监测与控制技术仍有着很大的拓扑空间。通过云服务器实现物联网不仅是当今电子科技的热点,也提高了各行各业的产业效率,便于进行大数据分析与研究。以低码率实现野外数据采集和传输,较曾经的人力管理与维护,不仅方便且易于管理。经测试,通过云服务的本地远程数据传输技术可以将前端的数据上传到云端服务器,且可以从远程计算机读取,数据结果准确有效。