基于物联网技术的智慧农业系统的设计与实现
2018-06-02赵翠芹蒋联周闫列友梁雪韦魏
赵翠芹 蒋联周 闫列友 梁雪 韦魏
摘要:紧跟物联网发展的步伐,设计了一个智慧农业系统。该系统主要由TI公司提供的CC2530芯片组建无线传感器网络(Wireless Sensor Networks,WSN),远程采集数据、然后将收集的数据通过串口发送到上位机。上位机物联网平台实现了远程数据的展示并下达用户命令给协调器进行网络调整。此外,为了方便手持终端能够实时访问网络,使用ESP8266WIFI AP(Access Point)进行数据转发。系统具有可远程实时显示终端数据、低成本、功耗低等特点,有一定的应用价值。
关键词:智慧农业;无线传感器网络;物联网技术;远程实时监控
中图分类号:TN790 文献标识码:A 文章编号:1009-3044(2018)10-0103-03
近年来,物联网的新浪潮势不可挡,可谓是“火树银花”之势。一颗颗高端大气的处理器鱼贯而出。比如苹果A11、华为麒麟970、三星Exynos 8895、高通骁龙845/835、展讯SC9853I、联发科的Helio X30等[1]。这些高大上的处理器成为人们茶余饭后的谈资,各大企业在物联网领域赚得盆满钵满。最近,即将呼之欲出的“工业4.0”[2]被IT界炒得热火朝天,可以说是物联网的第二春。窄带物联网(NB-IOT)[3]标准一落地,各种产品是遍地开花。物联网技术无孔不入,从中央到地方,从城市到农村。在工业、农业、交通、物流、城市管理、环保、安全、医疗、家居等各个领域都开展了应用示范。在一定程度上提高了生产或生活效率,改善了生产或生活质量。
民以食为天,农业物联网面临着巨大市场需求。传统农业生产方式落后,生产率底下,抵抗自然灾害能力差,科技含量不高。而且近年来各种污染的问题层出不穷,空气污染、水污染和土壤污染等新问题严重威胁到粮食安全[4][5]。
该智慧农业系统紧跟物联网发展的脚步,将物联网技术应用到农业系统中,利用温湿度传感器、光照传感器、烟雾传感器等常规传感器感知环境数据。终端采集这些数据后,通过A/D转换之后,以字符串模式发送给协调器。协调器将收集到的数据通过UART串口通信发送给上位机,并保存到数据库中。为了不受时空限制,系统中添加了WIFI转发模块。用户可以通过手持终端实时查看远程数据,对光照、温度、湿度等数据作出及时评估。上传的数据还可以跟网上专家给出的数据进行对比,分析数据后会得到相应的解决办法,修正给定参数。从而方便了农作物的管理以及更快地解决农作物问题,大大提高土地产出率、资源利用率和劳动生产率。
从成本和功耗出发,采用高性能、低成本、低功耗的CC2530来设计智慧农业监控系统。文章的结构组织如下:首先给出总体系统架构;接着阐释了硬件系统设计、软件设计和系统的具体实现,最后进行了总结。
1 总体系统架构
系统总体架构图如图1所示,由zigbee組成的WSN、串口、PC端物联网平台、WIFI路由转发和手持终端组成。协调器下面有6个终端。因各种农作物的生长对环境要求不一样。终端1用于数据采集,终端2用于环境控制。终端1连接的外设有温湿度传感器、烟雾传感器、光敏传感器和人体传感器。终端2连接有风扇和光合作用LED灯。终端3连接土壤湿度传感器、雨滴传感器和步进电机。当土壤湿度过低,会打开步进电机进行浇水。在节点中设置了适宜农作物生长的相应值。当协调器收集到终端采集的数据时,会进行检查。如果数据不适宜农作物生长时,协调器就会发指令给终端2。终端2收到指令后会自动打开风扇进行通风或LED灯补光,以调节相应的环境数据值。终端3、4、5和终端1、2、3是一样的。上位机软件界面提供给用户下发指令的功能。如果用户想要修改环境参数的极限值,可以通过软件界面触发并通过串口发送指令给协调器,协调器再下达指令给相应的终端。
2 系统硬件设计
硬件设计主要包括Zigbee节点的核心板、传感器、LED电路、按键电路、步进电机电路等部分硬件。
网络节点选用TI公司的CC2530F256RHAR芯片作为CPU,该芯片是51结构的单片机,采用最经典的C语言开发。为了缩短开发周期,专注系统的开发应用,CC2530核心板、WIFI数据透传模块esp8266、和各种传感器模块都是直接从淘宝上购买。CC2530核心板实物图和WIFI模块实物图如图2所示。核心板包括单片机、晶振、天线接口和IO扩展口。
作为数据采集的传感器部分,主要涉及空气温湿度传感器DHT11、土壤湿度传感器、光敏传感器、烟雾传感器MQ-2、人体红外检测传感器这5种传感器。使用时将传感器连接到CC2530的IO口,就可以很方便的获取到周围环境数据。
3 软件设计
软件设计主要包括WSN协议编程、WIFI模块数据透传和上位机物联网平台开发。
3.1 WSN协议编程
传感网系统是在IAR Embedded Workbench软件下进行开发,在ZStack-CC2530-2.5.1a协议栈上编写应用层源码。系统由一个协调器、多个终端节点组成星型网络。协调器主要的功能是建立网络,网络稳定后将接收到的数据通过串口发送给PC机。终端节点主要是采集数据,协调器和终端的工作流程如图5所示。协议栈开发的重点是初始化函数和任务事件处理函数的实现。
1) 初始化函数实现
在初始化部分中,协调器和终端节点是一样的实现过程。先定义节点描述符,然后用afRegister()函数对其进行注册,注册后就可以使用操作系统提供的服务;接下来是对串口操作,定义halUARTCfg_t串口结构体变量,并对其参数进行相应的配置,配置的参数主要有波特率、控制流和回调函数等参数配置,并用HalUARTOpen()函数打开串口;最后进行NV操作,osal_nv_item_init初始内存区,读取当前PANID。如果PANID为零,则调用MT_UtilCommandProcessing()函数更改PANID,更改完成之后调用SystemReset()函数重启。
为了避免开关终端后,终端节点无法及时响应协调器发出指令,将协议栈中Tools下的f8wConfig.cfg文件中的-DRFD_RCVC_ALWAYS_ON改为TRUE;为了使终端处于低功耗模式,将-DRFD_RCVC_ALWAYS_ON改为FALSE。
2) 事件处理函数部分
当两个以上的终端(或者路由器)和协调器之间的通信时,协调器需要区分消息来自于哪个终端。因此,在协调器部分定义了一个struct _devices结构体类型数据,结构体成员包括int型的终端编号和网络短地址。然后定义一个结构体数组,用来存放相应数据。终端节点入网成功后,终端节点采用NLME_GetShortAddr()函数获取自身节点的网络地址。终端采集到的数据是模拟的,需要转换为数字信号,使用协议栈里的文件 hal_adc.c 里的方法 HalAdcRead,可以读出对应 IO 口上的 ADC 电压值。此函数原型为:uint16 HalAdcRead (uint8 channel, uint8 resolution) ,第一个参数是通道号,第2个参数是设置分辨率。终端采集数据之后,通过AF_DataRequest()函数把自己的终端编号、网络地址和采集的数据发送给协调器。AF_DataRequest()函数的原型为AF_DataRequest(afAddrType_t dstAddr,endPointDesc_t *srcEP, unit16 cID,unit16 len, unit8 *buf,unit8 *transID,unit8 *options, unit8 radius)。发送函数最关键的参数是前5个,依次为目的地址结构体变量(接收数据的端点)、设备端点描述符(发送数据的端点)、簇ID、发送数据的有效长度、需要发送的数据,其他参数可以参考协议栈里的GenericApp 例子进行设置。消息可以定时发送,发送时长可以通过osal_start_timerEx()函数的第三个参数来实现。
接收消息函数为osal_msg_receive(),接收消息后需要将接收消息进行强制转换,转换为afIncomingMSGPacket_t结构体类型指针。接下来用switch和case分支语句判断接收到的终端类型和事件类型,以便进行相应终端接收数据处理。系统中用到的系统强制事件标志主要是响应无线数据的AF_INCOMING_MSG_CMD、响应网络状态的ZDO_STATE_CHANGE和响应串口数据的CMD_SERIAL_MSG。
3.2 WIFI模块
ESP8266是带有串口并支持透传数据的WIFI模块。在keil uVision4开发环境下进行WIFI固件程序烧写。设置WIFI模式,通过串口WIFI模块,可以将协调器端的数据发送给WIFI,WIFI连接AP,借助WIFI AP转发,将数据发送给远程终端。
3.3 上位机物联网平台
该平台建立在Visual Studio 2017软件环境中,开发的语言是C#语言。软件中提供了SerialPort类,该类实现了串口资源操作相关功能,命名空间为System.IO.Ports。程序代码编写过程中,首先用SerialPort()构造函数初始化一个实例,接着调用SerialPort.GetPortNames()方法获取当前计算机串行端口名称数组,并配置串口参数。关键实现串口接收的函数为receiveComDataRun(),该函数需要解析串口接收数据,数据协议的解析如表1所示。例如在协议EA2656107610D中,第1位和最后一位表示数据帧头和数据帧尾,第2位表示终端A,第3和第4位表示温度为26°、第5和第6位表示湿度为56%、第7位表示红外检测结果,有人为1,无人为0、第8位烟雾检测结果为无烟雾、第九和10位表示光照强度为76%、第11和12位表示网络号为0X0010。数据解析之后,将数据展示在用户界面。
4 系統实现
硬件电路连接图如图5所示,有协调器和终端节点。协调器上电后进行组网,并以广播方式向外发送消息。终端节点上电后加入网,并以单播方式把采集到的数据周期性地上报给协调器。PC端打开串口调试助手,按图6中所示的串口参数进行配置,配置完成之后打开串口,即可收到如图6所示的数据。上位机物联网平台根据串口接收数据协议解析串口发送过来的数据,经过数据解析之后将获取数据展示在用户界面,如图7所示。因为不同物种适宜生长的条件不一样。上位机还可以根据物种的生长条件,改变报警范围,例如温湿度、光照等上限和下限值发送给协调器,协调器再以组播的方式把数据转发给控制终端,以便打开风扇进行通风或降温、或开关等进行光强控制,形成了一套联动的系统。
5 总结
在TI公司zigbee协议栈的工程项目基础上,搭建了一个智慧农业物联网系统,终端设备采集数据,并定时发送给协调器,协调器将收到数据转发送给PC机。PC端用结合了java和c++优势的C#语言开发了一个物联网平台,把远程终端采集到的数据展示在用户界面。用户可以根据植物生长最有利的条件把参数发送给协调器,协调器再把数据发送给控制终端,控制终端进行相应的调整,形成了一套联动的系统。系统具有操作简单、低成本和低功耗的特点,有一定的使用价值。
参考文献:
[1]与非网.盘点2017之最全面手机处理器盘点[EB/OL]. http://www.eefocus.com/mcu-dsp/399425/r0.
[2]东方头条.博世集团宣布:将在工业4.0中使用IOTA[EB/OL]. http://sh.qihoo.com/pc/2s21quzve1k?sign=360_e39369d1.
[3] 戴博,袁弋非,余媛芳.窄带物联网(NB-IoT)标准与关键技术[M].北京:人民邮电出版社,2016 .
[4] 段益群,刘国彦.基于物联网的智慧农业大棚系统设计[J].软件工程师,2013(12):35-36.
[5] 周新淳,张瞳,吕宏强.基于物联网的精准化智慧农业大棚系统设计[J].国外电子测量技术, 2016,35(12):46:49.