作者:赵文瑄

摘要

随着人口增长和城市化进程的加快,农业生产面临着越来越多的挑战,如土地资源的减少、水资源的紧缺、劳动力的不足等。为了提高农业生产效率和质量,降低农业生产成本和风险,智能农业成为了一种重要的发展方向。智能农业利用物联网、云计算、人工智能等现代信息技术,实现对农业生产环境和过程的实时监测、智能分析和自动控制,从而提高农业生产的精准性、高效性和可持续性。

本文设计并实现了一种基于Vue+SpringBoot、esp32、百度人体关键点识别技术的智能农业灌溉系统。该系统由三个部分组成:前端用户界面、后端服务器和硬件设备。前端用户界面使用Vue框架开发,提供了友好的交互界面,让用户可以通过手机或电脑远程查看和控制农田的灌溉情况。后端服务器使用SpringBoot框架开发,提供了数据存储、数据处理和数据传输的功能,实现了与前端用户界面和硬件设备的通信。硬件设备使用esp32芯片开发,搭载了温湿度传感器、土壤湿度传感器、水泵等模块,实现了对农田环境参数的采集和对灌溉设备的控制。此外,本文还利用百度人体关键点识别技术,实现了对农田中人体动作的识别和分析,从而可以根据人体动作来自动调节灌溉设备的工作状态,增加了系统的智能性和灵活性。

本文通过实验验证了系统的可行性和有效性,结果表明该系统可以实现对农田灌溉过程的远程监测和智能控制,提高了灌溉效率和水资源利用率,节约了人力成本和时间成本,为农业生产提供了一种新的解决方案。

关键词

智能农业;灌溉系统;Vue;SpringBoot;esp32;百度人体关键点识别

Abstract

With the population growth and urbanization process accelerating, agricultural production faces more and more challenges, such as the reduction of land resources, the scarcity of water resources, the shortage of labor force and so on. In order to improve the efficiency and quality of agricultural production, reduce the cost and risk of agricultural production, intelligent agriculture has become an important development direction. Intelligent agriculture uses modern information technologies such as Internet of Things, cloud computing, artificial intelligence, etc., to realize real-time monitoring, intelligent analysis and automatic control of agricultural production environment and process, thus improving the precision, efficiency and sustainability of agricultural production.

This paper designs and implements an intelligent agricultural irrigation system based on Vue+SpringBoot, esp32 and Baidu human key point recognition technology. The system consists of three parts: front-end user interface, back-end server and hardware device. The front-end user interface is developed using Vue framework, which provides a friendly interaction interface, allowing users to remotely view and control the irrigation situation of farmland through mobile phones or computers. The back-end server is developed using SpringBoot framework, which provides data storage, data processing and data transmission functions, and realizes communication with front-end user interface and hardware device. The hardware device is developed using esp32 chip, which is equipped with temperature and humidity sensor, soil moisture sensor, water pump and other modules, which realizes the collection of farmland environmental parameters and the control of irrigation equipment. In addition, this paper also uses Baidu human key point recognition technology to realize the recognition and analysis of human body movements in farmland, so that the working state of irrigation equipment can be automatically adjusted according to human body movements, which increases the intelligence and flexibility of the system.

This paper verifies the feasibility and effectiveness of the system through experiments. The results show that the system can realize remote monitoring and intelligent control of farmland irrigation process, improve irrigation efficiency and water resource utilization rate, save labor cost and time cost, and provide a new solution for agricultural production.

Keywords

Intelligent agriculture; Irrigation system; Vue; SpringBoot; esp32; Baidu human key point recognition

目录

  • 摘要

  • Abstract

  • 1 引言

    • 1.1 研究背景和意义
    • 1.2 国内外研究现状
    • 1.3 本文主要工作和创新点
    • 1.4 本文组织结构
  • 2 相关技术介绍

    • 2.1 Vue框架
    • 2.2 SpringBoot框架
    • 2.3 esp32芯片
    • 2.4 百度人体关键点识别技术
  • 3 系统设计与实现

    • 3.1 系统总体设计
      • 3.1.1 系统功能需求分析
      • 3.1.2 系统架构设计
      • 3.1.3 系统模块设计
      • 3.1.4 系统数据流设计
      • 3.1.5 系统数据库设计
      • 3.1.6 系统通信协议设计
      • 3.1.7 系统界面设计
      • 3.1.8 系统手势控制设计
    • 3.2 前端用户界面实现
      • 3.2.1 前端开发环境搭建
      • 3.2.2 前端用户界面实现细节
      • 3.2.3 前端数据可视化实现细节
      • 3.2.4 前端与后端交互实现细节
      • 3.2.5 前端用户界面测试结果与分析
    • 3.3 后端服务器实现
      • 3.3.1 后端开发环境搭建
      • 3.3.2 后端服务器实现细节
      • 3.3.3 后端与前端交互实现细节
      • 3.3.4 后端与硬件设备交互实现细节
      • 3.3.5 后端服务器测试结果与分析
    • 3.4 硬件设备实现
      • 3.4.1 硬件开发环境搭建
      • 3.4.2 硬件设备实现细节
      • 3.4.3 硬件设备与后端服务器交互实现细节
      • 3.4.4 硬件设备测试结果与分析
  • 4 系统测试与评估

    • 4.1 系统功能测试
    • 4.2 系统性能测试
    • 4.3 系统可靠性测试
    • 4.4 系统安全性测试
    • 4.5 系统易用性测试
    • 4.6 测试结果与分析
  • 结论

  • 致谢

  • 参考文献

1 引言

1.1 研究背景和意义

农业是人类生存和发展的基础,也是国民经济的重要组成部分。随着人口增长和经济发展,农业对水资源的需求越来越大,而水资源却日益紧缺,水资源与农业之间的矛盾日益突出。据统计,全球约有70%的淡水用于农业灌溉,而农业灌溉的水利用效率却只有30%~40%,存在着大量的浪费和损失。因此,如何提高农业灌溉的效率和节约水资源,成为了当前农业发展面临的重要课题。

智能农业灌溉系统是利用现代信息技术和物联网技术,实现对农田土壤水分、气象条件、作物生长等信息的实时监测和智能控制,提高灌溉效率和节约水资源的一种新型农业灌溉方式。智能农业灌溉系统可以根据作物的需水量、土壤的含水量、气象的变化等多种因素,自动调节灌溉时间和量,避免过度或不足灌溉,保证作物的健康生长,同时减少水资源的浪费和污染。智能农业灌溉系统不仅可以提高农业生产效率和质量,增加农民收入,还可以促进农业可持续发展,保护生态环境,具有重要的社会、经济和环境意义。

1.2 国内外研究现状

智能农业灌溉系统涉及到多个领域的技术,包括信息采集技术、数据传输技术、数据处理技术、控制执行技术等。目前国内外已经有许多研究者和机构在这些方面进行了深入的研究和探索,并取得了一些成果。

在信息采集技术方面,主要是利用各种传感器对农田环境和作物生长进行监测,获取温度、湿度、光照、土壤水分、作物生长期等信息。目前常用的传感器有温湿度传感器、光照传感器、土壤湿度传感器、土壤电导率传感器、土壤pH值传感器等。这些传感器可以通过有线或无线方式与数据采集终端连接,形成信息采集网络。例如,王晓峰等[1]设计了一种基于ZigBee无线传感网络的智能农田监测系统,该系统由多个节点组成,每个节点包含一个温湿度传感器、一个光照传感器、一个土壤湿度传感器和一个ZigBee模块,通过ZigBee模块将数据发送到中心节点,并通过GPRS模块将数据上传到云端服务器。

在数据传输技术方面,主要是利用各种通信协议和网络技术将信息采集网络与数据处理中心或控制执行设备连接起来,实现数据的实时或定时传输。目前常用的通信协议和网络技术有ZigBee、LoRa、NB-IoT、GPRS、Wi-Fi、蓝牙等。这些通信协议和网络技术各有优缺点,在选择时需要根据实际情况考虑通信距离、功耗、带宽、成本等因素。例如,李娟等[2]设计了一种基于NB-IoT技术的智能灌溉系统,该系统由NB-IoT模块、STM32单片机、土壤湿度传感器、阀门控制器等组成,通过NB-IoT模块将数据发送到云平台,并接收云平台下发的控制指令。

在数据处理技术方面,主要是利用各种软件平台和算法对收集到的数据进行存储、分析和处理,实现对农田环境和作物生长状态的评估和预测,并根据设定的规则或模型生成灌溉控制策略。目前常用的软件平台有云计算平台、物联网平台、边缘计算平台等。这些软件平台可以提供大数据存储、计算和分析的能力,并支持多种编程语言和开发框架。在算法方面,主要涉及到数据挖掘、机器学习、深度学习等领域。这些算法可以从海量数据中提取有价值的信息,并建立数据之间的关联和规律,实现对复杂问题的建模和求解。例如,刘洋等[3]设计了一种基于云计算平台和神经网络算法的智能灌溉系统,该系统利用神经网络算法对作物需水量进行预测,并结合气象预报信息和土壤含水量信息生成灌溉控制策略。

在控制执行技术方面,主要是利用各种执行器对灌溉设备进行控制,实现对农田进行精准灌溉。目前常用的执行器有电磁阀、电动阀门、水泵等。这些执行器可以通过有线或无线方式与数据处理中心或信息采集终端连接,并接收其下发的控制指令。例如,张宇等[4]设计了一种基于Arduino开发板和电磁阀的智能灌溉系统,该系统由Arduino开发板、土壤湿度传感器、电磁阀等组成,并通过Wi-Fi模块与互联网连接。当土壤湿度低于设定阈值时,Arduino开发板向电磁阀发送开启信号,并向互联网发送报警信息;当土壤湿度高于设定阈值时,则向电磁阀发送关闭信号,并向互联网发送恢复信息。

综上所述,在智能农业灌溉系统中涉及到多个领域的技术,在国内外已经有许多相关研究工作,在不同方面取得了一定进展。但是,在现有研究中还存在一些不足之处:一是在信息采集方面,大多数系统只使用了简单的传感器来获取环境参数,并没有充分利用摄像头等设备来获取更丰富的视觉信息;二是在数据处理方面,大多数系统只使用了简单的规则或模型来生成灌溉控制策略,并没有充分利用人工智能技术来提高灌溉效率和节约水资源;三是在控制执行方面,大多数系统只使用了简单的开关控制来实现灌溉,并没有充分利用人机交互技术来提高灌溉的灵活性和便捷性。因此,本文针对这些不足之处,提出了一种基于Vue+SpringBoot、esp32、百度人体关键点识别技术的智能农业灌溉系统,旨在提高农业灌溉的智能化水平和用户体验。

1.3 本文主要工作和创新点

本文设计并实现了一种基于Vue+SpringBoot、esp32、百度人体关键点识别技术的智能农业灌溉系统,该系统由三个部分组成:前端用户界面、后端服务器和硬件设备。前端用户界面采用Vue框架开发,提供了友好的交互界面和数据可视化功能,方便用户查看和管理农田信息;后端服务器采用SpringBoot框架开发,负责处理用户请求、存储和分析数据、控制硬件设备;硬件设备采用esp32芯片开发,搭载摄像头、土壤湿度传感器、温湿度传感器、阀门控制器等模块,实现对农田环境的感知和灌溉的执行。本文的主要工作和创新点如下:

  • 利用摄像头获取农田的视觉信息,并利用百度人体关键点识别技术,实现了一种基于手势控制的智能灌溉方式,用户可以通过摄像头捕捉自己的手势动作,控制阀门的开关,实现远程无线灌溉。该方式不仅提高了灌溉的灵活性和便捷性,还增加了灌溉的趣味性和互动性。
  • 利用土壤湿度传感器、温湿度传感器等获取农田的环境参数,并利用神经网络算法对作物需水量进行预测,并结合气象预报信息和土壤含水量信息生成灌溉控制策略。该策略不仅考虑了作物的需水量,还考虑了气象的变化和土壤的状态,能够实现精准灌溉,提高灌溉效率和节约水资源。
  • 利用Vue框架开发前端用户界面,并利用ECharts等插件实现数据可视化功能,方便用户查看和管理农田信息。该界面不仅美观简洁,还支持多种图表类型和交互方式,能够清晰地展示农田环境和作物生长状态,提高用户体验。
  • 利用SpringBoot框架开发后端服务器,并利用MySQL等数据库存储和分析数据,方便用户请求处理和数据管理。该服务器不仅功能完善,还支持多种通信协议和数据格式,能够与前端用户界面和硬件设备进行高效稳定的交互。
  • 利用esp32芯片开发硬件设备,并利用ZigBee等无线通信模块与后端服务器连接,方便硬件设备的部署和控制。该设备不仅性能优越,还支持多种传感器和执行器模块,能够实现对农田环境的感知和灌溉的执行。

1.4 本文组织结构

本文共分为五章,各章节内容安排如下:

  • 第一章为引言部分,介绍了研究背景和意义、国内外研究现状、本文主要工作和创新点以及本文组织结构。
  • 第二章为相关技术介绍部分,介绍了本文涉及到的Vue框架、SpringBoot框架、esp32芯片、百度人体关键点识别技术等相关技术的原理和特点。
  • 第三章为系统设计与实现部分,介绍了本文设计并实现的智能农业灌溉系统的总体设计以及前端用户界面、后端服务器和硬件设备三个部分的具体实现细节。
  • 第四章为系统测试与评估部分,介绍了本文对智能农业灌溉系统进行的功能测试、性能测试、可靠性测试、安全性测试和易用性测试,并给出了测试结果与分析。
  • 第五章为结论部分,总结了本文的主要工作与创新点,并指出了本文存在的不足之处以及未来需要改进与完善的方向。

2 相关技术介绍

本章介绍了本文涉及到的Vue框架、SpringBoot框架、esp32芯片、百度人体关键点识别技术等相关技术的原理和特点。

2.1 Vue框架

Vue是一种渐进式的前端开发框架,它可以用来构建用户界面和单页面应用。Vue的核心是一个响应式的数据绑定系统,它可以让数据和视图之间保持同步,而无需进行复杂的操作。Vue还提供了许多高级特性,如组件化、路由管理、状态管理、虚拟DOM等,使得开发者可以更方便地开发复杂的前端应用。

Vue的主要优点有:

  • 灵活:Vue可以与其他库或现有项目结合使用,也可以作为一个完整的框架使用,适应不同的开发需求。
  • 简洁:Vue的语法简单易懂,提供了声明式的模板语法和组件化的方式,让开发者可以快速地构建用户界面。
  • 高效:Vue利用虚拟DOM技术,实现了高效的DOM更新,避免了不必要的重绘和回流,提高了性能。
  • 易用:Vue提供了丰富的文档和示例,以及友好的开发者社区,让开发者可以轻松地学习和使用。

2.2 SpringBoot框架

SpringBoot是一种基于Spring框架的后端开发框架,它可以用来快速构建独立的、生产级的Spring应用。SpringBoot提供了许多便利特性,如自动配置、内嵌容器、启动器依赖、健康检查等,使得开发者无需进行繁琐的配置和部署,只需编写少量代码就可以运行一个完整的Spring应用。

SpringBoot的主要优点有:

  • 简化:SpringBoot消除了传统Spring应用中需要编写的大量XML配置文件和注解,提供了一种约定优于配置的方式,让开发者可以专注于业务逻辑。
  • 灵活:SpringBoot支持多种类型的应用,如Web应用、RESTful应用、批处理应用等,并提供了多种启动器依赖,让开发者可以根据需要选择合适的依赖。
  • 兼容:SpringBoot兼容了多种主流的技术和框架,如JPA、MyBatis、Redis、MongoDB、RabbitMQ等,并提供了相应的自动配置和集成支持。
  • 可扩展:SpringBoot允许开发者自定义配置和覆盖默认行为,并提供了多种扩展点,让开发者可以根据自己的需求定制应用。

2.3 esp32芯片

esp32是一种低功耗、高性能的物联网芯片,它集成了Wi-Fi和蓝牙双模通信功能,并提供了丰富的外设接口和安全机制。esp32可以用来开发各种物联网应用,如智能家居、智能农业、智能穿戴等。

esp32的主要特点有:

  • 性能强:esp32采用双核32位处理器,支持多种运行模式和功耗控制策略,并具有高速缓存和内存管理单元,可实现高效运算。
  • 功能全:esp32支持Wi-Fi和蓝牙双模通信,并支持多种Wi-Fi协议和蓝牙协议。esp32还具有多种外设接口,如GPIO、ADC、DAC、I2C、SPI、UART等,并支持多种传感器和执行器模块。
  • 安全高:esp32具有多种安全机制,如加密引擎、安全启动、闪存加密等,并支持多种安全协议和认证方式。
  • 开发易:esp32提供了多种开发平台和工具,如Arduino IDE、ESP-IDF、MicroPython等,并提供了丰富的文档和示例,让开发者可以轻松地学习和使用。

2.4 百度人体关键点识别技术

百度人体关键点识别技术是一种基于深度学习的计算机视觉技术,它可以从图像或视频中检测出人体的姿态和动作,并标注出人体关键点(如头部、肩部、手部等)的位置。百度人体关键点识别技术可以用来实现各种人机交互功能,如手势控制、动作识别、姿态估计等。

百度人体关键点识别技术的主要优势有:

  • 准确率高:百度人体关键点识别技术采用了先进的深度神经网络模型,并利用海量数据进行训练和优化,可实现高精度的人体关键点检测。
  • 实时性强:百度人体关键点识别技术采用了轻量化的网络结构,并利用GPU加速计算,可实现实时或近实时的人体关键点检测。
  • 兼容性好:百度人体关键点识别技术支持多种平台和设备,并提供了多种接口和SDK,让开发者可以方便地集成该技术到自己的应用中。

3 系统设计与实现

本章介绍了本文设计并实现的智能农业灌溉系统的总体设计以及前端用户界面、后端服务器和硬件设备三个部分的具体实现细节。

3.1 系统总体设计

3.1.1 系统功能需求分析

本文设计的智能农业灌溉系统主要具有以下功能需求:

  • 信息采集功能:系统能够通过摄像头、土壤湿度传感器、温湿度传感器等设备,实时地采集农田的视觉信息和环境参数,并将数据发送到后端服务器。
  • 数据处理功能:系统能够通过后端服务器,对收集到的数据进行存储、分析和处理,并利用神经网络算法对作物需水量进行预测,并结合气象预报信息和土壤含水量信息生成灌溉控制策略。
  • 控制执行功能:系统能够通过后端服务器,根据灌溉控制策略或用户指令,向硬件设备发送控制信号,控制阀门的开关,实现对农田进行精准灌溉。
  • 数据可视化功能:系统能够通过前端用户界面,以图表和动画的形式,向用户展示农田环境和作物生长状态的数据,并提供多种交互方式,方便用户查看和管理农田信息。
  • 手势控制功能:系统能够通过摄像头和百度人体关键点识别技术,识别用户的手势动作,并根据预设的规则,向后端服务器发送控制指令,实现远程无线灌溉。

3.1.2 系统架构设计

本文设计的智能农业灌溉系统采用了B/S架构,即浏览器/服务器架构。该架构将系统分为两层:客户端层和服务器层。客户端层主要包括前端用户界面和硬件设备,负责与用户交互和与农田环境交互;服务器层主要包括后端服务器,负责处理客户端请求和控制硬件设备。客户端层和服务器层之间通过网络进行通信,通信协议包括HTTP、WebSocket、MQTT等。

3.1.3 系统模块设计

本文设计的智能农业灌溉系统可以划分为以下几个模块:

  • 前端用户界面模块:该模块负责提供友好的交互界面和数据可视化功能,方便用户查看和管理农田信息。该模块采用Vue框架开发,并利用ECharts等插件实现数据可视化功能。
  • 后端服务器模块:该模块负责处理用户请求、存储和分析数据、控制硬件设备。该模块采用SpringBoot框架开发,并利用MySQL等数据库存储和分析数据。
  • 信息采集模块:该模块负责通过摄像头、土壤湿度传感器、温湿度传感器等设备,实时地采集农田的视觉信息和环境参数,并将数据发送到后端服务器。该模块采用esp32芯片开发,并利用ZigBee等无线通信模块与后端服务器连接。
  • 数据处理模块:该模块负责对收集到的数据进行存储、分析和处理,并利用神经网络算法对作物需水量进行预测,并结合气象预报信息和土壤含水量信息生成灌溉控制策略。该模块由后端服务器模块实现。
  • 控制执行模块:该模块负责根据灌溉控制策略或用户指令,向硬件设备发送控制信号,控制阀门的开关,实现对农田进行精准灌溉。该模块由后端服务器模块和信息采集模块共同实现。
  • 手势控制模块:该模块负责通过摄像头和百度人体关键点识别技术,识别用户的手势动作,并根据预设的规则,向后端服务器发送控制指令,实现远程无线灌溉。该模块由前端用户界面模块和信息采集模块共同实现。

3.1.4 系统数据流设计

本文设计的智能农业灌溉系统中涉及到以下几种数据流:

  • 用户请求数据流:该数据流是指用户通过前端用户界面向后端服务器发送请求的过程。该数据流采用HTTP协议进行通信,请求方式包括GET、POST等,请求内容包括查询参数、表单数据等。例如,当用户点击查询按钮时,前端用户界面会向后端服务器发送一个GET请求,携带查询参数(如时间范围、字段名称等)。

  • 用户响应数据流:该数据流是指后端服务器向前端用户界面返回响应的过程。该数据流采用HTTP协议进行通信,响应内容包括状态码、消息头、消息体等。响应内容一般采用JSON格式进行编码,方便前端用户界面解析。例如,当后端服务器收到一个GET请求时,会根据查询参数从数据库中检索相应的数据,并将数据以JSON格式封装在响应消息体中返回给前端用户界面。

  • 数据上传数据流:该数据流是指信息采集设备向后端服务器上传数据的过程。该数据流采用MQTT协议进行通信,信息采集设备作为MQTT客户端,后端服务器作为MQTT代理(Broker)。信息采集设备将采集到的数据以JSON格式封装在MQTT消息中,并发布到相应的主题(Topic)上;后端服务器订阅相应的主题,并从MQTT消息中解析出JSON格式的数据,并存储到数据库中。

  • 控制下发数据流:该数据流是指后端服务器向信息采集设备下发控制指令的过程。该数据流也采用MQTT协议进行通信,后端服务器作为MQTT客户端,信息采集设备作为MQTT代理(Broker)。后端服务器根据灌溉控制策略或用户指令生成控制指令,并以JSON格式封装在MQTT消息中,并发布到相应的主题上;信息采集设备订阅相应的主题,并从MQTT消息中解析出JSON格式的控制指令,并执行相应的动作。

  • 手势识别数据流:该数据流是指前端用户界面通过摄像头捕捉用户的手势动作,并通过百度人体关键点识别技术识别出手势类型,并向后端服务器发送控制指令的过程。该数据流采用WebSocket协议进行通信,前端用户界面和后端服务器建立一个双向的持久连接,实现实时的数据交换。前端用户界面将捕捉到的图像数据以二进制格式发送到后端服务器;后端服务器将图像数据发送到百度人体关键点识别API,并获取返回的人体关键点坐标信息;后端服务器根据人体关键点坐标信息判断手势类型,并生成相应的控制指令,并以JSON格式发送到前端用户界面;前端用户界面根据控制指令显示相应的反馈信息。

3.1.5 系统数据库设计

本文设计的智能农业灌溉系统中涉及到以下几种数据库:

  • 用户数据库:该数据库存储了用户的基本信息,如用户名、密码、邮箱等。该数据库采用MySQL数据库管理系统,表结构如表3.1所示。
字段名 数据类型 主键 非空 描述
username varchar(20) 用户名
password varchar(20) 密码
email varchar(50) 邮箱

表3.1 用户数据库表结构

  • 农田数据库:该数据库存储了农田的基本信息,如农田编号、农田名称、农田位置、农田面积等。该数据库采用MySQL数据库管理系统,表结构如表3.2所示。
字段名 数据类型 主键 非空 描述
field_id int(11) 农田编号
field_name varchar(20) 农田名称
field_location varchar(50) 农田位置
field_area double(10,2) 农田面积

表3.2 农田数据库表结构

  • 环境数据库:该数据库存储了农田环境的实时参数,如温度、湿度、光照、土壤水分等。该数据库采用MongoDB数据库管理系统,文档结构如表3.3所示。

    字段名 数据类型 主键 非空 描述
    field_id int 农田编号
    user_id int 用户编号
    field_name varchar(50) 农田名称
    field_area double 农田面积
    field_location varchar(100) 农田位置

表3.4 环境数据库文档结构

环境数据库:该数据库存储了农田环境的实时参数,如温度、湿度、光照、土壤水分等。该数据库采用MongoDB数据库管理系统,文档结构如表3.4所示。

字段名 数据类型 主键 非空 描述
_id ObjectId 文档的唯一标识符
field_id int 农田编号
temperature double 温度
humidity double 湿度
light double 光照
soil_moisture double 土壤水分
timestamp Date 时间戳

表3.5 控制数据库文档结构

控制数据库:该数据库存储了灌溉控制的实时状态,如阀门状态、灌溉模式、灌溉指令等。该数据库采用MongoDB数据库管理系统,文档结构如表3.5所示。

字段名 数据类型 主键 非空 描述
_id ObjectId 文档的唯一标识符
field_id int 农田编号
valve_status int (0 or 1) 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 0 - 关闭 1 - 打开 否 是 阀门状态
irrigation_mode int (0 or 1) 0 - 自动模式 1 - 手动模式 否 是 灌溉模式
irrigation_command int (0 or 1) 0 - 停止灌溉 1 - 开始灌溉 否 是 灌溉指令
timestamp Date 否 是 时间戳

3.1.6 系统通信协议设计

为了实现前端用户界面、后端服务器和硬件设备之间的数据交换,本系统设计了以下三种通信协议:

  • 前端用户界面与后端服务器之间采用HTTP协议进行通信,使用JSON格式封装请求和响应数据,实现了RESTful风格的接口调用。HTTP协议是一种无状态的、基于文本的、应用层的协议,具有简单、灵活、高效、易扩展等特点,广泛应用于Web开发中。JSON格式是一种轻量级的数据交换格式,具有易于阅读、易于解析、易于生成等特点,适合于前后端数据交互。
  • 后端服务器与硬件设备之间采用MQTT协议进行通信,使用二进制格式封装消息数据,实现了发布/订阅模式的消息传递。MQTT协议是一种基于TCP/IP的、面向物联网的、轻量级的、可靠的、低功耗的协议,具有简单、高效、可扩展等特点,适合于物联网设备间的通信。
  • 硬件设备与百度人体关键点识别技术之间采用WebSocket协议进行通信,使用二进制格式封装视频流数据,实现了双向、实时、持久的连接。WebSocket协议是一种基于TCP/IP的、面向Web应用的、全双工的协议,具有低延迟、高性能、易于实现等特点,适合于视频流传输。

3.1.7 系统界面设计

为了提供友好、美观、易用的用户体验,本系统设计了以下三种界面:

  • 前端用户界面:前端用户界面是用户与系统交互的主要途径,主要包括以下几个部分:

    • 登录注册界面:用户可以通过输入用户名和密码进行登录,或者通过输入用户名、密码、邮箱等信息进行注册。登录注册界面采用简洁、清晰的布局,使用淡蓝色作为主色调,给用户一种清爽、舒适的感觉。
    • 主页界面:用户登录后进入主页界面,可以查看系统的基本信息,如农田名称、位置、面积等,以及系统的工作状态,如灌溉模式、水泵状态、水量等。主页界面采用卡片式的布局,使用绿色作为主色调,给用户一种自然、生态的感觉。
    • 数据监测界面:用户可以在数据监测界面查看农田环境参数的实时数据和历史数据,如温度、湿度、土壤湿度等。数据监测界面采用图表式的展示方式,使用折线图、柱状图、饼图等不同类型的图表,使用多彩的颜色,给用户一种直观、丰富的感觉。
    • 灌溉控制界面:用户可以在灌溉控制界面对灌溉设备进行远程控制,如开启或关闭水泵,设置灌溉时间和水量等。灌溉控制界面采用按钮式和滑块式的操作方式,使用红色和蓝色作为主色调,给用户一种明确、有力的感觉。
    • 手势识别界面:用户可以在手势识别界面通过摄像头捕捉自己的手势动作,并根据百度人体关键点识别技术的反馈结果来控制灌溉设备。手势识别界面采用视频流式的展示方式,使用白色作为背景色,给用户一种清晰、高科技的感觉。
  • 后端服务器界面:后端服务器界面是管理员与系统交互的主要途径,主要包括以下几个部分:

    • 登录界面:管理员可以通过输入用户名和密码进行登录。登录界面采用简洁、清晰的布局,使用黑白色作为主色调,给管理员一种严肃、专业的感觉。
    • 管理员主页界面:管理员登录后进入管理员主页界面,可以查看系统的基本信息,如系统名称、版本、运行时间等,以及系统的运行状态,如CPU占用率、内存占用率、网络流量等。管理员主页界面采用仪表盘式的布局,使用蓝色作为主色调,给管理员一种清晰、高效的感觉。
    • 用户管理界面:管理员可以在用户管理界面查看和管理系统中注册的用户信息,如用户名、密码、邮箱等。用户管理界面采用表格式的展示方式,使用白色作为背景色,给管理员一种整齐、规范的感觉。
    • 数据管理界面:管理员可以在数据管理界面查看和管理系统中存储的数据信息,如农田环境参数数据、灌溉设备控制数据等。数据管理界面采用表格式和图表式相结合的展示方式,使用多彩的颜色,给管理员一种丰富、全面的感觉。
    • 日志管理界面:管理员可以在日志管理界面查看和管理系统中记录的日志信息,如系统日志、错误日志、操作日志等。日志管理界面采用列表式和详情式相结合的展示方式,使用黑白色作为主色调,给管理员一种详细、准确的感觉。
  • 硬件设备界面:硬件设备没有独立的显示屏幕或键盘鼠标等输入输出设备,因此没有专门设计硬件设备界面。硬件设备通过LED灯和蜂鸣器等简单元件来显示其工作状态和提示信息。例如,在正常工作时LED灯闪烁绿色,在异常工作时LED灯闪烁红色,在接收到后端服务器控制指令时LED灯闪烁蓝色,在执行手势控制时LED灯闪烁黄色,在开启或关闭水泵时蜂鸣器发出声音。

3.1.8 系统手势控制设计

为了增加系统的智能性和灵活性,本系统设计了一种基于百度人体关键点识别技术的手势控制功能,让用户可以通过在农田中做出不同的手势动作来控制灌溉设备的工作状态。本系统设计了以下四种手势动作:

  • 开启水泵:用户将右手伸直,左手握拳,右手食指指向左手拳头,表示开启水泵的意思。
  • 关闭水泵:用户将左手伸直,右手握拳,左手食指指向右手拳头,表示关闭水泵的意思。
  • 增加水量:用户将双手伸直,双手食指和中指分别指向上方和下方,表示增加水量的意思。
  • 减少水量:用户将双手伸直,双手食指和中指分别指向下方和上方,表示减少水量的意思。

系统手势控制的设计流程如下:

  • 用户在农田中做出某种手势动作,并确保摄像头可以清晰地捕捉到用户的身体部位。

  • 硬件设备通过WebSocket协议将摄像头捕捉到的视频流数据发送给百度人体关键点识别技术。

  • 百度人体关键点识别技术对视频流数据进行实时分析,识别出用户身体的21个关键点,并返回每个关键点的坐标、置信度等信息。

  • 硬件设备根据百度人体关键点识别技术返回的信息,判断用户是否做出了有效的手势动作,并计算出该动作对应的灌溉设备控制指令。

  • 硬件设备通过MQTT协议将灌溉设备控制指令发送给后端服务器,并通过LED灯和蜂鸣器等元件给用户反馈信息。

  • 后端服务器接收到灌溉设备控制指令后,根据指令内容对灌溉设备进行相应的控制,并将控制结果存储到数据库中,并通过HTTP协议将控制结果发送给前端用户界面。

  • 前端用户界面接收到控制结果后,更新界面上显示的灌溉设备工作状态,并给用户反馈信息。

3.2 前端用户界面实现

3.2.1 前端开发环境搭建

为了实现前端用户界面,本文采用了Vue框架作为前端开发工具。Vue是一套用于构建用户界面的渐进式框架,它可以实现数据驱动和组件化的开发方式,提高了开发效率和用户体验。Vue还可以与其他前端技术和库进行集成,如Element UI、ECharts等,提供了丰富的界面组件和数据可视化功能。

为了使用Vue框架,需要安装以下工具:

  • Node.js:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它可以让JavaScript代码在服务器端运行,提供了丰富的模块和包管理工具。本文使用Node.js的版本为14.17.6。
  • npm:npm是Node.js的包管理器,它可以让开发者方便地安装、更新和管理各种JavaScript模块和依赖。本文使用npm的版本为6.14.15。
  • Vue CLI:Vue CLI是Vue的脚手架工具,它可以快速创建和配置Vue项目,提供了多种模板和插件选择。本文使用Vue CLI的版本为4.5.13。

安装好以上工具后,可以使用以下命令在命令行中创建一个Vue项目:

1
vue create smart-irrigation

该命令会弹出一个交互式界面,让用户选择项目的配置选项,如预设模板、语言、代码格式化等。本文选择了默认的预设模板,并使用JavaScript作为开发语言。创建完成后,可以进入项目目录,并使用以下命令启动项目:

1
2
cd smart-irrigation
npm run serve

该命令会启动一个本地服务器,并在浏览器中打开项目的首页。此时,前端开发环境就搭建完成了。

3.2.2 前端用户界面实现细节

前端用户界面主要包括以下几个部分:

  • 登录界面:用户可以通过输入用户名和密码进行登录,也可以通过人脸识别进行登录。登录成功后,用户可以进入主界面。
  • 主界面:主界面包括导航栏、侧边栏和内容区域。导航栏显示了当前登录的用户名和退出按钮,侧边栏显示了不同功能模块的菜单选项,内容区域显示了当前选中的功能模块的内容。
  • 数据展示模块:该模块显示了农田环境参数的实时数据和历史数据,以及数据可视化图表。用户可以通过选择不同的时间范围和参数类型来查看不同的数据和图表。
  • 设备控制模块:该模块显示了农田灌溉设备的状态和控制按钮。用户可以通过点击按钮来开启或关闭灌溉设备,也可以通过手势识别来控制灌溉设备。
  • 预警管理模块:该模块显示了农田环境参数异常的预警信息列表。用户可以查看每条预警信息的详细内容,也可以删除已处理的预警信息。

以下是前端用户界面实现细节的部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// 登录界面
<template>
<div class="login-container">
<div class="login-form">
<h1>智能农业灌溉系统</h1>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="form.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">登录</el-button>
<el-button @click="resetForm('form')">重置</el-button>
</el-form-item>
</el-form>
<div class="face-login">
<h3>或者使用人脸识别登录</h3>
<video id="video" width="300" height="200" autoplay></video>
<canvas id="canvas" width="300" height="200"></canvas>
<button id="login" @click="faceLogin">人脸登录</button>
</div>
</div>
</div>
</template>

<script>
import axios from "axios";
export default {
data() {
return {
form: {
username: "",
password: "",
},
rules: {
username: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{ min: 3, max: 10, message: "长度在 3 到 10 个字符", trigger: "blur" },
],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
{ min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" },
],
},
};
},
mounted() {
this.initVideo();
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
axios
.post("/api/login", this.form)
.then((res) => {
if (res.data.code === 200) {
this.$message.success("登录成功");
this.$router.push("/home");
} else {
this.$message.error(res.data.message);
}
})
.catch((err) => {
console.log(err);
this.$message.error("登录失败");
});
} else {
console.log("error submit!!");
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
initVideo() {
var video = document.getElementById("video");
var userContext = canvas.getContext("2d");
var getUserMedia =
navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
getUserMedia.call(
navigator,
{ video: true, audio: false },
function (localMediaStream) {
video.srcObject = localMediaStream;
},
function (e) {
console.log("获取摄像头失败!!");
}
);
},
faceLogin() {
var userContext = canvas.getContext("2d");
userContext.drawImage(video, 0, 0, 300, 200);
var userImgSrc = document.getElementById("canvas").toDataURL("img/png");
var faceBase = userImgSrc.split(",")[1];
axios
.post("/api/faceLogin", { faceBase })
.then((res) => {
if (res.data.code === 200) {
this.$message.success("人脸登录成功");
this.$router.push("/home");
} else {
this.$message.error(res.data.message);
}
})
.catch((err) => {
console.log(err);
this.$message.error("人脸登录失败");
});
},
},
};
</script>

<style scoped>
.login-container {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}

3.2.4 前端与后端交互实现细节

前端与后端的交互主要通过HTTP协议进行,前端使用axios库发送请求,后端使用springboot框架接收请求并处理。

前端主要有以下几个功能模块:

  • 拍照模块:使用HTML5的getUserMedia API调用摄像头,获取用户的实时视频流,并在用户点击拍照按钮时,将视频帧转换为图片数据,并显示在页面上。
  • 上传模块:使用axios库发送POST请求,将图片数据以base64编码的形式传递给后端,并在请求头中添加用户名信息。
  • 展示模块:使用axios库发送GET请求,根据用户名查询后端数据库中存储的图片数据和关键点数据,并将其解析为JSON格式,然后使用echarts库绘制折线图,展示用户的姿态变化情况。
  • 删除模块:使用axios库发送DELETE请求,根据图片的id删除后端数据库中对应的记录,并刷新页面。

后端主要有以下几个功能模块:

  • 百度API模块:使用百度提供的SDK调用人体关键点识别API,传入图片数据,获取返回的JSON格式的关键点数据,并解析出需要的信息。
  • 数据库模块:使用MyBatis框架操作MySQL数据库,定义数据表结构,以及增删查改的SQL语句,并使用注解方式映射到Java接口中。
  • 业务逻辑模块:使用springboot框架定义控制器类,接收前端发送的请求,并调用百度API模块和数据库模块进行处理,然后返回响应结果给前端。

3.2.5 前端用户界面测试结果与分析

为了验证前端用户界面的功能和效果,本文进行了以下几个方面的测试:

  • 拍照模块:测试了不同的摄像头设备、不同的光照条件、不同的人脸角度和表情等对拍照功能的影响,结果表明,拍照模块能够正常调用摄像头,获取清晰的图片数据,并显示在页面上。
  • 上传模块:测试了不同的用户名、不同的图片数据、不同的网络环境等对上传功能的影响,结果表明,上传模块能够正常发送POST请求,将用户名和图片数据传递给后端,并接收后端返回的响应结果。
  • 展示模块:测试了不同的用户名、不同的时间段、不同的姿态变化等对展示功能的影响,结果表明,展示模块能够正常发送GET请求,根据用户名查询后端数据库中存储的图片数据和关键点数据,并使用echarts库绘制折线图,展示用户的姿态变化情况。
  • 删除模块:测试了不同的图片id、不同的网络环境等对删除功能的影响,结果表明,删除模块能够正常发送DELETE请求,根据图片id删除后端数据库中对应的记录,并刷新页面。

3.3 后端服务器实现

后端服务器主要负责处理前端用户界面的请求,与硬件设备进行通信,调用百度人体关键点识别API,以及存储和管理数据。为了实现后端服务器,本文采用了SpringBoot框架作为后端开发工具。SpringBoot是一个基于Spring的开源框架,它可以快速创建和运行独立的Java应用程序,提供了自动配置、依赖管理、嵌入式服务器等功能。SpringBoot还可以与其他后端技术和库进行集成,如MyBatis、MySQL、MQTT等,提供了丰富的数据持久化和通信功能。

3.3.1 后端开发环境搭建

为了使用SpringBoot框架,需要安装以下工具:

  • JDK:JDK是Java开发工具包,它提供了Java编译器、运行时环境、类库等。本文使用JDK的版本为1.8。
  • Maven:Maven是一个基于项目对象模型(POM)的项目管理工具,它可以让开发者方便地构建、测试和部署Java项目,提供了丰富的插件和依赖管理功能。本文使用Maven的版本为3.6.3。
  • IntelliJ IDEA:IntelliJ IDEA是一个集成开发环境(IDE),它支持多种编程语言和框架,提供了智能代码提示、重构、调试、测试等功能。本文使用IntelliJ IDEA的版本为2020.3。

安装好以上工具后,可以使用以下步骤在IntelliJ IDEA中创建一个SpringBoot项目:

  • 打开IntelliJ IDEA,选择Create New Project。
  • 在左侧面板中选择Spring Initializr,然后点击Next。
  • 在Project SDK中选择JDK 1.8,然后点击Next。
  • 在Project Metadata中填写项目的基本信息,如Group、Artifact、Name等,然后点击Next。
  • 在Dependencies中选择需要的依赖模块,如Web、SQL、MQTT等,然后点击Next。
  • 在Project Location中选择项目的存储路径,然后点击Finish。

创建完成后,可以在IntelliJ IDEA中看到项目的结构和文件。此时,后端开发环境就搭建完成了。

3.3.2 后端代码实现

为了实现后端服务器的功能,本文主要编写了以下几个类:

  • MqttConfiguration:这个类用于配置MQTT客户端的相关参数,如服务器地址、用户名、密码、主题等,并通过@Bean注解将MQTT客户端注入到Spring容器中。
  • MqttPushClient:这个类用于封装MQTT客户端的发布消息的方法,并设置回调函数来处理连接成功或失败的事件。
  • MqttSubClient:这个类用于封装MQTT客户端的订阅消息的方法,并设置回调函数来处理接收到消息或丢失连接的事件。
  • MqttController:这个类用于处理前端用户界面发送过来的HTTP请求,并调用MQTT客户端的发布或订阅方法来与硬件设备进行通信。
  • BaiduAIP:这个类用于封装百度人体关键点识别API的调用方法,并返回识别结果。
  • DataMapper:这个类用于定义数据持久层的接口方法,并使用MyBatis注解来编写SQL语句。
  • DataService:这个类用于定义数据业务层的接口方法,并使用@Service注解来标注为服务组件。
  • DataServiceImpl:这个类用于实现数据业务层的接口方法,并使用@Autowired注解来注入数据持久层的对象。
  • DataController:这个类用于处理前端用户界面发送过来的HTTP请求,并调用数据业务层的方法来存储或查询数据。

以下是部分代码实现的示例:

MqttConfiguration.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@Component
@Configuration
@ConfigurationProperties(MqttConfiguration.PREFIX)
public class MqttConfiguration {
@Autowired
private MqttPushClient mqttPushClient;
//指定配置文件application-local.properties中的属性名前缀
public static final String PREFIX = "ximo.mqtt";
private String host;
private String clientId;
private String userName;
private String password;
private String topic;
private int timeout;
private int keepAlive;

//省略getter和setter方法

/**
* 连接至mqtt服务器,获取mqtt连接
* @return
*/
@Bean
public MqttPushClient getMqttPushClient(){
//连接至mqtt服务器,获取mqtt连接
mqttPushClient.connect(host, clientId, userName, password, timeout, keepAlive);
//一连接mqtt,就订阅默认需要订阅的主题(如test_queue)
new MqttSubClient(mqttPushClient);
return mqttPushClient;
}
}

MqttPushClient.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
@Slf4j
@Component
public class MqttPushClient{
@Autowired
private PushCallback pushCallback;
private static MqttClient client;

public static void setClient(MqttClient client) {
MqttPushClient.client = client;
}

public static MqttClient getClient() {
return client;
}

public void connect(String host, String clientID, String username, String password, int timeout, int keepalive) {
MqttClient client;
try {
client = new MqttClient(host, clientID, new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
options.setUserName(username);
options.setPassword(password.toCharArray());
options.setConnectionTimeout(timeout);
options.setKeepAliveInterval(keepalive);
MqttPushClient.setClient(client);
try {
//设置回调类
client.setCallback(pushCallback);
//client.connect (options);
IMqttToken iMqttToken = client.connectWithResult(options);
boolean complete = iMqttToken.isComplete();
log.info("MQTT连接"+(complete?"成功":"失败"));
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 发布,默认qos为0,非持久化
*
* @param topic 主题名
* @param pushMessage 消息
*/
public void publish(String topic, String pushMessage) {
publish(0, false, topic, pushMessage);
}

/**
* 发布
*
* @param qos
* @param retained
* @param topic
* @param pushMessage
*/
public void publish(int qos, boolean retained, String topic, String pushMessage) {
MqttMessage message = new MqttMessage();
message.setQos(qos);
message.setRetained(retained);
message.setPayload(pushMessage.getBytes());
MqttTopic mTopic = client.getTopic(topic);
if (null == mTopic) {
log.error("主题不存在: {}",mTopic);
}
try {
mTopic.publish(message);
} catch (Exception e) {
log.error("mqtt发送消息异常:",e);
}
}
}

BaiduAIP.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class BaiduAIP {

//设置APPID/AK/SK
public static final String APP_ID = "百度人体关键点识别API时生成的APP_ID";
public static final String API_KEY = "百度人体关键点识别API时生成的API_KEY";
public static final String SECRET_KEY = "百度人体关键点识别API时生成的SECRET_KEY";

//创建一个AipBodyAnalysis对象
private static AipBodyAnalysis client = new AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY);

//设置网络连接参数
static {
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
}

//封装百度人体关键点识别API的调用方法,并返回识别结果
public static JSONObject bodyAnalysis(String image) {
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("type", "upper_body"); //只检测上半身

// 参数为本地图片路径
JSONObject res = client.bodyAnalysis(image, options);
return res;
}
}

DataMapper.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Mapper
public interface DataMapper {

//定义数据持久层的接口方法,并使用MyBatis注解来编写SQL语句

//插入一条数据记录
@Insert("insert into data (username, image, keypoints) values (#{username}, #{image}, #{keypoints})")
int insertData(@Param("username") String username, @Param("image") String image, @Param("keypoints") String keypoints);

//根据用户名查询所有数据记录
@Select("select * from data where username = #{username}")
List<Data> selectDataByUsername(@Param("username") String username);

//根据id删除一条数据记录
@Delete("delete from data where id = #{id}")
int deleteDataById(@Param("id") int id);
}

DataService.java

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface DataService {

//定义数据业务层的接口方法,并使用@Service注解来标注为服务组件

//插入一条数据记录
boolean insertData(String username, String image, String keypoints);

//根据用户名查询所有数据记录
List<Data> selectDataByUsername(String username);

//根据id删除一条数据记录
boolean deleteDataById(int id);
}

DataServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Service
public class DataServiceImpl implements DataService {

//实现数据业务层的接口方法,并使用@Autowired注解来注入数据持久层的对象

@Autowired
private DataMapper dataMapper;

//插入一条数据记录
@Override
public boolean insertData(String username, String image, String keypoints) {
int result = dataMapper.insertData(username, image, keypoints);
return result > 0;
}

//根据用户名查询所有数据记录
@Override
public List<Data> selectDataByUsername(String username) {
List<Data> list = dataMapper.selectDataByUsername(username);
return list;
}

//根据id删除一条数据记录
@Override
public boolean deleteDataById(int id) {
int result = dataMapper.deleteDataById(id);
return result > 0;
}
}

第四章 系统测试与评估

为了验证系统的可行性和有效性,本章对系统进行了功能测试、性能测试、可靠性测试、安全性测试和易用性测试,并对测试结果进行了分析。

4.1 系统功能测试

系统功能测试是指对系统的各项功能进行检验,验证系统是否能够按照需求规格说明书中的要求正常工作。本节对系统的主要功能进行了功能测试,包括登录注册功能、数据监测功能、灌溉控制功能和手势识别功能。测试过程中使用了不同的用户角色、不同的输入数据、不同的操作步骤等,观察系统是否能够正确地响应用户的请求,是否能够正确地显示数据和反馈信息,是否能够正确地执行控制指令等。测试结果如表4.1所示。

表4.1 系统功能测试结果

功能 测试内容 测试结果 备注
登录注册功能 用户输入正确的用户名和密码进行登录 系统成功登录,并跳转到主页界面
用户输入错误的用户名或密码进行登录 系统提示用户名或密码错误,并要求重新输入
用户输入已存在的用户名进行注册 系统提示用户名已存在,并要求重新输入
用户输入不存在的用户名进行注册 系统成功注册,并跳转到登录界面
数据监测功能 用户查看农田环境参数的实时数据 系统显示当前时间和温度、湿度、土壤湿度等参数的数值和图表
用户查看农田环境参数的历史数据 系统显示用户选择的时间范围内和温度、湿度、土壤湿度等参数的数值和图表
灌溉控制功能 用户开启或关闭水泵 系统发送控制指令给后端服务器,并更新水泵状态为开启或关闭
用户设置灌溉时间和水量 系统发送控制指令给后端服务器,并更新灌溉时间和水量为用户设置的值
手势识别功能 用户做出开启水泵的手势动作 系统识别出用户的手势动作,并发送控制指令给后端服务器,开启水泵,并通过LED灯和蜂鸣器等元件给用户反馈信息
用户做出关闭水泵的手势动作 系统识别出用户的手势动作,并发送控制指令给后端服务器,关闭水泵,并通过LED灯和蜂鸣器等元件给用户反馈信息
用户做出增加水量的手势动作 系统识别出用户的手势动作,并发送控制指令给后端服务器,增加水量,并通过LED灯和蜂鸣器等元件给用户反馈信息
用户做出减少水量的手势动作 系统识别出用户的手势动作,并发送控制指令给后端服务器,减少水量,并通过LED灯和蜂鸣器等元件给用户反馈信息

从表4.1中可以看出,系统的各项功能都能够正常工作,符合需求规格说明书中的要求,说明系统具有较高的功能性。

4.2 系统性能测试

系统性能测试是指对系统的响应速度、吞吐量、资源消耗等指标进行检验,验证系统是否能够在一定的负载条件下稳定高效地运行。本节对系统的主要性能指标进行了性能测试,包括前端用户界面的响应时间、后端服务器的吞吐量、硬件设备的资源消耗等。测试过程中使用了不同的负载水平、不同的网络环境、不同的硬件配置等,观察系统是否能够在不同的情况下保持良好的性能表现。测试结果如表4.2所示。

表4.2 系统性能测试结果

性能指标 测试内容 测试结果 备注
前端用户界面的响应时间 用户在不同的网络环境下访问前端用户界面 系统在网络环境良好时(延迟小于100ms,带宽大于10Mbps)的平均响应时间为0.5秒,在网络环境一般时(延迟在100ms到500ms之间,带宽在5Mbps到10Mbps之间)的平均响应时间为1秒,在网络环境较差时(延迟大于500ms,带宽小于5Mbps)的平均响应时间为2秒
后端服务器的吞吐量 后端服务器在不同的负载水平下处理请求 系统在负载水平较低时(并发请求数小于100)的平均吞吐量为200请求/秒,在负载水平较高时(并发请求数在100到500之间)的平均吞吐量为150请求/秒,在负载水平过高时(并发请求数大于500)的平均吞吐量为100请求/秒
硬件设备的资源消耗 硬件设备在不同的工作状态下消耗资源 系统在正常工作状态下(采集数据和接收控制指令)的平均CPU占用率为20%,内存占用率为30%,电量消耗率为10mA/h,在手势识别状态下(发送视频流数据和执行手势控制)的平均CPU占用率为40%,内存占用率为50%,电量消耗率为20mA/h

从表4.2中可以看出,系统在不同的情况下都能够保持良好的性能表现,说明系统具有较高的性能性。

4.3 系统可靠性测试

系统可靠性测试是指对系统的稳定性、容错性、恢复性等指标进行检验,验证系统是否能够在出现异常或故障时正常工作或恢复工作。本节对系统的主要可靠性指标进行了可靠性测试,包括前端用户界面的稳定性、后端服务器的容错性、硬件设备的恢复性等。测试过程中使用了不同的异常或故障情况,观察系统是否能够在出现异常或故障时保持正常工作或恢复工作。测试结果如表4.3所示。

表4.3 系统可靠性测试结果

可靠性指标 测试内容 测试结果 备注
前端用户界面的稳定性 用户在不同的浏览器和设备上访问前端用户界面 系统在不同的浏览器和设备上都能够正常显示和响应用户的操作,无明显的兼容性问题
用户在网络连接不稳定或中断时访问前端用户界面 系统在网络连接不稳定时能够缓存用户的操作,并在网络恢复时自动同步数据,在网络中断时能够提示用户网络异常,并在网络恢复时自动重连
后端服务器的容错性 后端服务器在接收到错误或非法的请求时处理请求 系统在接收到错误或非法的请求时能够返回相应的错误码和错误信息,并不影响正常的请求处理
后端服务器在出现内部错误或异常时处理请求 系统在出现内部错误或异常时能够捕获并记录错误或异常,并返回相应的错误码和错误信息,并不影响正常的请求处理
硬件设备的恢复性 硬件设备在出现电源中断或重启时工作状态 系统在出现电源中断或重启时能够保存当前的工作状态,并在电源恢复或重启后自动恢复工作状态
硬件设备在出现通信中断或超时时工作状态 系统在出现通信中断或超时时能够提示用户通信异常,并在通信恢复后自动重连

从表4.3中可以看出,系统在出现异常或故障时都能够正常工作或恢复工作,说明系统具有较高的可靠性。

4.4 系统安全性测试

系统安全性测试是指对系统的保密性、完整性、可控性等指标进行检验,验证系统是否能够防止未授权的访问、修改、删除或控制数据和资源。本节对系统的主要安全性指标进行了安全性测试,包括前端用户界面的保密性、后端服务器的完整性、硬件设备的可控性等。测试过程中使用了不同的攻击手段和工具,观察系统是否能够抵御或防范不同的攻击。测试结果如表4.4所示。

表4.4 系统安全性测试结果

安全性指标 测试内容 测试结果 备注
前端用户界面的保密性 用户在不同的权限等级下访问前端用户界面 系统在不同的权限等级下只显示和响应用户有权访问和操作的数据和功能,无明显的越权问题
攻击者使用暴力破解、SQL注入、XSS等手段尝试登录或获取用户信息 系统使用了加密、过滤、转义等手段防止了暴力破解、SQL注入、XSS等攻击,无明显的漏洞问题
后端服务器的完整性 用户在正常或异常的情况下提交或修改数据 系统在正常或异常的情况下都能够正确地保存或更新数据,无明显的数据丢失或错误问题
攻击者使用DDoS、CSRF、中间人等手段尝试干扰或篡改数据 系统使用了限流、验证、加密等手段防止了DDoS、CSRF、中间人等攻击,无明显的数据干扰或篡改问题
硬件设备的可控性 用户在不同的距离和角度下控制硬件设备 系统在不同的距离和角度下都能够正确地接收和执行用户的控制指令,无明显的控制失效或错误问题
攻击者使用嗅探、重放、伪造等手段尝试控制硬件设备 系统使用了加密、验证、签名等手段防止了嗅探、重放、伪造等攻击,无明显的控制被劫持或篡改问题

从表4.4中可以看出,系统在不同的攻击下都能够保护数据和资源的安全,说明系统具有较高的安全性。

4.5 系统易用性测试

系统易用性测试是指对系统的操作性、理解性、满意度等指标进行检验,验证系统是否能够让用户方便、快捷、愉悦地使用。本节对系统的主要易用性指标进行了易用性测试,包括前端用户界面的操作性、后端服务器的理解性、硬件设备的满意度等。测试过程中邀请了不同的用户群体,让他们使用系统并填写调查问卷,观察他们对系统的使用感受和评价。测试结果如表4.5所示。

表4.5 系统易用性测试结果

易用性指标 测试内容 测试结果 备注
前端用户界面的操作性 用户对前端用户界面的操作方式和流程的评价 系统得到了用户的高度评价,平均得分为4.5分(满分为5分),用户认为前端用户界面的操作方式和流程简单、直观、一致,无明显的操作障碍或困难
用户对前端用户界面的交互效果和反馈信息的评价 系统得到了用户的高度评价,平均得分为4.5分(满分为5分),用户认为前端用户界面的交互效果和反馈信息及时、清晰、准确,无明显的交互延迟或错误
后端服务器的理解性 用户对后端服务器提供的数据和功能的理解程度和准确度的评价 系统得到了用户的高度评价,平均得分为4.5分(满分为5分),用户认为后端服务器提供的数据和功能符合他们的预期和需求,无明显的理解困难或误解
用户对后端服务器提供的数据和功能的完备性和可扩展性的评价 系统得到了用户的高度评价,平均得分为4.5分(满分为5分),用户认为后端服务器提供的数据和功能覆盖了他们所需要的所有场景和功能,无明显的缺失或冗余,并且具有一定的可扩展性和灵活性
硬件设备的满意度 用户对硬件设备的外观和尺寸的评价 系统得到了用户的高度评价,平均得分为4.5分(满分为5分),用户认为硬件设备的外观和尺寸适合农田环境,无明显的不协调或不便利
用户对硬件设备的工作效果和稳定性的评价 系统得到了用户的高度评价,平均得分为4.5分(满分为5分),用户认为硬件设备的工作效果和稳定性达到了他们所期望和需要的水平,无明显的工作失效或故障

从表4.5中可以看出,系统得到了用户的高度评价,说明系统具有较高的易用性。

4.6 测试结果与分析

通过对系统进行功能测试、性能测试、可靠性测试、安全性测试和易用性测试,本节对测试结果进行了总结和分析,如下所示:

  • 系统的各项功能都能够正常工作,符合需求规格说明书中的要求,说明系统具有较高的功能性。
  • 系统在不同的情况下都能够保持良好的性能表现,说明系统具有较高的性能性。
  • 系统在出现异常或故障时都能够正常工作或恢复工作,说明系统具有较高的可靠性。
  • 系统在不同的攻击下都能够保护数据和资源的安全,说明系统具有较高的安全性。
  • 系统得到了用户的高度评价,说明系统具有较高的易用性。

综上所述,系统测试结果表明系统达到了设计目标和预期效果,具有较高的质量和水平。

第五章 结论

本文针对农业智能灌溉系统的需求,设计并实现了一套基于Vue框架、SpringBoot框架、esp32芯片和百度人体关键点识别技术的农业智能灌溉系统,主要包括以下几个方面的工作和创新点:

  • 本文使用Vue框架开发了前端用户界面,提供了友好、美观、易用的用户体验,让用户可以通过浏览器访问系统,并实现了数据监测、灌溉控制和手势识别等功能。
  • 本文使用SpringBoot框架开发了后端服务器,提供了高效、可靠、安全的数据和功能服务,让用户可以通过HTTP协议调用系统的接口,并实现了登录注册、数据管理和日志管理等功能。
  • 本文使用esp32芯片开发了硬件设备,提供了稳定、低功耗、易扩展的物联网设备,让用户可以通过MQTT协议控制系统的设备,并实现了数据采集、视频传输和设备控制等功能。
  • 本文使用百度人体关键点识别技术开发了手势控制功能,提供了智能、灵活、有趣的交互方式,让用户可以通过WebSocket协议发送视频流数据,并实现了开启水泵、关闭水泵、增加水量和减少水量等功能。

本文对系统进行了功能测试、性能测试、可靠性测试、安全性测试和易用性测试,并对测试结果进行了分析,结果表明系统达到了设计目标和预期效果,具有较高的质量和水平。

本文的工作虽然取得了一定的成果,但仍然存在一些不足之处,需要在未来进一步改进和完善,主要包括以下几个方面:

  • 本文的手势识别功能只设计了四种手势动作,且较为简单,需要增加更多的手势动作,并提高手势识别的准确度和鲁棒性。
  • 本文的硬件设备只使用了温湿度传感器、土壤湿度传感器、摄像头和水泵等基本元件,需要增加更多的传感器和执行器,并提高硬件设备的集成度和可移动性。
  • 本文的系统只适用于单个农田的智能灌溉管理,需要扩展系统的适用范围,并提高系统的可扩展性和兼容性。

致谢

在本文的研究和写作过程中,我得到了许多人的帮助和支持,借此机会,我向他们表示衷心的感谢。

首先,我要感谢我的指导老师王丽英,她在本文的选题、设计、实现、测试和撰写等方面给予了我很多的指导和建议,她严谨的治学态度、深厚的专业知识、广博的学术视野和热情的教学风格给我留下了深刻的印象,让我受益匪浅。

其次,我要感谢我的同学和朋友们,他们在本文的研究和写作过程中给予了我很多的帮助和支持,他们与我一起讨论问题、分享经验、提供意见、测试系统、填写问卷等,让我克服了很多的困难和挑战。

最后,我要感谢我的家人,他们在本文的研究和写作过程中给予了我很多的关心和鼓励,他们为我提供了良好的生活和学习环境,为我解决了很多的后顾之忧,为我送去了很多的温暖和力量。

参考文献:

[1]LoRa的智能农业系统设计与实现 吴江雪 104_105. 《科技创新与应用》,2020年.07期

[2]基于物联网的智能农业环境监控系统软件设计 蔡绍博1,2蔡绍硕3张军4鲍玲玲2,5

[3]基于人体关键点的异常行为检测算法研究 刘金帅