本文利用农业物联网的相关优势,搭建了一个基于 STM32 、机智云平台的农作物需水量计算系统,利用传感器采集农作物的现场环境信息后通过 ZigBee 协议发送到数据处理终端,根据设置的作物生长系数计算出对应的作物需水量;同时将相关的数据经过 4G 模块传输至机智云物联网平台,实现用户足不出户即可了解到农作物的相关信息,为制定合理的灌溉制度提供数据参考,达成适时灌溉和节约用水等目的。
实物图和App操作界面
01系统总体设计
基于机智云物联网平台的农作物需水量计算系统,利用嵌入式微控制器采集作物的温湿度、风速环境信息,同时采用 ZigBee 技术进行数据的传输,将采集的作物环境信息传输至数据处理终端;当数据处理终端接收到相关的数据后,对作物需水量进行计算;然后通过 4G 技术将相关的数据与机智云平台建立连接,农业管理者可以在任一地点通过机智云后台或移动设备查看和设置相关的数据。该系统框图和ZigBee 组网示意图如下所示。
图1:系统框图
图2:ZigBee 组网示意图
02系统硬件设计
系统硬件主要分为农作物现场环境信息采集终端和数据处理终端两个部分。农作物现场环境信息采集终端的主要作用是通过 STM32 主控单元采集农作物的温湿度、风速信息并通过 ZigBee 无线通信协议将相应的数据传输到数据处理终端。
数据处理终端则是依据农作物数据参数和环境数据信息实现对作物腾发量的实时预测,并根据作物系数计算出相应的作物需水量,同时通过 4G 模块接入机智云平台和 APP,实现数据的远程监测和管理。整个硬件设计的架构框图如所示。
图3:硬件系统总体框图
03系统硬件模块及电路设计介绍
► STM32主控单元的选择与设计
对农作物生长环境信息进行采集和传输的主控芯片选择了STM32F103VBT6 芯片,其内核使用Cortex-M3 架构,芯片内部包含有 ADC/DAC/2I C /USART/SPI 等外设资源,为数据通信的采集传输提供了足够丰富的接口资源。
图4:STM32F103VBT6 芯片实物图
此外,以 STM32F103VBT6 为核心的主控单元的最小外围电路还应包括时钟电路、复位电路、Flash启动电路和调试电路。最小外围电路图如图5所示。复位电路采用 RC电路实现,防止刚上电时不稳定的电源对系统产生影响,同时也可通过按键实现手动复位。
本系统主要应用于野外对相关信息进行采集,经常面临恶劣的使用环境,可能导致芯片内部集成的时钟源精度的下降而影响系统的正常运行。为了维持系统时钟源的稳定和精确,在片外使用 8MHz 的无源晶振与内部锁相回路(PLL)相结合来为各模块提供稳定的时钟源。
图5:STM32 主控芯片及其最小外围电路原理图
为了实现软件设计与硬件资源间的调试和下载,需要在单片机中预留出下载调试电路。STM32调试方式有JTAG模式和SWD模式,与 JTAG 模式的 20 个引脚相比,SWD模式(串行调试接口)只需要连接 GND、SWDIO、SWDCLK 和 3.3V 的引脚。其传输速率可高达 10M/s,在高速模式下具有比 JTAG 更加可靠的性能。因此本文中采用 SWD 接口进行程序的下载和调试。
► 数据采集模块的电路设计
在实际应用中需要对温湿度和风速这三种主要环境因素进行实时的监测,为此分别设有温湿度采集模块和风速传感器模块,通过实测值来完成对作物腾发量的预测。
1)温湿度采集模块
图6:DHT11 传感器的实物图
采用 DHT11 温湿度传感器对农作物生长环境中的温湿度进行测量,该模块可同时提供经过严格校准后误差精度在±2℃的温度值和±5%的湿度值数字信号,满足在现代农业监测技术领域中的应用。DHT11 传感器的电路原理图如图所示。
图8:DHT11 传感器的电路原理图
2)风速传感器模块电路设计
我们采用模拟量风速变送器 RS-FSJT-V05 来对现场风速进行测量,RS-FSJT-V05 风速变送器通过三个夹角相同的风杯来完成对风速的测量。测量风速时,其内部的信号信号处理结构可将测量结果转换为 0-5V的电压模拟量进行输出,通过与单片机 A/D 转换电路的连接即可方便快捷地读出对应的风速信号。其实物图如下所示。
图9:RS-FSJT-V05 传感器实物图
风速变送器 RS-FSJT-V05 主要参数如下表所示。
表:RS-FSJT-V05 传感器主要参数
RS-FSJT-V05 风速传感器与 STM32 单片机通过三线制进行连接,其中棕色 VCC 与 5V电源进行连接,黑色 GND 接 STM32 上的 GND,蓝色正输出信号接 STM32 中的 PA1。同时为了避免采集到的电压信号超过单片机 A/D 模块的最大采集电压,采用分压电阻来将采集到电压降低后再输入到单片机中的 A/D 转换模块,否则将会有数据溢出产生的可能,导致测量错误。其电路原理图如图所示。
图10:风速传感器电路原理图
► 通信传输模块的电路设计
对传感器采集数据的传输可以通过有线或无线的方式进行,但有线通信需架设错综复杂的线缆,既不利于农业的种植,也不容易进行调整。因此在本文中数据处理单元通过 ZigBee 协议来获取采集的数据。
此外,为了使农作物管理人员可以方便地随时随地查看相关的信息,通过 4G 通信技术将相关的数据传输至机智云平台,用户可以通过机智云后台或者 APP 方便地查看相关的数据,实现对农田作物进行精细化管理。
1) ZigBee 无线传输模块电路设计
本文采用 DL-LN33 多跳自组织 ZigBee 模块,实物图如图11所示。该模块是具有无线自组网功能的多跳模块,将无线模块和 Z-stack 协议栈的优点融于一身,无需依赖基站、WiFi 等外部设备的帮助即可完成自动组网过程,适用于需要进行多跳自组网的应用场景。
图11:DL-LN33 模块实物图
该模块完成上电后,会自动寻找周围同一网络下的节点进行通讯,与通信范围外的节点间的通讯将通过范围内的其它节点代为转发完成。即进行多跳通信,在一次通信过程中信息最多可以经过 16 次的转发。与传统的 ZigBee 芯片相比,DL-LN33 模块与相邻模块间建立网络时,无需指定协调器和其它形式的关键节点,使同一网络中的每个模块的地位都是相等的,网络的运行并不会因为部分模块的损坏而受到影响。
此外,DL-LN33 模块抛弃了复杂的 Z-stack 协议栈协议,将相关的协议栈和芯片驱动程序进行了封装,用户只需掌握简单的串口通信即可实现模块与主控芯片间的通信。DL-LN33 模块通过 STM32 的USART 3 进行数据交换,其电路原理图如图所示。
图12:DL-LN33 电路原理图
2) 4G 通信电路设计
由于农田一般都处于远离人群的地方,用户不太可能实时地去现场查看作物的环境监测信息,因此本文选择使用 4G 远程通信技术将传感器采集的相关的数据以及通过计算的作物腾发量和作物需水量数据发送到机智云物联网平台中,使用户可以在任何地点实现对数据的实时查看。
4G通讯模组选择GA211模块,其搭载了一块有数据接收处理功能无线通信模组 EC20,支持移动、联通、电信的 4G 网络,确保在各种网络条件下均可正常工作。内置了机智云的 GAgent 固件,使用时无需研究繁琐的网络通信协议和信号处理电路的架构设计,只需开发 STM32 单片机的串口功能,即可轻松实现产品设备与机智云平台之间的通信。GA211模块实物图如图所示。
图13:GA211转接板实物图
GA211 转接板采用 5V 电压供电,与 STM32 之间通过 USART 2 进行通信,整个转接板使用 5P 排线端子与 STM32 连接在一起,具体电路图如图所示。
图14:GA211 模块电路原理图
► 电源模块设计
本系统采用常见的+24V 电源做为系统的总电源,经过处理后分别供给不同的电路使用。系统共有三种工作电压:一是由外接电源提供的+24V电压,用来为系统提供总的电源;二是供给 STM32 芯片和温湿度传感器的+3.3V 电压;三是供给风速传感器模块和 GA211 转接板+5V 电压。
电源模块的设计过程中要考虑到各模块工作时的额定电压、电流和功率,各通信模块的最佳供电方案等,以及上电时的纹波滤波、电涌保护、电磁兼容、瞬时电压和瞬时电流的问题。其电路原理如图所示。
图15:电源模块电路原理图
系统涉及到两种不同功能的硬件终端:农作物现场环境信息采集终端和数据处理终端,由于其功能的不同,在相应的硬件设计上也有所区别。为了方便系统的维护和降低设计的成本,采用主控单元和功能单元相隔离的设计思路,两种不同的终端设备共用一套相同的主控单元,将不同的功能使用拓展板进行拓展,且传感器与电路板之间通过端口进行连接。
当使用中遇到部分功能失效时,只需维护损坏的部分即可,降低了维护的难度和成本。功能模板部分的设计原理如图16、图17所示。
图16:数据处理终端电路原理图
图17:信息采集终端电路原理图
04系统软件设计
系统软件部分基于的 STM32F103VBT6 进行开发,主要功能是通过传感器采集作物生长环境中的温湿度和风速信息,利用 ZigBee 无线通信网络向数据处理节点发送采集到相关数据,将其与作物系数相结合计算出作物需水量,并将相应的数据传输到机智云物联网平台上。因此软件部分也相应的分为信息采集终端和数据处理终端两个部分,下面将对相应部分的软件设计进行详细的介绍。
► 信息采集终端的软件设计
信息采集终端主要的功能是对作物现场的环境信息进行采集,并通过 DL-LN33 模块将采集的数据传输到数据处理终端。当信息采集终端上电后,首先完成STM32 单片机和相关硬件设备的初始化,随后 DL-LN33 无线通信模块将进行信道扫描,与数据处理终端建立通信。待其与数据处理终端成功建立通信后,将采集到的温湿度和风速数据周期性的发送给数据处理终端。信息采集终端的工作流程图如图所示。
图18:信息采集终端的工作流程图
1) 温湿度采集程序设计
本文以 DHT11 传感器为基础来实现对农作物生长环境温湿度的实时采集,并将其转换为数字信号后传输到 STM32F103VBT6 中。
DHT11 与 STM32 之间基于单总线协议进行数据通信时,需要遵循严格的时序关系。温湿度采集的程序流程图如图所示。
图19:温湿度采集的程序流程图
2) 风速采集程序设计
本文中所采用的 RS-FSJT-V05 风速传感器的输出量为模拟信号,在实际使用过程中需要对其进行AD 转换。STM32F103VBT6 内部含有2个12位的 ADC 转换通道,其数字量的最大值为4096,其范围为0~4095。本文通过 ADC1 的通道1来完成对风速的A/D 转换,其转换公式如下:
公式中,adcx是RS-FSJT-V05 传感器输出的模拟量经过 A/D 转换后的数字量,MAX_WIND_SPEED 是最大可测风速。风速传感器的代码流程图如图所示。
图20:风速传感器的代码流程图
RS-FSJT-V05 传感器的模拟量输出容易受到基准电压浮动或其他外部因素的干扰,导致其采集的单次信号并不能完全准确的反应真实的数据,因此在返回采样值之前需要进行滤波处理来尽可能地消除干扰误差,来提高数据的精确度。
通过中位值平均滤波算法来对采样值进行数字滤波,该方法将中位值滤波和算术平均值滤波两种滤波技术的优点综合在一起,对于偶然条件下发生的脉冲性干扰具有较强的滤除作用。其代码如图所示。
图21:风速传感器的代码流程图
3) DL-LN33 无线通信模块的软件设计
DL-LN33 无线通信模块采用自主研发的的通信协议进行数据的传输与通信,其通信过程与 ZigBee 类似,但封装了更加复杂的协议栈和芯片驱动程序,只需了解简单的串口协议即可进行通信,操作过程得到了极大的简化。
上电后,同一网络下的不同地址的 DL-LN33 无线通信模块在通信之前需要指定相同的信道和网络 ID,并通过软件来重启设备使相关的设置生效。然后拥有相同信道和网络 ID 的DL-LN33 通信模组之间将自动地组建一个通信网络,即可通过其内部协议封装的数据发送和接收函数来进行数据间的正常交互。
系统利用 STM32 单片机实现对 DL-LN33无线通信模块的初始化和数据传输,程序的处理流程如图所示。
图22:DL-LN33 无线通信程序流程图
DL-LN33 无线通信模块初始化完成后,信息采集终端即可将采集到温湿度和风速数据赋给 DL-LN33 模块中的数据部分,并通过协议中的发送函数传输给数据处理节点,对应的代码如图所示。
图23:DL-LN33 无线通信模块接收数据代码
数据处理终端接收到来自信息采集终端的指令信息后,将相应的数据从结构体包中提取出来,以便进行后续的处理,对应的代码如下图所示。
图24:DL-LN33 无线通信模块接收数据代码
► 数据处理终端的软件设计
数据处理终端的主要作用是通过 DL-LN33 无线通信模块接收信息处理终端发送过来的农作物环境信息的相关数据和算法计算得到的最佳网络参数,再根据计算出作物需水量,并将相应的数据信息通过 GPRS 模块传输至机智云物联网平台。可对机智云平台自动生成的代码进行修改移植,来达到数据通过机智云平台进行远程显示和控制的目的。
机智云物联网平台的优势在于通过为设计人员提供各种简单易用的的智能应用硬件开发工具和丰富多样的 SDK 和 开放API 等数据开发服务,可以极大降低传统的产品的研发运营成本。同时其提供的 GAgent 开发固件可以自主完成数据在设备、机智云平台和应用端之间的转发和处理。开发过程中,开发人员只需通过串口将烧录好 GAgent 固件的 WiFi、GPRS等联网模块与硬件产品进行连接,即可实现设备和云之间的数据通信功能。
1) 机智云云端配置
步骤①:创建相应的产品
开发人员根据硬件资源在机智云平台创建相应的产品,指定产品的名称和通讯技术方案。产品创建成功后,平台将会提供 Product Key 和 Product Secret 两个数据。进行不同产品区分时主要依据 Product Key 参数,该参数在生成代码时自动写入 MCU 中,主要用于机智云平台据此来识别相应的 WiFi/GPRS 设备。Product Secret参数则用于 APP 或服务器与平台进行数据交互。
图25:机智云平台创建的产品相关信息
步骤②:创建相应的数据点
数据点的功能是用来比较抽象地描述产品的主要功能,创建成功后云端将自动将为其定义合适的数据格式并生成相应的通讯协议。
本设计需要把作物环境信息(温湿度、风速)、作物腾发量和作物需水量的数据传输到机智云平台中,这四个参数均通过相应的数字进行显示且只能读取不能修改。由于制定灌溉策略时多是依据作物需水量来计算,所以设置一个可进行修改的的作物系数来根据作物腾发量计算出作物需水量。
实际操作为通过客户端设置一个可以根据实际情况进行修改的数值,该数据可通过云端修改主控芯片中相应的参数大小,主控芯片可利用此数值和作物腾发量计算出作物需水量,参数类型为数值,对于云端来说可写。创建相应的数据点如图所示。
图26:植物腾发量计算的相关数据点信息
步骤③:下载代码并移植修改
数据点设置完成后,即可选择对应的硬件平台,输入对应的Product Secret 后生成相应的代码。下载生成的 MCU 代码结构如图所示。
图27:MCU SDK 文件内容目录结构
开发人员无需关注黑色部分标注的基本的 STM32 开发文件,只需根据项目的需要完成相关的驱动配置和数据处理即可,其中嵌入式设备与机智云平台间的数据交互处理函数主要位于 Gizwits_product.c 和Gizwits_product.h 文件中中,根据设备的功能编写相应的硬件动作执行函数即可。
2) 机智云程序流程图
机智云自动生成代码后,开发人员需要将代码移植到 Keil MDK 平台的工程文件中。得益于 GAgent 固件中 gizwits 串口协议层代码的完整性,MCU 与机智云的交互过程已经被全部封装,开发人员只需完成 MCU 中串口函数的发送、中断以及 Giziwits_product.c 中的业务逻辑即可。机智云串口协议层在 STM32上代码结构框图如图所示。
图28:机智云串口协议层代码的结构框图
由图28可知,MCU 上电后,首要的工作是对外设、用户和协议进行初始化。当GA211 模块通过串口协议配置成功并与机智云平台成功连接后,该模块就可用来接收来自云平台或手机 APP 的信息。
信息接收完成后,将通过 GA211 模块内部的 GAgent 协议帧的方式发送到 STM32 主控芯片进行处理,主控芯片将接收到的数据存放在缓冲区,通过程序定时对缓冲区中的数据进行解析处理,并推送给数据处理函数进行相应的事件处理。
STM32主控单元也可以将信息采集终端发送过来的数据存入各个数据点,以数据点协议栈格式发送到 GA211 模块,再由 GA211 模块将数据传输到机智云平台,云平台根据报文中的数据信息进行相应的事件处理。
3) STM32 上的串口协议栈移植
系统的数据处理终端需要通过 USART3 来接收数据采集终端经过 DL-LN33 模块传输来的数据,并根据这些数据和作物需水量的计算。
由于机智云自动生成的代码中只包含 USART1、2 的初始化和处理函数,因此首先需要对 USART3 进行初始化处理。串口3 主要用于 DL-LN33 模块与 STM32 之间传输数据,DL-LN33 模块接收到来自信息采集终端的数据后,先将数据存入缓冲区,然后主控芯片将串口中的数据一位位的读取出来,相应的代码如图29、图30所示。
图29:串口3初始化
图30:MCU 读取串口数据
完成数据的读取和作物腾发量的预测后,需要将相关的数据传输到机智云物联网平台,并完成作物系数与 STM32 主控芯片之间的通信,机智云平台与主控芯片间数据上报和下行控制的程序流程图如图31、图32所示。
图31:数据上报的机智云协议
图32:下行控制的机智云协议
由于作物系数只是完成对作物腾发量的校准来计算作物需水量,并未触发事件的处理,因此只需将上述提到的串口接收函数和作物需水量计算函数放入 gizwitsHandle() 函数中的代码即可,如下图所示。
图33:基于 C 语言的数据预测过程
05系统调试与运行
为了验证基于 STM32 和机智云物联网平台的农作物需水量计算系统各部分是否可以达到既定的设计目标,以及系统运行时是否存在问题,需要对其进行一系列的软硬件测试。验证测试可以分为三个部分,包括无线通信测试、作物环境信息的采集和数据与机智云平台进行交互通讯。
►无线通信模块的功能验证
无线通信模块的主要功能是在信息采集终端和数据处理终端之间建立无线通信网络,使数据可以在信息采集终端和数据处理终端之间进行通信,以便进行后续数据的处理。
为了可以方便地查看模块间的通信网络,使用专用的 DL-LN33 网络拓扑结构显示软件,将 DL-LN33 模块与 USB转 TTL 的 CP2102 连接后,即可在该软件中显示出 DL-LN33 模块间的网络结构。验证实验采用了一个信息采集终端和一个数据处理终端的模式,其网络结构如图所示。
图34:DL-LN33 无线通信模块的网络结构
将其同时上电稍等片刻后,两个 DL-LN33 无线通信模块即可建立如图34所示的网络结构。其中红色的 3AD4 节点为数据处理节点中的 DL-LN33 模块,可以用来传输整个自组网的网络信息;另外一个 11BF 节点为信息采集终端中的 DL-LN33 模块,用来将信息采集端点采集的数据发送到数据处理端点。
► 作物环境信息采集功能验证
作物环境信息的采集功能验证主要通过 Keil µvision 的在线调试功能完成。设计好信息采集终端的软硬件后,通过Keil µvision 进入在线调试模式并将温湿度、风速的变量数据导入到内存窗口中进行显示,如图所示。
图35:作物环境信息采集功能验证
从图中可以看出,信息采集终端采集到的温度为10℃,湿度为37%,风速为0.6m/s。这说明信息采集终端可以有效地对作物的生长环境进行采集,其软硬件设计符合预期的要求。
►数据与机智云的交互通信功能验证
验证环境信息数据与机智云的交互过程,主要包括温湿度、风速和作物需水量等数据的上传和作物系数的下发过程。该过程首先要验证 GA211 模块是否可以正常接入机智云平台。
GA211模块内部封装了 机智云GAgent 固件,插入电话卡后,通过 STM32主控芯片的 USART2 与机智云建立通信,其功能验证可以通过机智云串口工具进行验证,将其与电脑接口通过 USB 转 CP2102 模块进行连接,然后在串口工具的配置中输入产品的 Product Key 和 Product Secret。输入完成后切换到模拟 MCU 功能,等待一段时间后即可看到模块连接上基站和 M2M 服务器(即机智云)。此时,在机智云平台上可以看到相应的设备处于在线状态。
图36:GA211 转接板与机智云连接通信测试
图37:设备上线记录
经过测试,GA211转接板可以正常接入机智云物联网平台。经过以上分析,系统各部分的功能均可正常工作,且满足设计的要求。接下来对整个系统的功能进行测试,由于受实验条件的限制,通过在实验室中来完成对系统的整体测试验证。测试运行的实物图如图所示。
图38:系统实物图
上电启动一段时间后,信息采集终端所采集的到的温湿度、风速数据通过 DL-LN33模块发送至数据处理终端,经过计算得出作物腾发量和作物需水量,并经 4G 模块的GA211 转接板转发到机智云物联网平台。农业管理人员可直接使用通过 PC 端的用户网页登录机智云平台,实现对采集数据的远程访问。
此外管理人员可通过机智云管理后台查看设备的运行记录和通信日志,也可通过折线图来显示实时的监测数据。需要注意的是,在折线图中,若当前的监测数值与前个时间间隔的数据一致,则不会上传至机智云平台,仍以上个时间间隔的数据显示,直至数据发送变化时才会显示最新的数据。
图39:设备接入云端的上下线记录
图40:设备运行数据记录详情
为了解决电脑使用不方便的问题,机智云提供了基于 APP 的远程数据查看工具,通过 APP 可以随时查看设备的状态以及在线设备的监测数据。手机 APP 的使用测试图如图所示。
图41:手机 APP 使用测试图
APP Demo 是机智云提供的一款可以运行在 Android、iOS 系统上的远程数据查看程序。使用时,通过 APP中的二维码扫描 GAgent_Debugger_V3.5 助手中生成的二维码界面即可完成与对应设备的绑定,二维码生成时需要提供 Product Key 和 MAC/IMEI,其中MAC/IMEI 为 GA211 转接板的识别码,连接机智云后可在设备日志中找到。
设备绑定完成后即可通过APP 远程查看系统采集到的温湿度及风速等数据,也可通过 APP 设置相应的作物系数,完成对作物需水量的计算,并在 APP 中进行显示。产品设备与 APP 连接成功后的测试如图42所示。说明设计的系统可以根据采集到的农作物的环境信息完成对作物需水量的计算,并通过 APP 进行显示,到达了预期的设计要求。
图42:设备对接 APP 运行测试图
06系统设计总结
本系统为设计远程智能作物需水量控制方案,提出了基于 STM32和机智云物联网平台的农作物需水量统计系统,可以广泛应用于分析和计算作物的真实需水量,且可以随时随地通过机智云的管理后台或手机 APP 来查看相应的数据,为农田管理人员提供真实的作物需水量情况,为其制定合理的灌溉策略提供数据参考。