本文中所采用的 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 语言的数据预测过程4 系统调试与运行 为了验证基于 STM32 和机智云物联网平台的农作物需水量计算系统各部分是否可以达到既定的设计目标,以及系统运行时是否存在问题,需要对其进行一系列的软硬件测试。验证测试可以分为三个部分,包括无线通信测试、作物环境信息的采集和数据与机智云平台进行交互通讯。 无线通信模块的功能验证 无线通信模块的主要功能是在信息采集终端和数据处理终端之间建立无线通信网络,使数据可以在信息采集终端和数据处理终端之间进行通信,以便进行后续数据的处理。
|