图书分类号:密级:毕业设计(论文)题目:基于农业智能大棚种植系统的设计与开发学生姓名班 级学院名称专业名称指导教师学位论文原创性声明本人郑重声明: 所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用或参考的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标注。本人完全意识到本声明的法律结果由本人承担。论文作者签名:日期: 年 月 日学位论文版权协议书本人完全了解关于收集、保存、使用学位论文的规定,即:本校学生在学习期间所完成的学位论文的知识产权归所拥有。有权保留并向国家有关部门或机构送交学位论文的纸本复印件和电子文档拷贝,允许论文被查阅和借阅。可以公布学位论文的全部或部分内容,可以将本学位论文的全部或部分内容提交至各类数据库进行发布和检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。论文作者签名:导师签名:日期: 年 月 日日期: 年 月 日目录1、引言21.1、智能农业的意义21.2、智能大棚的意义21.4、本人完成的主要任务32、系统需求分析32.1、系统功能需求分析32.2、数据库需求分析42.3、技术需求分析43、系统概要设计63.1、系统结构图63.2、系统部署图64、系统详细设计与实现74.1、串口模块设计与实现74.2、平台服务模块设计与实现84.3、Android客户端模块设计与实现114.4、ASP.NET微信公众平台模块设计与实现135、系统测试与分析155.1、平台服务模块测试165.2、Android客服端模块测试165.3、ASP.NET微信公众平台模块测试175.4、系统测试与实现186、结论187、总结20参考文献21致谢22基于农业智能大棚种植系统的设计与开发摘 要:温室大棚是农业设施的重要组成部分,也是各大高校农业科研实验室必备设施。

大棚测控系统是实现大棚自动化、科学化的基本体现。通过对监测数据的分析,结合作物生长规律,控制环境条件,使作物达到优质、高产、高效的栽培目的。对于蔬菜大棚来说,最重要的一个管理因素是温度、湿度、光照强度、CO2浓度的控制。本设计是一个专门为温室大棚温度、湿度、光照强度、CO2浓度测量控制而设计的系统。通过对系统的硬件部分和软件部分设计来达到监控要求。硬件部分实现了对温度、湿度、光照强度、CO2浓度传感器模块,zigbee数据接收模块,zigbee数据发送模块,串口通信模块的设计;软件部分主要根据系统的设计思想设计出了主程序和子程序流程图,并通过程序实现。在系统设计过程中充分考虑到性价比,选用价格低、性能稳定的元器件。通过实践证明,系统具有性能好、操作方便、时时远程监控等优点,能实现对温度、湿度、光照强度、CO2浓度的显示、调节和监控。该系统可促进农业科研实验室新农产品的研究步伐。关键词:串口通信;服务平台;Android;数据库;微信公众号;1、引言1.1、智能农业的意义加速提升农业科技水平进一步增强农产品竞争力,实现高效农业有效地保护环境,实现农业可持续发展有利于促进农民生产观念转变、生产技术和素质的提高有利于促进研究开发高新技术在农业领域的应用1.2、智能大棚的意义智能农业大棚的意义主要有以下四点:1.2.1、相对生产来说:将智能化控制系统应用到大棚生产以后,产量与质量比人工控制的大棚都有极大的提高,对于不同的种植品种而言,提高产量与质量相对不同,对于档次较高的经济作物来说,生产效率可以提高30%以上。

1.2.2、相对人工的控制来说:智能控制最大的好处就是能够相对恒定的控制大棚内部的环境,对于环境要求比较高的植物来说,更能避免因为人为因素而造成生产损失。能够在短时间内非常严谨的完成人工操作。1.2.3、相对运行成本来的核算来说:对于有一定规模的种植企业来说,极大降低了劳动力成本设备的投入与运行,可以完全由节约下来的劳动力成本中核算出来,使用时间越长,光节约的劳动力成本就是一笔巨大的利润。1.2.4、可达到改善产品品质、调节生长周期、提高经济效益的目的,可实现大棚智能化管理的高效和精准。相对规模化的大棚设施而言,如果借助人工来调控温大棚内的环境条件,需要大量人手和时间,而且存在难以避免的人工误差。用户可以通过计算机或手机随时接收各种实时采集的精确传感器数据,还可以通过遥控温室内的传感器,观察大棚的全面情况。产品出圃后,随时检索到其流通过程。1.4、本人完成的主要任务本次毕业设计由我和李超平一起完成,本人完成的主要任务为zigbee模块编程:接收和发送传感器数据到平台服务平台服务软件设计与编程:对数据进行存储手机实时监控客户端编程:接收平台服务数据微信公众平台推广:接收平台服务数据数据库存储:数据存储和读取2、系统需求分析2.1、系统功能需求分析2.1.1、单片机模块(1)接收传感器数据(2)发送数据至串口2.1.2、平台服务模块(1)打开串口接收数据并显示(2)数据存储(3)Socket监听事件2.1.3、手机客户端模块(1)连接WIFI(2)接收数据(3)时时监控2.1.4、微信公众平台模块(1)添加微信公众号(2)接收数据(3)远程监控2.2、数据库需求分析2.2.1、将串口接收到的数据存储于数据库2.2.2、将数据库中数据发送到微信公众平台2.3、技术需求分析2.3.1、Visual Studio是目前最流行的Windows平台应用程序的集成开发环境。

最新版本为 Visual Studio 2015 版本,基于.NET Framework4.5.2 。而我们将要用的版本为 Visual Studio 2012 版本,所用语言为C#和ASP.NET来开发服务器平台。2.3.2、Android介绍(1)应用程序框架内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据, 或者共享它们自己的数据资源管理器(Resource Manager)提供 非代码资源的访问。通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。(2)系统运行库Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。(3)平台优势开放性、丰富的硬件、方便开发、Google应用。2.3.3、微信公众平台介绍公众平台开发接口提供与用户进行消息交互、自定义菜单交互的能力。对于成功接入公众平台开发接口的公众账号,当用户发消息给公众号,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。

2.3.4、数据库技术介绍数据库技术研究和管理的对象是数据,数据库管理系统和数据挖掘系统设计出能够实现对数据库中的数据进行添加、修改、删除、处理、分析、理解、报表和打印等多种功能的数据管理和数据挖掘应用系统;并利用应用管理系统最终实现对数据的处理、分析和理解。3、系统概要设计本系统采用单片机C语言、C#、Android、ASP.NET、SQL2008R2技术合成,单片机实现接收传感器数据,通过串口将数据发送到C#编写的服务平台,并保存于数据库SQL中,ASP.NET将数据发送到微信客户端实现远程监控,服务平台通过Socket通信将数据发送到手机Socket客户端,实现实时监控。3.1、系统结构图图3.13.2、系统部署图图3.24、系统详细设计与实现4.1、串口模块设计与实现图接收传感器数据[1][2][3]接收传感器数据是对温湿度、CO2浓度、光强度传感器数据的采集,以下是实现接收传感器数据的核心代码:Void GenericApp_Send_co2nd_Message(void );//发送CO2浓度值Void GenericApp_Send_rentihongwai_Message(void);//人体红外无线发送函数void GenericApp_Send_wenshidu_Message( void )//发送温湿度函数void GenericApp_Send_guangqiang_Message(void)//发送光强信息函数4.1.2发送数据至串口[4][5]发送传感器数据是对温湿度、CO2浓度、光强度传感器数据通过串口通信发到平台服务,以下是实现发送数据至串口的核心代码:unsigned char str_uart[8];switch ( pkt->clusterId ){case GenericApp_GAN_CLUSTERID:str_uart[0] = 'q';//输出CO2浓度osal_memcpy(&str_uart[1],pkt->cmd.Data,4);HalUARTWrite(0, str_uart, 5);break;case GenericApp_Guangqiang_CLUSTERID:str_uart[0] = 'g';//输出光强度osal_memcpy(&str_uart[1],pkt->cmd.Data,3);HalUARTWrite(0, str_uart, 4);break;case GenericApp_rentihongwai_CLUSTERID:str_uart[0] = 'r';//输出人体osal_memcpy(&str_uart[1],pkt->cmd.Data,2);HalUARTWrite(0, str_uart, 3);break;case GENERICAPP_wenshidu_CLUSTERID: str_uart[0] = 'w';输出温湿度osal_memcpy(&str_uart[1],pkt->cmd.Data,6);HalUARTWrite(0, str_uart, 6);HalUARTWrite(0, "\n", 1); // 回车换行 break;}4.2、平台服务模块设计与实现图、[6]ZigBee通过串口将数据发送到应用服务器平台,将串口中人体、CO2浓度、温度、湿度、光照强度数据显示于平台[6]。

核心代码如下:private StringBuilder builder = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。if (comm.IsOpen){comm.Close();}else{//关闭时点击,则设置好端口,波特率后打开comm.PortName = comboPortName.Text;comm.BaudRate = 115200;try{comm.Open();}catch (Exception ex){//捕获到异常信息,创建新的comm对象comm = new SerialPort();MessageBox.Show(ex.Message);}} //现实异常信息给客户。buttonOpenCloseCom.Text = comm.IsOpen ? "关闭串口" : "打开串口";}//设置按钮的状态string[] ports = SerialPort.GetPortNames();Array.Sort(ports);comboPortName.Items.AddRange(ports);comboPortName.SelectedIndex = comboPortName.Items.Count > 0 ? 0 : -1;//初始化SerialPort对象comm.NewLine = "/r/n";comm.RtsEnable = true;//据实际情况comm.DataReceived += comm_DataReceived;void comm_DataReceived(object sender, SerialDataReceivedEventArgs e){int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致byte[] buf = new byte[n];//声明临时数组存储当前串口数据comm.Read(buf, 0, n);//读取缓冲数据builder.Clear();//清除字符串构造器的内容//因为要访问ui资源,所以需要使用invoke方式同步ui。

this.Invoke((EventHandler)(delegate{}));4.2.2、[7]Socket数据监听Socket数据监听是平台服务对局域网下手机客户端监听,以下是实现Socket数据监听的核心代码:TcpListener = TcpServer.Instance;TcpListener.ListeningPort=int.Parse(textBox2.Text.Trim());if (checkBox1.Checked){//开始侦听TcpListener.BeginListening();//加载数据显示事件TcpListener.TcpDataReceived += new EventHandler(TcpData_Received);}else{ //释放侦听类TcpListener.Dispose();}}4.2.3、数据存储数据库代码平台服务接收到数据,连接数据库,保存到数据库中,核心代码如下:private DataBase myDB;//数据库操作private String inserSql;//数据库操作myDB = new DataBase();//数据库操作inserSql = "insert into dp values ('" + DateTime.Now + "','" + ShareData.RT + "','" + ShareData.WD + "','" + ShareData.SD + "','" + ShareData.GQ + "','" + ShareData.CO2ND + "')"; myDB.ExecDataBySql(inserSql);//数据库操作4.3、Android客户端模块设计与实现图、连接手机WIFI,与电脑处于同一局域网下[8]。

4.3.2、客户端代码编写代码[9][10]客户端代码是手机客户端接收平台服务数据的工具,以下是实现客户端代码的核心代码:int btnStatus=0;//点击Button按钮事件btnStatus = v.getId();if(btnStatus==R.id.btn_TcpConn){//连接服务端ipAddr = this.et_ip.getText().toString();port = Integer.parseInt(this.et_port.getText().toString());cmdStr = "TcpConn";this.sendCmd("TcpConn");}else if(btnStatus==R.id.btn_getAll)//发送接收数据指令{ipAddr = this.et_ip.getText().toString();port = Integer.parseInt(this.et_port.getText().toString());this.sendCmd("getAll");}}public void sendCmd(final String cmd){new Thread(cmd){@Overridepublic void run(){//建立线程try{myClient.connect(ipAddr, port);myClient.sendMsg(cmd);sendStatusStr="发送成功";receiveStr = myClient.getMsg();}catch (UnknownHostException e1) {e1.printStackTrace();sendStatusStr = "未知服务器异常:"+e1.toString();}catch (IOException e2){e2.printStackTrace();sendStatusStr = "连接服务器IO异常:"+e2.toString();}}}.start();showMsg(sendStatusStr);tv_result.setText(receiveStr+"\n"+tv_result.getText());public void showMsg(String msg){Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();}3.3.3、Socket代码编写Socket代码编写是手机客户端连接局域网后与平台服务的通信方式,以下是实现Socket代码编写的核心代码:public void connect(String ip,int myPort) throws UnknownHostException,//建立新线程 IOException{this.ipAddr=ip;this.port=myPort;socket = ne


本文由转载于互联网,如有侵权请联系删除!