基于STM32 的果园信息远程监测系统

2019-08-21 03:50林冬婷张泽龙张彬薛秀云姚壮润韩若桐
现代计算机 2019年21期
关键词:土壤湿度网页果园

林冬婷,张泽龙,张彬,薛秀云,姚壮润,韩若桐

(华南农业大学电子工程学院,广州510642)

0 引言

近几年来,随着我国农业种植结构的调整和不断完善,果树的种植面积也在日益扩大[1]。在果园管理的过程中,实时有效地采集果园的光照、温度、湿度等环境因子,对果树的生长发育和果园的生长管理有着重要的影响。传统的人工采集数据,需要投入大量的人力资源和时间,到园区内手工采集,然后数据经过整理进行传递,不仅费时费力,采集到的数据还存在滞后性,管理者不能及时掌握果园环境情况,会影响果树的正常生长[2]。果园信息单纯依靠人工采集难度大,效率低,成本高难以实现长期有效的监测管理,更难以实现果园智能化精细管理。因此建立果园环境信息远程实时监测系统,及时有效地获取果园环境信息,对提高果园产量和果品品质均有重要的作用[3]。

为了实现果园环境信息的实时监测,本设计基于STM32 微处理器,结合湿度传感器FC-28、温度传感器DS18B2,光照传感器BH1705,实现果园环境信息的采集与处理,通过Wi-Fi 芯片ESP8266 与网络服务器实现数据的转接,最后通过电脑Web 网页的设计和手机微信小程序远程、实时地得到果园的湿度、温度和光照等环境信息。

1 系统设计

本系统主要由信息采集、网络通信、服务器、客户端组成。信息采集部分由土壤湿度传感器,光照传感器、温度传感器采集果园信息,交由主控芯片STM32处理转换,并通过ESP8266 由Wi-Fi 路由器将数据上传至网络服务器,用户可以通过手机访问Web 网页远程、实时查看果园的土壤湿度、环境温度、光照强度等信息,系统整个框架如图1 所示。

1.1 信息采集设计

(1)信息采集硬件设计

该系统信息采集硬件部分由STM32 微处理器、土壤湿度传感器、温度传感器、光照强度传感器组成,系统信息采集电路图如图2 所示。

土壤湿度传感器FC-28 是利用土壤湿度不一样时导致传感器的电阻值发生变化,由此得出土壤的湿度[4]。当土壤湿度很低时,电阻非常大,模拟信号AQ 输出值就比较大。反之,当土壤湿度很高时,则电阻非常小,模拟信号AQ 输出值就比较小[5]。

图1 系统总体框架图

图2 系统信息采集电路图

Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。DS18B20 数字温度传感器提供9-Bit 到12-Bit 的摄氏温度测量精度。DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通信。

光照传感器模块采用由半导体制造商ROHM 开发的BH1705 芯片。芯片工作电压3.3V,内置16 位AD 转换器,使用I2C 总线接口进行数据通信,实现高精度的光照强度值的直接输出。

STM32 是整个系统信息采集的核心部分。土壤湿度传感器、温度传感器、光照强度传感器所采集到的果园信息数据会发送到主控芯片STM32,由STM32 进行数据转换,再把转换后的数据发送给Wi-Fi 芯片ESP8266。

在设备上电之后,开始配置时钟和引脚进行初始化。光照强度传感器使用I2C 通信协议,直接操作STM32 的I/O 口进行模拟I2C 操作。土壤湿度传感器输出模拟信号,通过STM32 内置ADC1 进行读取。温度传感器使用单线通信,在STM32 发指令时将引脚配置成推挽输出模式,在接收数据时引脚配置成浮空输入模式。STM32 的UART2 与ESP8266 的UART0 相连进行串口通信,STM32 把要上传到Web 服务器的数据通过串口通信交给ESP8266,由它通过Wi-Fi 上传至网络服务器。同样地,当服务器要向STM32 发送指令时先把指令信号发送给ESP8266,再由它通过串口通信发送给STM32。ESP8266 通过串口发出数据就会触发STM32 的中断函数,STM32 接收数据保存并设置接收标志位。STM32 引脚配置如表1 所示。

表1 STM32 引脚配置表

(2)信息采集软件设计

程序在初始化后就进入循环,若接收标志位被设置,则会对所接收数据进行解析,若数据中包括控制器的指令则会执行相对应的指令并上传当前控制器的状态,若不含指令则不做操作,最后清除接收标志并继续下一个循环周期。若在循环周期里接收标志位没被设置,则会启动传感器采集数据并把采集到的数据转换,STM32 把转换后的数据发送到UART2,即把所需要上传的数据交给ESP8266。STM32 控制系统软件程序流程图如图3 所示。

1.2 网络通信设计

(1)WebSocket 协议

HTTP 协议是由客户端向服务器发出请求,服务器接收请求后做响应。Web 网页客户端要实时得到果园信息,就必须不断地在每一段时间(如500ms)发出GET 请求,得到服务器响应后刷新页面,即HTTP 轮询。果园信息数据同样通过类似HTTP 轮询的方式,不断地向服务器发出POST 请求,将最新的果园信息数据上传到服务器。

图3 STM32控制系统软件程序流程图

Web 网页的实时更新数据与设备上传果园信息数据都是不断地向服务器发出HTTP 请求,导致占用大量网络资源,而且难以实现扩展部分的实时远程控制。若使用HTTP 轮询来实现扩展部分的实时远程控制,设备除了发出POST 请求将果园信息数据上传至服务器,还要再发出GET 请求得到用户所发出的控制指令。

HTTP 轮询已经不能满足现本系统扩展部分对实时远程控制的要求,故使用全双工通信的WebSocket协议。WebSocket 协议最大的特点是可以由服务器主动向客户端发出数据,建立WebSocket 协议连接后,服务器主动向Web 网页发送需要更新的数据而无需由浏览器不断地发出HTTP 请求,有效节省网络资源。另一方面,扩展部分的实时远程控制所需时间不再受限于HTTP 轮询的时间间隔设定,更快地实现远程控制这个扩展功能。

(2)ESP8266

ESP8266 是现市场上的主流低成本IOT 芯片,内置32 位CPU,能够独立运行,也可以作为从机与其他MCU 一起运行。ESP8266 支持softAP 模式、station 模式及softAP 和station 共存的模式。在本设计中,STM32 把果园信息数据处理后通过串口发送给ESP8266,由ESP8266 与路由器进行Wi-Fi 通信,把数据上传至服务器中。ESP8266 充当一个桥梁,一端以WebSocket 协议与服务器进行通信,另一端以串口通信与STM32 进行通信,将STM32 与服务器连接起来,如图4 所示。

图4 ESP8266的作用

1.3 服务器设计

(1)NodeJS

NodeJS 是一个基于ChromeV8 引擎的JavaScript执行平台,常用于快速构建小型网站。借助事件驱动,异步非阻塞I/O 等特性,十分适合数据密集型,I/O 密集型的应用场景。

服务器使用腾讯云主机CentOS 系统,以NodeJS作为后端语言搭建服务器。一方面,它可以把数据以网页的形式显现出来即建立HTTP 服务器。另一方面,它必须支持WebSocket 的连接进行数据交换即建立WebSocket 服务器。

在配置好云服务器之后,使用putty 远程登陆,控制服务器。在服务器上安装完NodeJS 之后,因为国内网络的限制,不能使用npm 来安装模块,故还需要安装国内镜像版本cnpm 来代替使用。使用cnpm 可以简单快速地安装其他模块如Express、mongoose、ws、pm2等模块。

在基础的应用程序框架之上还编写了两个主要脚本,与WebSocket 相关的myWebsocket.js、所有文件共用函数的user.js。myWebsocket.js 主要调用ws 模块来编写WebSocket 相关代码。在编写代码时应该在本地使用编辑器写好,再通过WinSCP 上传到服务器,否则在服务器上使用vim 来编写会相对麻烦。调试期间可在服务器上用Telnet 进行模拟,用tcpdump 进行抓包分析。

bin 启动文件里引用了myWebsocket.js 的Web-Socket 服务器的创建,让WebSocket 服务器共同绑定到80 端口。app.js 分配了路由文件,包括index.js、upload.js、deviceStatus.js。index.js 用于浏览器访问主页时,从数据库里获取数据然后渲染index.ejs 生成网页。upload.js 用于给用户通过HTTP 协议获取或上传数据,遵守RESTful 风格,通过POST 上传数据。deviceStatus.js,通过GET 来获取保存在数据库里当前设备的数据。在实际调试时可以使用Linux 命令curl 来进行模拟或在Windows 下使用Postman 进行获取与上传的动作,以观察实际情况。

myWebsocket.js 脚本文件实现了WebSocket 服务器的创建、WebSocket 广播、通过WebSocket 给数据库上传数据以及从数据库获取数据四个功能。user.js 脚本使用了mongoose 模块对数据库进行操作,包括创建连接、创建集合、创建与读取文档。由于保存数据还需要准确的当地时间,所以还使用了moment 模块来获得当地时间。

(2)Express 框架

Web 网页部分使用NodeJS 官方推荐使用的轻量级Web 框架Express 来搭建。Express 4.x 版本使用生成器,能快速创建应用程序框架,框架主要文件如表2所示。

表2 框架各文件的作用描述

(3)MongoDB

MongoDB 是一个基于分布式文件存储、非关系型(NoSQL)的开源数据库系统。可以直接存储JSON 格式的数据以及使用JavaScript 函数进行操作。MongoDB 将数据存储为一个文档,文档名为其_id 的值,数据结构由键值对组成。

MongoDB 的数据是以“数据库-集合-文档”的形式保存,数据库方面的设计基本要求是能读写当前设备的状态,每当果园信息采集系统上传数据至服务器,都会更新数据库stm32_nodejs 下的集合status 里的文档_id:1 内容,储存形式如图5 所示。

1.4 客户端设计

(1)Web 网页

Web 网页使用HTML 与JavaScript 编写,并使用了WeUI 样式库美化网页的页面,网页的程序流程图如图6 所示。EJS 模板会先根据Mongo 数据库里的最新果园信息数据进行页面初始化,然后向服务器发起Web-Socket 连接请求,HTTP 通过协议转换请求(Upgrade)转为WebSocket 协议。Web 网页实际效果如图7所示。

图5 数据的储存形式

图6 Web网页程序流程图

图7 页面实际效果图

(2)扩展功能

①微信小程序

微信小程序客户端使用wxml 进行页面布局,结合JS 代码具体操作。微信小程序的网络请求必须是HTTPS 协议,所以先申请SSL 安全证书,并使用反向代理服务器Nginx 安装部署,将HTTPS 访问跳转至HTTP 服务器,如图8 所示。进行了SSL 证书安装部署之后,Web 网页也可以通过HTTPS 协议来访问Web页面。

图8 Nginx安装部署SSL证书

微信小程序的程序流程图如图9 所示,小程序的页面初始化之后,加载数据并刷新页面,之后进入循环,微信小程序每隔500ms 向服务器发出HTTPS 网络请求,等接收到响应时就刷新数据,进入下一次循环。当用户点击LED 开关按钮时,就会向服务器发送开关控制指令,最后由服务器向硬件发送,当硬件执行后就会将当前LED 的状态发到服务器,即更新了数据库里面的数据。微信小程序模拟实际效果图如图10 所示,界面实时刷新显示果园的土壤湿度、温度、以及光照强度等信息,此时开启LED2,关闭LED1,模拟系统处于关闭状态。

图9 微信小程序的程序流程图

图10 微信小程序模拟实际效果图

②数据可视化

数据可视化使用百度开源的可视化UI 库Echart,一个纯JavaScript 的图表库,可以流畅的运行在PC 移动设备上,兼容当前绝大部分浏览器。底层依赖轻量级的Canvas 类库ZRender,提供直观、生动、可交互、可高度个性化定制的数据可视化图表。本设计先初始化图像,向已经建立起的WebSocket 连接发出请求,得到过去一个小时的环境温度、光照强度以及土壤湿度等果园信息数据,利用得到的数据进行分析并设置所生成的可视化图表类型,最后生成图像显示在Web 网页界面上,程序流程如图11 所示。

图11 Echart程序流程图

③实时远程控制

为了满足远程控制对实时性的要求,果园信息采集部分的上传数据已经使用WebSocket 协议替代HTTP协议。为了模拟实时远程控制,在本设计里添加两个LED 灯以模拟开关控制,程序流程框架如图12 所示。

图12 实时远程控制框架图

实际效果如图13 所示,在Web 网页客户端(微信小程序同理)点击开启LED1 后,网页执行JavaScript代码通过WebSocket 协议向服务器发出控制指令,服务器马上将控制指令保存到数据库的当前状态以及历史记录,并通过WebSocket 广播将控制指令发送至设备,设备接收到指令后执行指令开启LED1,并将当前LED1 开启、LED2 关闭的设备状态以JSON 字符串格式发送到ESP8266,由ESP8266 通过WebSocket 协议上传到服务器。当服务器接收到设备状态时,将设备状态保存至数据库的当前状态以及历史记录,并通过WebSocket 广播发送至Web 网页客户端。Web 网页客户端从服务器取得最新设备状态刷新页面,LED1 显示开启状态。

图13 远程控制实际效果图

2 系统性能测试

系统的环境信息误差决定于本设计的硬件部分,主要受传感器设备本身的精度所限制。系统数据上传的传输速度与扩展部分的实时远程控制受Wi-Fi 芯片的性能、当前网络状况、云服务器性能三者的限制。测试现场如图14 所示。

图14 测试现场图

土壤湿度仪EM50 作为参考仪器,土壤湿度精度可达0.01%,范围为0%-50%,与本设计的采集值作对比,其测试数据如表3 所示。

表3 土壤湿度测试表

温度测量计HTC-1 作为环境温度的参考仪器,其温度测量精度为±1℃,与本设计的采集值作对比,其测试数据如表4 所示。

表4 温度测试表

光照测试仪器MS6612 作为光照强度的参考仪器,其测量范围为0-20 万LUX,精度达0.01。LUX 与本设计的采样值作对比,其数据测试如表5 所。

表5 光照强度测试表

在实际测试时,土壤湿度的最大误差达到25%,本系统的土壤湿度传感器由于性能极差,并没有明确的性能参数,故出现大误差属于正常情况。解决办法是根据实际应用场景对土壤湿度的精度要求,改用其他价格相对昂贵的土壤湿度传感器代替。

经测试对比,温度在25-30℃测试环境里采集精度为±0.5℃,数据正常。光照强度在2000-6000LUX 的测试环境里采集精度最大误差为22%,光照强度的精度还待提高。

服务器压力测试使用测试Web 服务器性能的开源工具http_load,服务器响应时间如表6 所示,测试中响应最大值9108ms,每秒响应6.4 次。服务器性能主要受购买服务器时的性能配置影响,以及数据库的响应时间影响,性能优化时重点在于数据库的操作。

表6 服务器响应时间测试表

3 结语

本设计实现了基于STM32 的果园信息远程监测系统,该系统利用微处理器STM32 与湿度传感器、温度传感器、光照传感器对果园环境温度、光照强度和土壤湿度等信息进行采集与处理,上传到服务器保存数据,用户可使用手机微信小程序或Web 网页进行远程实时查看果园信息。本系统在测试环境里,土壤湿度的最大误差达到25%,温度的采集精度为±0.5℃,光照强度的采集精度最大误差为22%,在硬件设备性能条件下,该误差在正常范围内,后续将通过改进硬件设备提高精度。此系统可应用于果园管理人员远程监测果树生长环境信息,为及时迅速地采取有效的干预措施提供科学依据。

猜你喜欢
土壤湿度网页果园
天、空、地一体化“未来果园”看一下
CLDAS土壤湿度产品适用性评估
荒漠化露天矿土壤湿度监测模型的构建
——以红沙泉矿区为例
秋天的果园
基于HTML5与CSS3的网页设计技术研究
利用星载GNSS-R DDM反演土壤湿度可行性分析
呼噜猪的大果园
基于51单片机控制花盆土壤湿度
果园
基于HTML5静态网页设计