基于 Web 的作物生长监控系统的
一、摘 要
在农业生产活动中,温度和湿度是影响农作物生长的重要因素。因此,对农作物生长的温湿度监测显得尤为重要。随着互联网技术的飞速发展,“互联网 + 农业”已成为促进农业规模化生产的新动力,采用“互联网 + 农业”的生产模式能有效的优化生产结构,提高生产质量,使农业生产搭上互联网快车势在必行。
本毕业设计在对 A 基地进行调研的基础上。设计并开发了一套基于 Web 的作物生长监控系统,该系统由软件和硬件两部分组成。硬件部分采用了已开发好的多点温湿度采集系统,软件部分采用 Java 开发语言、HTML、CSS、JavaScript 等前端语言以及 SSM(SpringMVC + Spring + MyBatis)框架整合和 MySQL 数据库管理技术进行开发。系统实现了实时推送功能、站点地图展示功能、HTTP 协议爬取农业新闻功能、数据查询功能、温湿度数据分析功能、角色及权限管理功能和站点的创建、导入及导出功能。为了方便维护和版本迭代,系统采用接口开发模式,并引入 Log4j 日志工具将系统运行过程和用户操作过程保存到本地。希望此系统。
本系统在完成设计和测试后,系统运行稳定,界面友好,能有效地提高农业生产的效率,可以达到优化的目的。
关键词:农业;管理平台;Java;MySQL;Web 软件;功能;
二、ABSTRACT
c++
In agricultural production activities, some crops are demanding on the growth environment, and for most crops, the appropriate temperature has more or less impact on their growth and yield.At the same time, with the rapid development of Internet technology, "Internet + agriculture" mode is expected to become a new management platform for large-scale producers, making agricultural production in the Internet environment.Therefore, the implementation of the production mode of "Internet + agriculture" to optimize the production environment can improve the controllability and convenience of the production process.
This graduation project designs and develops a set of crop growth monitoring system based on the Web based on this mode, hoping that this system can bring convenience to the users and improve the income, and improve the efficiency of agricultural production.This system is a set of Web application software developed on the basis of existing multi-point temperature and humidity acquisition hardware, which needs to communicate and share data with the upper computer software.This system USES Java language and a variety of front-end language development, based on SSM (SpringMVC + Spring + MyBatis) framework integration and MySQL database management system development.The system realizes the real-time data display function, site map display function, HTTP protocol crawl agricultural news function, data query function, temperature and humidity data analysis function, role and authority management function and site creation, import and export function.To facilitate maintenance, the system introduces the Log4j logging tool to record the system running process and user operation process and save them locally.
After the design and test of the system, the system runs stably and reaches the expected function target.You can optimize it.
Key words:
agriculture;
Management platform;
Java;
Mysql;
Web software;
Function;
2.1 绪 论
2.1.1 Web 作物生长监控系统的开发背景
2.1.2 项目开发背景
中国传统农业生产以家庭承包的小农经济为主要的经营方式,在解放和发展生产力上做出了巨大的贡献,在困难时期迅速解决了粮食问题。但是随着 21 世纪以来我国的快速崛起,土地成本、人工成本迅速上涨,传统生产方式已经不能满足生产力的发展需求。传统农业生产成本“地板”抬升、农产品价格天花板“触顶”,中国农业行业观察新媒体提出了中国农业发展九大趋势。提到希望通过互联网 + 农业利用现代信息技术,不断提升农业生产、经营、管理和服务水平,促进农业生产方式、销售方式的转变,以此来实现现代农产品的生产和销售。
随着全球互联网技术的快速发展,开源社区和各大互联网公司都在竞相贡献者自己的技术。Java 企业级开发也在进行着快速的演进,从笨重的 EJB 时代到轻量级的 Spring、MyBatis 等框架的诞生,Java 企业应用的开发效率大大提升,低耦合的 Spring 框架在生产和维护代码中都体现出他的卓越性。
在农业的信息化需求和互联网技术的日渐成熟下,“互联网 + 农业”便是提出的解决方案,将传统农业庞大的数据通过计算机分析并上传到互联网上,管理者只需要一台电脑甚至一部手机便可实现随时随地的管理系统。
2.1.3 硬件支持
互联网 + 农业的数据主要是来自生产环境现场,而本系统注重 Web 应用的开发和与上位机的通信。因此,系统的真实数据来自于西安邮电大学已有的多点温湿度采集系统。该系统使用三片 STC89C52RC 单片机、温湿度采集模块 DHT11、显示屏 LCD1602 和无限通信模块 NRF24L01 实现两点采集发送,一点接收串口发送的功能,实物如 1.2 多点温湿度采集系统,接线如图 1.1 单片机接线图 :
2.1.4 开发的意义与应用
规模化农业生产对信息化的需求越来越大,本套农业生产监控系统(Agriculture Temperature and Humidity Manage System, ATHMS)开发的意义就是尽力给予规模化农业生产集体以信息化援助,生产者们可以通过互联网在任何地方访问和管理任何生产地的实时温湿度等情况,也可以进行在线的数据查询、分析服务和站点管理、人员管理服务等。本管理系统希望可以提高规模化农业生产的效率和质量。
本套系统设计之初是为了解决规模化农业生产的信息化问题,更适用于协同管理的农业生产活动。但同样适用于大多数对温度和湿度,尤其是实时温湿度有要求的生产环境中。
2.1.5 系统开发的目标
基于已有的硬件支撑以及上位机支持,本系统的开发目标是一套服务器端应用程序。当应用程序被 Web 服务器部署发布后,处于同一网络下的用户可以在自己的浏览器下通过 URL 访问应用程序。因为开发时间有限,本系统未能追求卓越性能,所有服务均为单机部署,所以服务承载能力有限,但目前可以满足一般的访问需求。
系统旨在服务生产管理者,同时可提供给部分消费者。考虑到数据的安全性,提供了权限分离的功能。系统为受信任的管理者提供管理员角色(root),为临时工作人员等提供伙伴角色(part)。区别在于管理员角色拥有操作数据及修改查看管理员名单等的权力,而伙伴角色仅具有数据浏览、查询的权力。
本系统保留了原有设计以及数据表,在已有数据采集模块下对原有模块进行了拓展,在上位机加入了实时数据发送的功能,修改了原有的表名映射。如图 1.3 系统总体规划图 所示,数据库为两应用程序沟通的桥梁,上位机将数据通过 JDBC 连接保存到服务器端的数据库中。本系统开发的最终目标就是开发 Web 服务并完成所需功能,确保原有功能不减前提下,升级协助 Web 服务开发。
图 1.3 系统总体规划图
2.2 系统开发工具与技术
2.2.1 开发工具简介
2.2.2 集成开发环境 IntelliJ IDEA、eclipse、Dreamweaver
集成开发环境(IDE)用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。IntelliJ IDEA(以下简称 IDEA)提供 Java 语言免费版并以其优越的代码补齐、J2EE 支持、缓存等等被公认为最好用的 IDE 工具。eclipse 作为绝大多数 Java 程序员的入门级免费 IDE 拥有庞大的用户群体,同样提供插件支持。本系统使用 IDEA 开发 Web 应用,eclipse 调试上位机程序。开发时,我们将 Maven、Tomcat 等软件集成。
Dreamweaver(简称 DW)是一款集网页制作和管理网站于一身的网页代码编辑器。DW 支持代码、拆分、实时视图三种模块,同时支持在 HTML 页面中通过快捷键查看修改 CSS 样式,可用于页面初开发。
2.2.3 项目管理工具 Apache Maven
c++
Maven项目对象模型(POM),如果项目庞大,不适宜用package划分模块,maven可以将一个项目拆分成多个子工程。Maven项目无需自行下载依赖,我们仅需要在Maven Repository 网站上找到相应的依赖,粘贴到<dependencies>中导入依赖即可,Maven会下载依赖到本地仓库,下次项目启动时,优先扫描本地仓库,Maven项目也可以以同样的方式导入插件。
2.2.4 Web 应用服务器 Apache Tomcat
Tomcat 是 Apache 开源基金会重点开发的 Web 服务器,JDK 每发布一个新的版本,Tomcat 便发布与之对应的新版本,Tomcat 使用 Java 语言开发,支持 JSP、servlet 技术。Tomcat 使用简单,webapps 目录下的存放的是 Web 应用程序,我们可以将开发的项目直接粘贴到 webapps 目录下,也可以将应用打成 war 包,Tomcat 会自动解压并部署。
2.2.5 数据库管理系统 MySQL 及可视化工具 SQLyog
数据库管理系统有很多,关系型数据库如 MySQL、SQL Server、Access、Oracle 等,MySQL 是一个小型关系型数据库管理系统,因为其体积小、速度快、开源等特点被广泛应用于互联网应用开发中,并且易于上手,为小型网站的开发降低了成本,提高了开发效率。
数据可视化管理工具有很多,SQLyog 是一款简洁的图形化 MySQL 管理工具,通过 SQLyog 还可以连接到指定的 MySQL 数据库,可以实现任意地点管理数据库。
2.2.6 消息中间件 Apache ActiveMQ
同样由 Apache 基金会发布的消息中间件 ActiveMQ 是 Java 语言编写,只需要操作系统安装 JDK 便可执行,ActiveMQ 支持 Java 消息服务(JMS),我们可以使用消息中间件来完成不同应用程序之间的通信。
2.2.7 STC 系列单片机下载烧录软件 STC-ISP
STC-ISP 软件是专为 STC 系列单片机开发的集烧录、串口调试等功能的 PC 应用软件,STC-ISP 通过选择单片机型号、波特率烧录十六进制文件到单片机,也可以通过串口接收/发送数据。
2.2.8 开发技术简介
2.2.9 HTTP 协议简介
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上使用最为广泛的协议之一,属于 OSI 和 TCP/IP 模型的最顶层——应用层。该协议定义于著名的 RFC 2616,制定了客户端和服务器通信的标准。HTTP 协议是请求响应的模型,客户端向服务器端发送请求(request),服务器给客户端响应(response)。HTTP 协议请求包括:请求消息头、请求消息行和请求消息正文。请求消息头必须包括请求类型,一般 GET 方法用于获取资源,POST 方法用于提交,PUT 用来更新资源,DELETE 用来删除资源。HTTP 协议响应同样包括响应消息头、响应消息行和响应消息正文,具体响应的内容由 HTTP 请求的内容和服务器端决定。
2.2.10 WebSocket 协议简介
WebSocket 定义于 RFC 6455,是一种在单个 TCP 连接上进行全双工通信的协议。协议定义服务器可以在客户端未发送请求下主动推送消息到客户端,浏览器和服务器只需要完成一次握手就可以建立持久性连接。这在服务器需要频繁推送消息到客户端的场合下大大减小了因 HTTP 协议频繁请求响应而浪费的资源。使得客户端服务器之间的通信变得更加简单。
2.2.11 RESTFul 风格简介
RESTFul 是一种软件设计的风格,而不是一种标准。其提供的一组软件设计的风格思想一经发布便倍受欢迎。尤其在 B/S 架构软件中倍受欢迎。由 Roy Fielding 博士于 2000 年在其论文中提出,其核心思想是“一切对象皆资源”。使用 RESTFul 设计风格的软件具有简洁,层次感强等优点,同时更易于实现缓存等机制。
2.2.12 Java 语言及其流行框架 SpringMVC、Spring、MyBatis 简介
Java 语言是一种面向对象的高级语言,使用 Java 语言开发项目无需过多关心计算机底层的运转过程,将更多的精力集中在更高层的应用开发过程中。作为一种成熟的面向对象的平台无关语言,Java 语言具有丰富的类库和庞大的开源社区,支持类、封装、继承、多态、抽象、接口、多线程,Java 语言跨平台的特性和各种低耦合开发框架让其在服务器端开发领域很受欢迎。
Java 企业级开发最初使用原始的 Servlet、JSP 开发,由于开发者的水平参差不齐,造成开发项目的耦合度难以控制以及后期代码维护困难等众多问题。随着轻量级一站式开发框架 Spring 的出现,企业级开发进入了新时代。Spring 框架专门为解决软件开发的复杂性而诞生,不仅解决了传统开发的难题,还提供了 Spring Junit 的测试功能。SpringMVC 是 Spring 家族的 Web 层框架,作为 MVC 模式的 controller 层。SpringMVC 作为轻量级前端控制器区别于 struts2,仅是方法级别的控制器,而 struts2 作为类级别则在小型项目开发中稍显笨重,同时 SpringMVC 还提供 RESTFul 风格代码注解,使用@RequestMapping+@ResponseBody 可以返回任意转换后的 JSON 字符串。MyBatis 是一个轻量级的半 ORM 的 JDBC 框架,整合后可由 Spring 来管理,MyBatis 开发可以将 SQL 语句写在配置文件中,同时支持动态 SQL 语句。
2.2.13 JavaScript 语言及 jQuery、BootStrap、HighCharts 框架简介
JavaScript 语言是一种直译式脚本语言,由客户端的浏览器来解释执行,广泛应用于 Web 应用开发中,常用来给网页添加动态效果和简单的数据处理。JavaScript 脚本通过嵌入在 HTML 页面中执行。
基于原生的 JavaScript 语言,社区开发出了众多的前端框架和 JavaScript 插件,JQuery 基于 JavaScript 进行封装,提供了丰富的选择器和独特的链式语法,操作方便。BootStrap 是由美国推特公司开发的基于 HTML、CSS、JavaScript 开发的简介、直观、强悍的前端框架,在其社交网站上使用并被应用于大多网站中,BootStrap 的出现简化了前端布局和样式,满足普通的审美需求。highCharts 是一个完全使用 JavaScript 开发的图表插件,对于个人用户免费,其提供各种数据量、各种图表模型的 JS,开发者只需要根据 API 修改 JS,并在一个 div 容器中引入,便可实现任意的图表展示。
2.3 系统需求分析
2.3.1 系统可行性分析
2.3.2 运行可行性分析
该系统的主要目的是提供规模化农业生产管理者和临时管理者通过互联网对任意生产站点进行管理监控,实现何时何地获取生产信息并提供数据分析和管理功能。因此,此系统除了对数据的实时性要求严格之外,还需要对硬件采集到的数据进行上位机和服务器端程序之间的通信,并且以此功能为基础在管理功能上进行拓展。拓展出的功能模块应该包括:登录注册模块、主页展示模块、数据查询模块、数据分析模块和、权限管理模块以及站点管理模块。各个模块都需要与数据库进行交互,尤其以数据查询和数据分析模块需要多次或者大量的数据库查询操作,所以在数据库系统设计上应该尽量优化 SQL 语句,减少数据查询的压力。并且考虑到单片机采集到的数据存储频率高导致原数据表数据量大,应该尽量不要对原数据表进行频繁查询。
系统运行所需要的软硬件资源并不复杂,且通过局域网或互联网传输数据即可,无需建立专用的通信通道。本系统硬件部分成本低、使用简单,软件部分使用框架开发周期短、可维护性强。软件运行环境仅需要一台接入英特网的服务器即可。
2.3.3 技术可行性分析
本系统是基于多点温湿度采集系统的 Web 开发作物生长监控系统,开发主要分为三大模块:前端开发、数据库设计和后端开发。
前端开发主要使用 IDE:Dreamwaver,使用 HTML 语言进行页面设计,JavaScript 语言进行页面动态化,CSS 语言进行页面渲染。考虑到管理系统的前端页面并不复杂且对美观的需求一般,为了提高开发效率和降低开发难度,引入 jQuery 和 BootStrap 等开源前端框架,引入 HighCharts 图表使数据可视化。引入百度地图接口和搜狐接口进行地图展示和地理位置记录。
数据库设计使用 SQL 语言进行建库、建表以及根据需求设计的增删改查,同时为了减轻频繁的数据库访问造成的压力,本数据库使用触发器对采集到的数据进行粗粒度化处理,将原有的每秒一条记录粗化为每小时一条记录插入到新表中,数据查询和数据分析在数据库中获取的数据也是以新表数据为基准。
后端开发使用 Java 语言,集成开发环境:IDEA+Maven+Tomcat+ActiveMQ。后端开发框架技术以 SpringMVC+Spring+MyBatis 作为基础框架。引入大量开源 jar 包方便开发,主要包括支持 WebSocket 协议的 ActiveMQ、通过 HTTP 请求其他资源的 HTTPClient、JSON 对象转换的 GSON、支持日志记录的 Log4j 等等成熟开源 jar 包。
2.3.4 需求分析
作物生长监控系统为农业生产信息化设计,并且作为一套管理系统,从功能上大致分为五大部分:带有权限校验的登录注册部分、菜单栏部分、主页面信息展示部分、页面功能部分、角色和其他管理部分。各部分功能需求根据这套系统进行详细的功能陈列设计。针对本套系统的用例图如图 3.1 系统用例图 所示:
在确定六大主要模块后对各个模块进行详细的需求分析,分析结果如下:
登录注册模块作为后台管理系统区别于传统页面,需要进行权限划分,根据系统需要展示给不同人群不同的功能页面,将系统的用户划分为两个角色:管理员角色(root)和伙伴角色(part)。从模块功能上划分,管理员与伙伴模块的访问权限除了登录注册、主页数据、数据查询、数据分析的权限外,还具有权限管理、系统配置模块的访问权。所以在系统判断完登录用户的角色后应该反馈给不同角色不同的功能模块。登录功能需要输入用户名和密码,在后台校验正确后才可登录到主页面,否则会提示有“用户名或密码错误”的提示。注册功能需要输入用户名、邮箱、密码和二次确认密码,注册功能还需要往数据库中存储用户 ID、注册时间、伙伴角色、注册城市 IP、状态方便管理。登录注册模块的需求图如图 3.4 登陆注册模块用例图。
主页面数据展示模块需要展示系统的实时状态和给使用者提供一些农业相关的信息。主页面需要包括系统状态栏,用来展示采集点数、管理人员数、普通用户数、异常点数;需要站点的实时状态数据展示栏,包括温度和湿度,使用折线图展示较为清晰;需要监测点分布栏,包括地图的引入以及在地图上实时标注站点以及站点信息;需要中国农业网新闻专家农业面对面栏目的实时新闻引入方便浏览最新的农业动向。主页面模块用例图如图 3.5 主页面模块用例图。
数据查询模块需要提供自定义查询的功能,输入查询条件后查询出符合条件的所有记录,管理员有对数据操作的权力。输入的查询条件包含:起始日期、结束日期、站点,且为了提升系统的鲁棒性,应该设计条件缺省。点击查询按钮后应展示查询的结果和图表展示,如图 3.6 数据查询模块用例图。
数据分析模块作为本系统的核心模块之一,需要具有将大量的温湿度数据进行统计、分析,反馈给使用者的是直观的数据或者图表。为了满足不同的分析需求,将数据分析模块又分成两种分析方式:温度分析和湿度分析。需要设计筛选分析条件,应该具有站点选择、分析范围、开始时间、结束时间、最低门限、最高门限。在点击分析按钮后应展示分析结果,包括表格展示的最大值、最小值、平均值、适宜值占比;包括图表直观展示的温度折线图、各阈值温度占的比重、温湿度的统计以及温度和湿度的对比图。 数据分析模块用例如图 3.7 数据分析模块用例图 所示。
权限管理模块只有管理员才能访问和操作,需要以表格的形式展示所有使用系统角色的用户名、email、角色、注册时间、注册 IP 和对应的修改操作按钮。管理员需要直观的看到同级别及以下用户的信息并对其操作。管理员用户拥有创建用户的权力,为了简化新部署系统的大量新用户注册需求,本系统应提供批量添加用户的功能。注册用户需要给新用户赋予用户名、密码、邮箱、角色,
管理员有权建立同级别的用户。批量添加用户功能我们需要输入创建用户数量、用户名前缀、统一的密码和角色。系统应根据用户名前缀自动补充后缀生成不重复的用户名。
系统配置模块的子模块站点管理的访问权限同样仅属于管理员用户,该模块需要列出所有站点的信息供管理员浏览,包括:站点 ID、站点名、站点区域、添加人、添加时间和站点的修改、删除按钮。还需要站点操作的添加功能,点击添加监测点按钮后弹出模态框输入新站点的信息包括:站点名、站点地址和创建时间,隐式生成和提交的还有站点 ID 和添加人。其中,为了直观的显示站点区域,站点地址选择功能应该为直接在地图插件上选择点,然后获取该点的坐标再进行提交,这样可以再主页面的地图展示上实时地展示所有站点。站点管理模块还需要 Excel 表格的导入导出功能。
管理模块系统用例图如图 3.8 管理模块用例图 所示。
2.4 系统总体设计
2.4.1 系统主要功能设计
系统设计的第一步就是根据需求分析的结果决定系统需要的模块划分,模块划分作为软件系统设计的第一步骤也是核心步骤,决定着最终软件的耦合性、稳定性、复用性等。对于软件需求分析确定的六大功能模块,对各功能模块进行拆分整理合成最终将基于 Web 的作物生长监控系统抽象成五大模块:用户管理模块、主页状态展示模块、数据查询模块、数据分析模块和站点模块。各大模块又需要根据具体的需求分成不同的子模块。具体划分如图 4.1 基于 Web 的作物生长监控系统 所示。
图 4.1 基于 Web 的作物生长监控系统
2.4.2 系统各模块概要设计
2.4.3 用户管理模块
用户管理模块又划分为用户注册模块和用户登录模块。本系统作为一个半开放的管理系统不仅需要内部人员对数据的监控和操作,还需要其他用户自行注册浏览系统的部分非保密数据,所以用户注册功能分为两个入口,一个是从登录页面跳转的普通用户用于浏览非保密数据的入口,一个是管理员在进入系统后从权限管理页面中注册的普通用户或者管理员用户。
对于普通用户注册,因为不具有操作权限,访问索引页面者只需要自行跳转到注册页面,表单提交用户名、密码、邮箱即可完成注册,成为一名普通用户浏览网页信息,但为了方便管理员维护用户列表,在提交表单时在用户信息中额外加入用户 ID、注册时间、注册城市 IP 等。对于管理员注册用户功能,需要由拥有管理员角色的用户在登录系统后在菜单栏进入权限管理模块,然后选择单个/多用户创建,提交不同的表单完成注册,管理员用户生成的用户注册城市 IP 这项默认为 null,以区别注册页面注册的用户。两种注册的流程图如图 4.2 用户注册模块流程图 所示。
图 4.2 用户注册模块流程图
用户登录模块需要进行权限校验,给不同角色用户不同的页面功能,用户登录模块的流程图如图 4.3 用户登录模块流程图 所示。
图 4.3 用户登录模块流程图
2.4.4 主页状态展示模块
作为系统登录后的第一个页面,主页面上需要直观、简洁地展示系统当前的状态和一些全局的信息。需要包括第一行的系统运行状态栏的站点数量、用户数量、管理员数量、异常站点数量;需要包括来自上位机的实时温湿度数据展示;需要包括站点分布以及站点信息的地图展示;需要包括来自中国农业网的农业生产新闻提供。
系统运行状态栏的信息实时性要求不如温湿度展示,在每个用户登录系统时从数据库查询计算即可。温湿度数据需要使用 WebSocket 协议建立长连接,在用户访问首页时,服务器不断向客户端推送当前温湿度的信息,引入 ActiveMQ 消息中间件,会将过时数据丢弃,只接收当前的实时数据以确保数据的真实性。地图模块引入百度地图到页面中,在管理员添加站点后,首页的地图展示模块会将数据库中存在的所有站点进行查询并根据坐标标记在地图上,同时标注出站点名和添加者信息。新闻的数据来自通过 HttpClient 获取的中国农业信息网发布的农业帮助信息。具体的主页状态展示模块设计如图 4.4 主页状态展示流程图 所示。
图 4.4 主页状态展示流程图
2.4.5 数据查询模块
数据查询模块提供数据库中粗粒度化的数据查询功能,该模块的使用首先需要输入查询条件,在输入查询条件后通过 http 请求传递参数到后台程序,后台程序通过 JDBC 在数据库中进行查询,将查询结果进行封装并反馈给前台,进行显示。为了满足所有的查询方式,本数据查询模块满足缺省查询,即只输入开始时间不输入结束时间,系统会查询大于开始时间的所有数据,相反亦然,不输入站点名默认查询所有站点。
数据查询模块为了更直观地显示查询结果以及变化趋势,将结果绘制成折线图与数据表并列显示。
数据查询的流程图如图 4.5 数据查询流程图 所示。
图 4.5 数据查询流程图
2.4.6 数据分析模块
数据分析模块按照温度和适度数据类型划分为温度数据分析模块和湿度数据分析模块。数据分析的第一步是提供分析的条件,包括站点选择、分析范围选择、起始时间选择、阈值选择。在确定提供的分析条件无误后,将分析条件拼装成 JSON 字符串,通过 jQuery 框架的 AJAX 技术将参数传递给对应控制器 Controller。Controller 在收到请求参数后,根据分析的需求调用 MyBatis 框架执行一系列的 SQL 语句得到区间最大值、最小值、平均值和适宜值占比重的值,同时查出大量图表需要的数据。为了优化查询效率,将长的 SQL 语句拆分为多条短的 SQL 语句,将大量的计算交给 Java 程序来处理。数据分析流程图如图 4.6 数据分析流程图所示。
图 4.6 数据分析流程图
2.4.7 站点模块
系统设计为两个检测站点采集监测数据,但是系统具有可拓展性,对于新添加的监测点支持拓展功能,管理员用户需要主动在站点管理模块中添加站点,站点信息会在所有与站点相关的模块中将站点共享,但是站点的命名需要满足规范,即站点名和单片机发送过来的站点名完全对应。
站点模块在管理员访问时可以轻松地看到系统的所有站点以及站点的信息,包括站点名、坐标、创建人、创建时间等。管理员需要对站点进行维护,包括单点创建监测点、批量导入监测点和批量导出监测点的功能。现场人员在部署完成监测设备后记录上位机发送的数据格式和表名,对于一次部署多个监测点,可以先将站点信息录入 Excel 模板中,然后由 Web 系统管理员对做站点信息的导入。站点导入模块的流程图如图 4.7 站点导入流程图 所示。
c++
/
2.4.8 数据库设计
数据库是用来持久化保存系统运行需要保存的用户和应用数据的一个数据集合。区别于文本文件保存,数据库将数据按照一定规律保存在计算机中,可以被各种用户或应用访问共享,且效率高。
本系统根据需求将建立数据库农业温湿度管理系统(athms),将各个模块需要的存储抽象最终抽象成六张表,考虑到上位机的原始设计和数据量大导致的效率问题,本系统最终决定给每一个监测点对应一张表,所以本系统的数据库中表数量与监测点有关。使用 E-R 图来设计表示表之间的管理如图 4.9 数据库 E-R 图 所示。
对 E-R 图的说明:
c++
E-R图主要分成实体、属性和关系三部分。
长方形表示实体,一个实体即一张数据表,每个实体都会有自己的实体对象。
椭圆表示属性,即表中的字段。属性分为唯一属性和非唯一属性,唯一属性指唯一用来标注实体实例的属性,可以是表的Primary Key,用下划线标注;非唯一属性即不加约束的普通属性。
菱形表示表与表之间的关系,有三种:一对一,一对多,多对多。
结合 E-R 图,作物生长监控系统最终抽象出了六张表,用于存储系统运行产生的数据,为了优化系统性能,系统创建了三个触发器。数据表及触发器设计如表所示:
表 4.1 用户信息表
字段 | 类型 | 长度 | 允许空 | 备注 | 名称 |
---|---|---|---|---|---|
id | int | 11 | NO | 自增主键 | 用户 ID |
varchar | 255 | YES | 邮箱 | ||
password | varchar | 255 | NO | 密码 | |
username | varchar | 255 | NO | 唯一键约束 | 用户名 |
role | varchar | 255 | NO | root=管理员,part=用户 | 角色 |
status | int | 1 | NO | 0=未激活,1=激活 | 状态 |
regTime | timestamp | NO | 当前时间戳 | 注册时间 | |
regIp | Varchar | 255 | YES | IP,城市 | 注册 IP |
表 4.2 站点信息表
字段 | 类型 | 长度 | 允许空 | 备注 | 名称 |
---|---|---|---|---|---|
siteId | Int | 11 | NO | 自增主键 | 站点 ID |
siteName | varchar | 255 | NO | 站点名称 | |
siteTable | varchar | 255 | NO | 站点表 | |
siteArea | varchar | 255 | NO | 坐标 | 站点坐标 |
addPerson | varchar | 255 | NO | 添加人 | |
addTime | Varchar | 255 | NO | 添加时间 |
表 4.3 A 站点数据表
字段 | 类型 | 长度 | 允许空 | 备注 | 名称 |
---|---|---|---|---|---|
wholeDate | varchar | 255 | NO | 系统时间 | |
date | varchar | 255 | NO | 日期 + 时 | |
minutes | varchar | 255 | NO | 分 | |
second | varchar | 255 | NO | 秒 | |
temperature | varchar | 255 | NO | 温度 | |
humidity | varchar | 255 | NO | 湿度 |
B 站点的表结构完全相同于 A 站点
表 4.4 A 站点小时制数据表
字段 | 类型 | 长度 | 允许空 | 备注 | 名称 |
---|---|---|---|---|---|
wholeDate | varchar | 255 | NO | 系统时间 | |
date | varchar | 255 | NO | 日期 + 时 | |
temperture | varchar | 255 | NO | 温度 | |
humidity | varchar | 255 | NO | 湿度 |
B 站点小时制的表结构和 A 站点完全相同。
小时制表中的数据使用触发器监听站点数据表,每完成一个小时的数据采集后,触发器会将一小时内的大量数据用一条记录来表示并插入新的小时制表中。触发器的设计如图 4.10 触发器设计 所示。
B 站点的触发器设计和 A 站点相似。触发器将数据粗粒度化并插入到新的表中方便查询操作,每个采集点(表)对应一个触发器。
2.5 系统详细设计与实现
2.5.1 系统设计详情
本系统开发遵循 MVC 模式,即 M(model)模型层封装数据 Java bean,V(view)视图层使用 JSP 技术专注显示,C(controller)控制层作为前端控制器接收页面的请求找模型层处理,响应给视图层。本系统后台部分开发使用 SpringMVC+Spring+MyBatis 整合构成系统的基本框架。SpringMVC 作为一个方法级别的控制层框架,负责处理前台发送的请求和后台处理结果对前台的反馈;Spring 作为项目的管理者,负责管理实体对象的创建和整合管理 SpringMVC 和 MyBatis 框架;MyBatis 作为一个数据访问层框架具有轻量级的优点。
一个系统即一个项目,本项目采用一站式开发,基本目录如图 5.1 源码目录所示。
Java 目录中存放服务器端的所有 Java 代码;resources 中存放 Spring、JDBC、Log4j、Spring-MVC、Spring-MyBatis 的配置文件和 MyBatis 框架映射的 XML 文件;test 目录用来编写测试代码;webapp 目录用来存放前端资源,如 HTML、JSP、CSS、js、img 等文件。
Java 后台代码的包结构如图 5.2 包结构 所示,各包的说明如表 5.1 作物生长监控系统包说明。
包名 | 描述 |
---|---|
com.lyw.serialPort.model | ActiveMQ 要求接收模型必须和发送模型包名相同 |
dao | 数据库访问层包 |
exception | 自定义异常 |
model | 实体模型层包 |
service | 业务逻辑抽象层包 |
Service.impl | 业务逻辑抽象层实现类包 |
utils | 自定义工具类包 |
web.controller | 控制层包 |
web.listener | 监听器层包 |
web.push | WebSocket 建立长连接的包 |
Web 层又分为 controller、listener、push 三个子层。Controller 层作为方法级别的前端控制器,用来处理前端请求并根据请求方法决定是否返回数据。使用 HTTP 协议 GET 方法发送的请求一般要求返回,为了遵守 RESTFul 风格,使用 RequestMapping+ResponsBody 组合注解将返回的对象、集合自动转换为 JSON 字符串发送给前端;Listener 层监听系统的行为;push 层通过 ws(WebSocket)协议,后台向前台不断主动推送温实时数据。表 5.2 对 Web 层的所有类进行了说明,图 5.3 展示了 Web 层代码结构。
实体类名 | 功能说明 |
---|---|
UserLoginController.java | 用户注册、用户登录、用户注销 Controller 实体类 |
AuthorizationManageController.java | 权限管理 Controller 实体类 |
DataAnalysisController.java | 数据分析 Controller 实体类 |
DataQueryController.java | 数据查询 Controller 实体类 |
FileController.java | 后台文件上传、下载 Controller 实体类 |
NavbarController.java | 导航栏转发重定向 Controller 实体类 |
NewsController.java | 新闻获取 Controller 实体类 |
SiteManageController.java | 站点管理 Controller 实体类 |
ContextListener.java | 系统全局监听 Listener 实体类 |
SessionListener.java | Session 会话监听 Listener 实体类 |
SpringWebSocketConfig.java | WebSocket 协议注册配置实体类 |
SpringWebSocketHandler.java | WebSocket 协议通信 Handler 实体类 |
SpringWebSocketHandlerInterceptor;.java | WebSocket 协议拦截器 Interceptor 实体类 |
Service 层为 Controller 层提供服务,Controller 层对应 URL 的方法从前端获取到请求及请求参数后,对请求参数进行处理,Service 层就为 Controller 层提供业务逻辑处理的功能。为了业务的可拓展性,将 Service 抽象成接口,再由实现类对接口进行一一实现。Controller 层将 Service 实体类通过@Autowired 注解注入对用,并使用。Service 层的接口结构如表 5.3 所示,实现类结构如表 5.4 所示,service 层代码结构如图 5.4 所示。
接口名 | 说明 |
---|---|
IUserService.java | 用户权限接口 |
IUserLoginService.java | 用户注册登录接口 |
ISiteService.java | 站点操作接口 |
IMainPageService.java | 主页面数据辅助接口 |
IDataAnalysisService.java | 数据分析接口 |
IDataQueryService.java | 数据查询接口 |
实现类名 | 说明 |
---|---|
UserServiceImpl.java | 用户权限 Service 实现类 |
UserLoginServiceImpl.java | 用户注册登录 Service 实现类 |
SiteServiceImpl.java | 站点操作 Service 实现类 |
MainPageServiceImpl.java | 主页面数据辅助 Service 实现类 |
DataAnalysisServiceImpl.java | 数据分析 Service 实现类 |
DataQueryServiceImpl.java | 数据查询 Service 实现类 |
Dao 层是数据访问层,负责通过 Java 连接数据库,对数据库进行增删改查等访问。本项目开发中 Dao 层使用 MyBatis 框架的 mapper 映射。通过 Spring 管理 MyBatis 配置扫描 Dao 层的所有接口,将接口和 mapper 的 XML 配置文件进行映射查询,将查询结果返回的数据对应数据类型、模型或集合。为了优化数据库查询性能,在 MyBatis 配置中引入 C3P0 数据库连接池。Dao 访问的接口如表 5.5 所示,对应映射的 MyBatis 映射文件如表 5.6 所示,dao 代码结构和 mapper 配置结构如图 5.5 所示。
Dao 接口 | 说明 |
---|---|
IUserLoginDao.java | 用户登录注册相关 Dao 接口 |
IUserDao.java | 用户权限相关 Dao 接口 |
ISiteDao.java | 站点相关 Dao 接口 |
IDataQueryDao.java | 数据查询相关 Dao 接口 |
IDataAnalysisDao.java | 数据分析相关 Dao 接口 |
Mapper 映射配置文件 | 说明 |
---|---|
UserLoginMapper.xml | 用户登录注册 SQL 操作 |
UserMapper.xml | 权限管理 SQL 操作 |
SiteMapper.xml | 站点 SQL 操作 |
DataQueryMapper.xml | 数据查询 SQL 操作 |
DataAnalysisMapper.xml | 数据分析 SQL 操作 |
Model 层作为实体层,在整合了 MyBatis 框架的项目中不仅用来映射存储数据查询的结果,还可用来存储查询的传递的参数条件(ConditionModel)。在新闻爬去中作为数据容器来持久化数据。Model 层的代码类说明及代码结构如表 5.7 和图 5.6 所示。
Model 实体类 | 说明 |
---|---|
AnalysisConditionModel.java | 数据分析条件实体模型 |
HoursDataConditionModel.java | 小时数据分析条件实体模型 |
SiteConditionModel.java | 站点查询条件模型 |
User.java | 用户模型 |
NewsModel.java | 新闻模型 |
BarChartModel.java | 统计图接收数据模型 |
ChartModel.java | 折线图温度接收数据模型 |
ChartHumModel.java | 折线图湿度接收数据模型 |
PieChartModel.java | 饼状图接收数据模型 |
TempAndHumModel.java | 温湿度对比图接收数据模型 |
DataQueryChartModel.java | 数据查询图表接收数据模型 |
HoursDataModel.java | 小时数据实体模型 |
HumPeakModel.java | 湿度特殊值实体模型 |
TempPeakModel.java | 湿度特殊值实体模型 |
为了将频繁使用及可能使用的小功能提取,创建 utils 工具类提供静态方法供各层直接调用,可以避免相同功能代码的重复编写。utils 工具类的说明及代码结构如表 5.8 和图 5.7 所示。
Utils 工具类 | 说明 |
---|---|
ActiveMQCustomer.java | 提供消息中间件消费者获取消息的工具类 |
FormatTimeUtils.java | 时间日期格式化工具类 |
GetRandomDataUtils.java | 获取随机日期的工具类 |
NewsSpiderUtils.java | 爬取指定网站指定模块内容的工具类 |
resources 的目录中存放 mapper 映射文件用户执行 SQL 语句;SQL 用来存放 SQL 文件,必要时可执行;applicationContext.xml 是 Spring 的配置文件,主要用来注册 bean;jdbc.properties 属性文件中存放 Java 连接数据库需要的键值对数据;log4j 和 logback 都是日志类所需要的配置;spring-mvc 和 spring-mybatis 是 Spring 整合 SpringMVC 和 MyBatis 框架的配置文件。配置中存放结构如图 5.8 resources 目录结构所示。
webapps 的目录存放 Web 需要的资源和 web.xml。assets 存放开发页面需要的资源,如 JavaScript、CSS、Images 等,目录结构如图 5.9 webapps 目录结构所示。
这里需要简单说明一下 JSP 页面的代码对应页面及结构。每一个 JSP 对应服务器发送给前端一个页面,frame-top.jsp 和 frame-left.jsp 分别为提取出的页面公共部分,在其他包含该页面处使用
c++
<jsp:include page="frame-left.jsp" />
JSP 代码进行引入。JSP 代码中的数据获取大多为 AJAX 发送异步请求的模式,少数通过 EL 表达式获取。对于表格中的数据,一次典型的数据获取流程是:
组装请求参数为 JSON 对象-> 发送 AJAX 请求-> 接收请求结果 data-> 通过 jQuery 选择器获取表格标签并往表格(table)标签中写入 tr&td 标签及数据。
代码对应页面及 JSP 结构如表 5.9 及图 5.10 所示。
JSP 页面名称 | 说明 |
---|---|
analysis-temp.jsp | 温度数据分析页面 |
authorization-manage.jsp | 用户权限管理页面 |
data-query.jsp | 数据查询页面 |
error.jsp | 错误 404 页面 |
frame-left.jsp | 左框架页面(导航栏) |
frame-top.jsp | 顶框架页面(用来引入资源) |
index.jsp | 索引页面 |
login.jsp | 登录页面 |
main.jsp | 主页面 |
manage-site.jsp | 监测点管理页面 |
register-login.jsp | 用户注册页面 |
analysis-hum.jsp | 湿度数据分析页面 |
另外,软件设计之初规定软件的设计风格是 RESTFul 风格,所以全部的数据传递均采用 AJAX 技术,后台与前台的交互是通过 JSON 字符串,所有带有返回数据的 controller 必须加上注解@RequestMapping+@ResponseBody 注解的组合。RESTFul 风格的软件我们在模块设计时指定每一个 url 对应的功能。
2.5.2 登录注册模块
登录页面提供两个输入框和两个按钮。输入用户名和密码后点击登录按钮,前台页面通过 AJAX 提交到 controller 中。点击重置按钮将清空用户名和密码的输入框,点击“还没有账号?注册一个”将跳转到注册页面。登录模块涉及文件、路径与功能如 表 5.1 登录关系表 所示。
url | 描述 |
---|---|
/userLogin.action | 用户登录接口,跳转主页面,传递系统状态栏数据,校验用户角色 |
/login.jsp | 登录页面接口 |
/toUserRegister.action | 跳转用户注册页面接口 |
/UserLogout.action | 注销登录接口 |
- 表 5.1 登录关系表
- 注册页面设计如图 5.6 注册页面 所示。
- 注册页面表单需要提交的数据有四个,除用户名、密码、邮箱外还通过浏览器获取本机城市、IP 隐式提交到后台。注册涉及的 url 及描述如表 5.2 注册关系表 所示。
url | 描述 |
---|---|
/userRegister.action | 用户注册接口 |
http://pv.sohu.com/cityjson ; | 搜狐接口获取用户 IP、城市 |
表 5.2 注册关系表
2.5.3 实时数据展示(主页)模块
完成用户登录后便进入到主页面模块,主页面模块如图 5.7.1 主页面 1、图 5.7.2 主页面 2、图 5.7.3 主页面 3 所示。
图 5.7.1 主页面 1
图 5.7.2 主页面 2
图 5.7.3 主页面 3
主页面的 url 和描述如表 5.3 主页面关系表 所示。
/getNews.action | 获取新闻 |
---|---|
/selectAllSite.action | 获取所有站点及信息 |
ws://localhost:8086/athmsssm;/websocket/socketServer.action | WebSocket 接收后台发送的数据 |
主页面模块在完成用户登陆后开始向后台请求数据和接收推送的数据,请求系统状态栏的数据、通过 WebSocket 协议接收后台推送的数据、请求所有站点及其创建人信息并标注在地图上、通过 HTTPClient 请求到中国农业网获取最新的农业信息提供链接。
2.5.4 数据查询模块
数据查询模块的页面如图 5.8 数据查询模块页面 所示。
数据查询页面引入 bootstrap-timepicker 插件来获取日期时间,站点信息通过 AJAX 请求到后台通过 jQuery 填充。日期插件如图 5.9 日期插件 所示。
数据查询向后台发送的 AJAX 请求参数 JSON 格式为:
c++
{'site':site, 'starttime':starttime, 'endtime':endtime}
后台的 Controller 层在接收到三个参数后调用 service 层对时间进行格式化处理后调用 Dao 层通过 mapper 映射访问数据库。将查询的结果返回 JSON 字符串。
数据查询的 url 和描述如表 5.4 主页面关系表 所示。
url | 描述 |
---|---|
/selectAllSite.action | 请求所有站点,填充站点选择下拉菜单 |
/dataQuery.action | 传递参数,数据查询 |
/dataDelete.action | 删除数据 |
查询结果如图 5.10 数据查询结果 所示。
2.5.5 数据分析模块
按照所需分析的数据类型将数据分析模块划分为温度数据分析和湿度数据分析两个子模块,两者功能基本相同,以温度数据分析模块为例进行数据分析模块的设计如下。
数据分析模块也可看做时复杂的数据查询模块,提供更多的筛选条件和们先条件,按照特定的查询需求进行数据查询并在后台进行处理和运算,对于分析的结果,是一组庞大的数据,controller 层调用多个 service 层的功能,最终将所有数据封装成一条很长的 JSON 字符串通过一次 AJAX 请求完成数据分析功能。
数据分析模块选择站点,站点选择下拉栏的内容实在访问数据分析页面时通过 AJAX 请求得到的实际站点信息;根据分析密度的需求提供下拉栏分析范围为日、月、年,在提交后后台或者分析范围的值并作判断决定要查询多少条记录;开始时间和结束时间这里选择精确到分的时间以便适应小范围查询;门限的设置则是将数据分为三块,大于期望、符合期望和小于期望。在正确填入分析条件后点击开始分析按钮,发送一次 AJAX 请求,JSON 参数格式:
c++
{ 'site':
site,'analysisScope':
analysisScope,'starttime':
starttime,
'endtime':
endtime,'maxthreshold':
maxthreshold,'minthreshold':
minthreshold
}
温度数据分析页面如图 5.11 数据分析页面 所示。
分析结果如图 5.12 数据分析结果 所示:
数据分析的结果以表格和图像展示,我们可以更直观地对温湿度进行分析,省去了人工地麻烦。
数据分析的 url 和描述如表 5.5 数据分析关系表 所示。
url | 描述 |
---|---|
/selectAllSite.action | 获得所有站点,填充条件栏 |
/getAnalysisResult.action | 获取温度数据分析结果 |
/getHumAnalysisResult.action | 获取湿度数据分析结果 |
2.5.6 用户权限管理模块
用户权限管理模块页面如图 5.13 用户管理模块页面 所示。
该页面分为两部分,创建用户部分和用户列表部分。添加用户的方式采用模态框弹出形式,如图 5.14.1 添加单个用户 和图 5.14.2 批量添加用户 所示。
用户权限管理的 url 和描述如表 5.6 用户权限管理关系表 所示。
url | 描述 |
---|---|
/userShow.action | 展示用户列表 |
/authorOneUser.action | 注册一个用户 |
/authorUsers.action | 批量注册用户 |
表 5.6 用户权限管理关系表
2.5.7 系统配置模块
系统配置模块主要是站点的维护,包括对站点的增删改查功能。站点管理模块里新建的站点必须和生产环境的站点相同,因为在系统上创建站点时需要根据站点名和数据表对应。站点管理的页面如图 5.15 站点管理页面 所示。
系统配置模块提供站点管理的模块,展示站点的详细信息列表,并提供对站点的管理。手动添加监测点的模态框如图 5.16 添加监测点 所示。
这种添加方式手动输入站点名称、选择站点地址、选择添加日期后,点击创建,如果数据格式正确,则将站点信息提交到后台保存到 site 表中。批量添加站点改用 Excel 导入的方式,管理员上传填写完的 Excel 表格,前端 JS 将表格读取并拆分封装成 JSON 字符串发送到后台,后台将数据进行保存。批量导出同样使用 JS 处理,后台将所有站点查询出来后封装成一个 JSON 对象发送到前台,前台通过 JS 处理字符串利用 IO 流创建 Excel 文件并将写入数据。图 5.17 导出的 Excel 所示为导出的 Excel 表格。
2.6 系统测试与维护
2.6.1 系统整体功能完整性测试
系统整体功能完整性测试,根据需求分析提出的需求对应的模块,进行一系列的操作测试系统功能的完整性。
测试环境登录系统访问: 跳转到登录页面
首先是输入错误的用户名或密码:
输入正确的管理员用户名、密码:
输入正确的普通用户用户名、密码:
注册功能测试:
可以看到数据库没有创建同名用户:
然后是邮箱格式测试:
数据查询模块测试:
数据分析模块测试:
批量注册用户测试:
添加监测点测试:
导出测试:
导入测试:
新建的表
测试结论:基本完成软件需求分析中提出的需求。
2.6.2 系统运行日志输出
系统中导入 Log4j 用来记录系统和用户操作的日志,在每个类中使用反射创建 Logger 对象,对象调用不同级别来产生不同级别的日志:分为 INFO、DEBUG、ERROR 三种级别。为了方便程序员后期维护代码,将 DEBUG 和 ERROR 级别的日志分别保存打印到项目目录下的 trace 目录中的文件中,设置以日为单位创建文件保存。这些设置只需要修改 log4j.properties 即可。如图 6.1 输出的 debug 和 error 所示 。
三 总 结
本系统完成了预期的目标(分角色登录、主页实时数据展示、数据查询、数据分析、权限管理和站点管理),既完成了本系统的 Web 页面设计和功能开发,也完成了单片机调试和上位机功能拓展。本系统具有使用范围广、稳定、成本低廉、操作简单的优点,同时本系统记录输出日志类利于后期的迭代开发和维护。由于原有数据表结构问题,本系统的数据库开发存在一些问题,造成数据表数量不定,由于时间及其他客观原因,本系统只能开发出 1.0 版本,无法及时迭代修复问题,但这不影响正常的使用需求。本系统只经过功能完整性测试,未进行专业的软件测试,难免会有很多不足,需要在以后的迭代升级中解决。
四 致 谢
大学四年即将结束,毕业设计的开发过程也些许艰辛,在此我想感谢我的母校对我四年的栽培,感谢我的父母、老师、同学们。感谢我的导师石敏老师给予的一些功能上的建议和意见,以及在软件开发流程上给我的指点,在石敏老师的指点和帮助下,经过我独立的不懈努力终于完成了毕业设计和论文,毕业设计和论文的完成都是一波三折的,在不断的尝试和探索中,让我更加懂得“一分耕耘才有一分收获的道理”。
参考文献
- 智能温室远程登录服务系统的设计与实现(电子科技大学·曾凯华)
- 长沙绿色蔬菜网络化信息系统研发(中南林业科技大学·杜颖)
- 基于SSH框架的农业服务系统的设计与实现(西安电子科技大学·孟娇)
- 作物生长过程检测技术研究与实现(河南科技学院·张帅亮)
- 基于物联网智慧农业信息平台建设精准监测与智能控制系统的研究(曲阜师范大学·张越杰)
- 基于Web Service的为农综合服务平台的设计与实现(扬州大学·陈曦)
- 智能温室远程登录服务系统的设计与实现(电子科技大学·曾凯华)
- 基于物联网智慧农业信息平台建设精准监测与智能控制系统的研究(曲阜师范大学·张越杰)
- 基于物联网的农作物图像与生长环境参数远程监控平台设计(天津理工大学·万梓然)
- 智能温室远程登录服务系统的设计与实现(电子科技大学·曾凯华)
- 基于物联网的温室蔬菜生产管理系统的设计与实现(河南师范大学·房亚飞)
- 基于物联网的农作物图像与生长环境参数远程监控平台设计(天津理工大学·万梓然)
- 诸暨混凝土协会商品砼网络信息监控系统设计与实现(电子科技大学·蒋松海)
- 基于物联网的家庭园艺系统的设计与实现(厦门理工学院·陈润毅)
- 基于物联网的智慧农业控制管理系统(西安工程大学·郑婷婷)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码导航 ,原文地址:https://bishedaima.com/yuanma/36148.html