基于树莓派的智能云灌溉系统设计*
2021-06-28黄金秋魁艺于寇耀文高伊慧陈兴文
黄金秋,魁艺于,寇耀文,高伊慧,陈 堃,刘 燕,陈兴文
(大连民族大学信息与通信工程学院,辽宁 大连 116600)
1 设计背景
随着物联网技术的推广和智能终端的普及,基于万物互联的无人化精细管理模式正在改变人们的生产生活方式,特别是给传统农业的生产方式带来了重大变革,已经受到越来越多的农户关注。本设计以中小规模农户对农作物灌溉的设计需求,利用WiFi无线局域网来构建一个C/S架构的智能云灌溉系统。其中农作物环境参数测控模块由树莓派嵌入式平台实现,用户手机端通过APP和WiFi“云”实现数据的远程实时监控和对灌溉设备的远程操作[1]。这种解决方案为农户提供了随时随地远程监控和管理农场,系统具有实现成本低、可扩展性强、部署方便、操作和维护简单等特点。
2 系统的硬件设计
本次设计的智能云灌溉系统主要分几个功能模块:树莓派控制系统模块、数据采集模块、灌溉控制模块和WiFi“云”控制模块。其中数据采集模块通过与树莓派数据交换,实现空气的温湿度、光照度、土壤温湿度、土壤酸碱度、二氧化碳浓度等信息进行采集;树莓派依据收到的采集信息,进行处理、储存、显示、远程数据传输,及向灌溉控制模块输出指令。系统硬件总体设计如图1所示。
图1 智能云灌溉系统硬件总体设计框图
2.1 土壤湿度检测
土壤湿度检测主要用来测量土壤容积含水量,将传感头埋在作物根部来监测根部土壤的水分,该传感器经信号变换电路将采集数据传至主控制器,由主控制器决定输出控制。目前比较常用的有两种原理的传感器,分别是电阻式土壤湿度传感器和电容式土壤湿度传感器。电阻式土壤传感器因为其设计的原理会使长期放入土壤里的传感脚极容易被电解和腐蚀,从而大大降低了传感器的使用寿命和精度。在这里选用capactive soil moisture sensor系列V2.0版本的电容式土壤湿度传感器,由于其支持3.3V~5.5V的电压,与树莓派的GPIO接口比较简单。土壤传感器模块和树莓派相连接的一方有四个针脚,他们分别是AO模拟信号输出,DO数字信号输出,GND电源负极,VCC电源正极(采用3.3V或者5V电压),这里我们把VCC连接到树莓派的VCC,把GND连接到树莓派的GND,然后再把数字信号输出脚DO连接到树莓派的GPIO_GEN1的GPIO18端口上。最后将传感器模块另一端的检测端连接到与土壤接触的插口上面,这样土壤湿度检测模块就可以工作了。
2.2 空气温湿度检测
空气温湿度采集使用DHT11实现,其内部封装了一个NTC(负温度系数)温度传感器、一个电阻型湿度传感器和一个8位微控制器,因此在其内部直接转换为数字量。每一次采集完成后,其传给微控制器一个 40位的数据,其中0-7 位为湿度二进制值的整数部分,8-15位是湿度二进制值的小数部分,16-23 位是温度二进制的整数部分,24-31 位是温度二进制的小数部分,最后 8 位是校验位。其接口连接时,只要将DATA输出端与树莓派的GPIO_GEN1的GPIO4连接,VCC与GND与树莓派对应即可,具体连接如图2所示。
图2 空气温湿度检测接口电路
3 系统的开发环境配置
在配置Linux下开发环境时,首先要在Windows电脑上使用Win32 Disk Imager完成为树莓派烧写的操作系统;然后进入wiringPi的github 下载安装包,再安装 WiringPi函数库,其提供了丰富的树莓派IO接口控制库,如为开发者提供了GPIO控制、中断、多线程等等;最后在系统指令框中输入指令gpio -v,如果显示安装版本信息,则表明wiringPi安装成功[2]。
树莓派I2C总线默认是关闭,需要手动开启I2C总线。首先要设置开启树莓派GPIO的SDA和SCL引脚,开启I2C总线。在指令窗口中输入sudo raspi-config进入设置界面,在interface connect选项中设置I2C为able(开启)即可。
4 系统的软件设计
基于树莓派的智能云灌溉系统软件包括手机端和树莓派测控端两部分。其主要流程为:传感器读取程序模块首先按照预定的采集任务读取当前的作物环境参数值,然后经数据处理后利用WIFI 通信发至手机端APP,手机端将数据(空气温湿度、土壤湿度等数据)显示出来,同时控制程序模块根据采集数据和预设的控制策略进行控制。其中树莓派测控端需要利用I2C总线和GPIO端口实现各类传感器的数据采集。程序流程框图如图3所示。
图3 程序流程图
4.1 控制程序的编程要点
由于系统土壤湿度传感器、空气温湿度传感器和L98N 直流电机等模块的硬件接口都需要和树莓派的 GPIO 口相连接,因此在编程时需要明确树莓派的 GPIO编号方式。如果使用C语言开发控制程序,导入的库为wiringPi库,那么程序中对应的GPIO编号为C语言对应的wpi编码方式;如果采用BCM 编码方式相当于调用了 WiringPiSetupGpio()或RPi.GPIO.setmode(GPIO.BCM)。由于采用C语言编程选用的是wpi编码方式,这样在硬件连接上需要按照wiringPi库文件对应的GPIO口编号进行,如果采用别的编程语言,就得更换所必须的库。因此在开发时,最好事先将调用不同模块的程序进行封装成类,这样可以减少开发调用时的麻烦和错误;为日后程序的维护或扩展,实现精确的定位到需要更改或者变动的地方带来便利[3]。
4.2 手机与树莓派的通信设计
在实现手机与树莓派的通信中,首先创建一个套接字对象,并根据树莓派的IP地址绑定套接字对象的IP地址和端口号,然后开启监听等待连接。在监听到客户端的连接后,阻塞等待,创建连接。
接收客户端发送的指令,并根据指令,调用相应的控制函数,实现远距离无线控制的效果。双方的进程交互如图4所示。
图4 双方信息交互过程
编程流程如下:树莓派首先调用 socket( ) 建立一个 Socket函数,对其端口和IP地址设定,并与bind函数建立连接;再调用listen( )建立监听函数,检测是否有手机向服务器发送请求,若有则利用accept函数接受连接;待连接成功后向手机端发送确认连接的提示信息。
手机端首先调用socket( )建立Socket函数,利用connect函数设立连接端口向树莓派端发送连接请求,并读取树莓派发送的确认连接信息。手机端与树莓派利用send和recv实现信息的收发过程,待数据信息互传完毕后,双方最后关闭Socket。
5 结束语
本系统在室内家居种植环境测试中,系统运行稳定、可靠,达到了精确灌溉的目的,实现了无人值守管理下植物生长环境的实时采集、远程数据传输和控制,从而达到低成本和省时省力的智能化灌溉的设计目的,为提升传统农作物田间管理提供了新的思路,具有一定的参考意义和使用价值。