基于MQTT协议的智慧农场智能化管理系统

2018-09-07 02:31
单片机与嵌入式系统应用 2018年9期
关键词:开发板农场单片机

(四川大学锦城学院 计算机与软件学院,成都 610041)

引 言

将智慧农场作为一个实际项目用来开发研究,就需要在硬件、所用协议这些方面作出选择,开发人员要根据实际情况,在考虑成本、功耗、可靠性和可操作性等方面提出较为优化的方案。在本文中,笔者选用的开发环境以STM32开发板作为基础,运用RS485总线及MODBUS协议将农场中各传感器串联后接入单片机,以外接的W5500模块实现STM32开发板到服务器的连接通信,最后采用MQTT协议实现农场数据的远程监控和命令接收,并通过STM32开发板上另一外接模块——继电器执行接收到的命令。开发环境连接结构概念图如图1所示。

图1 开发环境连接结构概念图

1 智慧农场及MQTT协议说明

1.1 智慧农场简介

智慧农场就是运用一系列嵌入式技术,如传感器技术、实时操作系统多任务技术、单片机技术、物联网技术等实现农场环境数据化并远程传输,保证了对农场情况的实时有效监控,更加利于农场中作物的生长。在智慧农场中,一切的行为基于数据,农作物的生长依靠数据监控,不同于以往依据经验对作物的环境进行选择或改变,如此标准化生产能够提供给作物最适合的环境,培养出最优质的作物。

智慧农场是现代农业发展的必然趋势,它通过数据采集、数据处理、数据传输、数据应答这几个步骤,对农场环境有效监控并根据不同环境变化进行远程硬件控制来改变农场环境,使得农场决策更加智能有效,管理更加精准高效。

1.2 MQTT协议简介

MQTT协议是一个支持所有平台,几乎可以把所有联网物品和外部连接起来,通过特定的主题进行数据发布/订阅的工具。在智慧农场中通过该协议将传感器采集并汇集在STM32开发板上的各项数据在云服务器中进行发布,通过手机APP端进行订阅,实时远程监控各项数据。同时也可以通过手机APP端进行农场操作命令的发布,由STM32开发板进行订阅后对命令进行解析,控制农场中的硬件执行相应动作。

MQTT协议中独特的发布/订阅模式使发布者与订阅者之间没有直接关系,不需要建立直接的连接,只需要通过同一个消息代理即可进行消息的通信,且在消息传输过程中发布者不会被锁定,订阅者也可以随时选择时间进行消息的订阅,使得消息的传输更加自由。在一定程度上来说,MQTT协议就如同电子邮箱,作为收件人与发件人交流的平台,提供了一个消息的容器,但却并不会妨碍双方的取出和继续放入。MQTT系统模型图如图2所示。

图2 MQTT系统模型图

2 智慧农场网络通信实现

传感器数据在采集完成后均需通过RS485总线的传输传送到单片机上,由单片机进行数据的汇总后再打包通过网络发布,因此实现单片机的网络通信是MQTT协议移植实现的前提条件。由于STM32开发板并无网络模块,所以为了使其能够联网与服务器进行数据交互,在实际开发过程中需要外接一片W5500有线网络连接模块。W5500 芯片是一款集成全硬件 TCP/IP协议栈的嵌入式以太网控制器,为单片机提供了更加简单、快速、稳定、安全的以太网接入方案。其与STM32开发板采用SPI接口进行连接,然后借助TCP/IP协议,在已知服务器的IP地址及所用端口号的情况下,与服务器进行点对点的即时信息传输。

农场网络通信这一部分的设计可以分为服务器通信和网络连接两个小模块,分别实现W5500模块通过TCP/IP协议与外接设备通信和W5500模块联网这两个功能。在开发初期可先使用计算机作为服务器,将W5500模块通过网线与计算机实现硬件连通,然后借用YAT软件实现计算机到服务器的模拟,将连接和通信过程可视化,在YAT软件端输出一串字符并通过回传机制再次在YAT中打印出来,测试W5500模块的传输功能是否实现,完成第一个小模块的设计。W5500模块传输功能测试图如图3所示。

图3 W5500模块传输功能测试图

在确定W5500模块传输功能无误后,便可进入第二个小模块的设计。将W5500模块通过网线与农场中的路由器进行有线连接,使其能够通过网络远程连接云服务器,这个过程中可以采用PUTTY软件对远程云服务器是否接收到消息进行监听。在PUTTY中登陆项目的云服务器,通过nc对该云服务器中在代码段内被设置的端口进行监听,同时也可在PUTTY中直接通过该端口向STM32开发板端发送消息,由W5500模块接收并在串口中打印回传。可参考WIZNET官网中的STM32+W5500实现客户端的代码,这样就完成了MQTT协议移植的前提工作。PUTTY软件监听服务器连接图如图4所示。

图4 PUTTY软件监听服务器连接图

3 MQTT移植实现

3.1 MQTT代码包移植

图6 串口打印信息

图5 MQTT协议包移植图

在确认STM32开发板可经由W5500模块联网与云服务器进行通信后,即可开始做代码段中MQTT协议的移植了。MQTT协议的移植首先需要从eclipse paho中的Embedded MQTT C/C++ Client Libraries中下载MQTT协议的代码包,将代码包中的MQTTClient及MQTTPacket文件夹以包的形式添加到W5500的工程中。MQTTClient包中只需包含原文件夹中名为MQTTClient.c和MQTTClient.h的文件即可,而在MQTTPacket包中则需包含原文件夹中src目录下的所有.c和.h文件。除此之外,MQTTClient包中还需根据MQTTClient.c中程序的需要新编写一个.c程序及其对应的.h文件,根据项目实际情况可命名为MQTTInterface.c和MQTTInterface.h,主要目的为对MQTTClient.c程序中出现的函数及类进行定义,使其可以正常使用。至此,MQTT协议的植所需要新添加的包及文件已添加完毕,但需要注意的是在进行MQTTInterface.c和MQTTInterface.h的编写时需要耐心对照,认真剖析MQTTClient.c文件中各个函数的功能和作用。MQTT协议包移植图如图5所示。

3.2 主函数编写

包移植完成后开始编写主函数,主函数编写可直接在W5500工程的main.c文件中完成。在原有基础上,将移植了MQTT协议后添加的库文件名加入头部,再将main函数中的自while语句开始的执行回环功能的代码部分进行删除。然后调用MQTT协议相关的MQTTConnect、MQTTSubscribe和MQTTPublish等函数,实现STM32开发板端对MQTT的连接和对MQTT协议发布/订阅的运用,并可在调用成功后加入打印的语句,将调用成功的信息通过串口打印进行提示。最后在main函数之前编写一个对接收到的消息进行打印的messageArrived函数,messageArrived函数和main函数的编写都可借鉴之前下载的MQTT协议代码包中的MQTTClient-C目录下的sample目录中的MQTTEcho.c文件,至此便基本完成了MQTT协议基于STM32开发板的移植。串口打印信息如图6所示。

3.3 移植实现测试

在代码编写完成并且串口能将预设的信息进行打印时,便可使用MQTT.fx软件登陆云服务器对其进行MQTT协议的运用。MQTT.fx是一款常用的MQTT协议调试软件,包含了MQTT常见的发布/订阅两个选项,可在设置中输入自己的云服务器地址及发布/订阅的topic后进行连接。在这里可以通过MQTT.fx对STM32开发板端发布的各项传感器数据进行订阅,也可在发布选项中向STM32开发板端发布一些命令,由单片机端进行订阅后解析执行。MQTT.fx订阅单片机端数据图如图7所示。MQTT.fx发布命令图如图8所示。

图7 MQTT.fx订阅单片机端数据图

图8 MQTT.fx发布命令图

结 语

MQTT的设计思想是开源、可靠、轻巧、简单,这在一定程度上拓宽了其应用范围,而且由于开源,符合智慧农场中低成本的要求,且它拥有QOS0、QOS1和QOS2三种不同的服务质量,可以保证消息传输的可靠性,用户可在第一时间了解农场中的环境变化,以便尽快发布命令,由STM32开发板端控制农场中的硬件做出相应的操作。这就最大限度地保证了农场环境可以保持在最适合作物生长的各项数值范围内,同时也保证了各项资源 的高效利用,从而实现智慧农场的开发目标。并且因为MQTT协议无需订阅者与发布者进行直连,这在一定程度上降低了农场设备随时进行消息传输的功耗,增强了农场通过移动设备进行远程操控的可行性。

猜你喜欢
开发板农场单片机
农场假期
基于单片机的SPWM控制逆变器的设计与实现
农场
基于单片机的层次渐变暖灯的研究
基于单片机的便捷式LCF测量仪
Microchip最新推出两款PIC32 Curiosity开发板
一号农场
浅析单片机开发板的设计与制作
丰收的农场
Microchip推出两个全新PIC单片机系列