基于ESP8266模块的数据采集与上传系统的设计与实现
2018-09-22王欣蕾刘念
王欣蕾 刘念
摘 要:传感器数据的采集在物联网系统,智慧城市等多种信息产业中扮演着最基础的,最根本的角色。但在数据采集完成后,将数据传输到服务器中却是一件有着多样化解决方案的事务。在众多方式当中,使用wifi通信模块ESP8266相对功耗较低,适用场景灵活,成本低廉,逐渐成为多数工程人员的首选方案。
关键词:ESP8266;服务器;数据采集
1 系统硬件组成
本系统主要由三部分组成,数据采集模块,通信模块和服务器。数据采集模块可以是任意的单片机芯片,如51单片机,AVR单片机,stm32芯片等等。通信模块采用乐鑫公司出品的ESP8266物联网的芯片。鉴于ESP8266的可编程性和扩展性,对于采集的数据只有数字量的系统来说,甚至可以使用ESP8266代替数据采集模块,使其同时扮演两个角色。服务器可以是腾讯云,阿里云等云服务器,亦可以是局域网内的本地服务器,主要负责接收处理和存储最终的传感器数据。
1.1 单片机
单片机(Microcontrollers)是一种集成电路芯片,是采用超大規模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
1.2 ESP8266无线通信模块
ESP8266是一款WIFI通信的芯片,使用了3.3V的直流电源,体积小,功耗低,支持透传,丢包现象不严重。ESP8266可以配置成station(即client模式)、AP(即wifi热点模式)、station+AP三种模式,就是说模块可以当成一个设备(client)连接局域网内的路由,也可以设置成是一个路由(sever),也可以既作为局域网里面的client同时又是其他client的sever。同时该模块支持tcp传输,既可以配置为tcp server也可以配置为tcp client。参考ESP8266的SDK文档我们发现,ESP8266支持三种开发方式,一种是常用的AT指令,通过RX,TX串口向ESP8266发送指令。如AT+RST,AT等等。然而遗憾的是,通过AT指令的方式并不能有效的实现我们预期的功能,如果直接使用ESP8266作为MCU去完成相关的功能设计是并不理想(上位机发送指令常常会出现不可预料的错误,)。第二类开发方式是通过NodeMCU的代码方式烧写,NodeMCU采用Arduino语言将ESP8266的SDK文档中C语言代码高度封装,使用方式与Arduino类似。相比于AT指令,NodeMCU支持对ESP8266所有GPIO引脚接口的控制,提高了可阅读性却不失强大的功能。第三种方式是利用Lua语言脚本的为ESP8266编写控制程序,目前市面上的集成AVR芯片大都采用这种方式。第四种方式即采用官方的SDK进行开发。本系统采用NodeMCU的方式设计相关功能实现。
1.3 服务器
服务器:server表示软件程序,这种程序向外提供各种服务,有ftp服务,网页服务,数据库服务等。或者server表示硬件,就是主机。
2 系统架构设计
本系统上电之后,数据采集模块并非会一直采集数据向通信模块发送,因为这样大大增加了数据采集模块MPU的负担。本系统采用问答的方式,通信模块每隔固定时间间隔就会像数据采集模块发送数据请求,发送请求之后会原地进行等待,直到收到数据。数据采集模块收到请求之后才会执行数据的采集,随后发送给通信模块,数据发送后则会等待下一次数据请求。当通信模块接收完成数据之后,便可以通过wifi连接采用TCP或UDP协议将数据发送给指定的服务器,完成一次数据的采集。
3 服务器相关配置
本系统的服务器可以才采用TOMCAT8.0版本,利用MYSQL,Servlet,JSP,HTML,CSS3,JAVASCRIPT等技术搭建服务器的前端和后台。通过编写不同的Servlet去完成,响应不同的功能,达到数据展示需要的目的。如果单纯为了数据简单显示,也可以进设置一个socket应用程序去实现相应功能。