文档库 最新最全的文档下载
当前位置:文档库 › 蔬菜大棚温湿度采集系统的设计

蔬菜大棚温湿度采集系统的设计

蔬菜大棚温湿度采集系统的设计

彭泛水

(陕西理工学院数学与计算机科学学院计算机科学与技术专业1121班,陕西汉中 723000)

指导教师:刘

【摘要】系统将嵌入式技术应用于农作物生长环境各种信息的采集,分别由采集端,传输端,服务器端三部分组成。使用80C52单片机和DHT11温湿度传感器模块采集信息并通过串口传送给ARM终端,ARM终端通过可靠性的网络传输协议TCP/IP协议将串口信息通过Internet传输给服务器端。用户在服务器端可以实时对现场信息进行监控。经过测试并进行结果分析,表明该系统稳定可靠。可应用于各种农作物生长环境的远程监控。

【关键词】嵌入式系统;单片机;ARM;TCP/IP

Design of Crops Growth Environment Monitoring

System

Pensg Rsusi

(Grade 11,Class1101, Major Computer Science and Technology, School of Mathematics and Computer Science, Shaanxi University of Technology, Hanzhong 723000, Shaanxi)

Tutor: LIU

Abstract: This system uses embedded technology in crop growth and environmental monitoring. The system is composed by three parts of the collection side, the network transmission-side and server-side. The program is mainly describes the information collection based on the 80C52 SCM and DHT11 temperature and humidity sensor module and transmitted through the serial port to the ARM terminal. ARM terminal through reliability of the network transmission protocol TCP/IP protocol serial information transfer over the Internet to the server side. Server-side real-time monitor on-site information. The system are Tested and analysis of results shows that is stable and reliable. This system can be applied to remote monitoring of the environment in a variety of crop growth.

Key words: Embedded systems; SCM; ARM; TCP/IP

目录

引言 (1)

1 系统总体设计 (2)

1.1 系统工作原理 (2)

1.2 系统组成 (2)

1.3 系统性能指标 (4)

2 硬件电路设计 (5)

2.1 设计原则 (5)

2.2 系统硬件总体结构 (5)

2.3 单片机的最小系统设计 (5)

2.4 DHT11温湿度传感器 (6)

2.5 串口的简介及作用 (9)

2.6单片机与TQ2440开发板的串口通信 (9)

3 软件设计 (11)

3.1设计原则 (11)

3.2 单片机软件设计 (11)

3.3 TQ2440开发板的软件设计 (13)

3.3.1 Qt的介绍 (14)

3.3.2 串口软件设计 (14)

3.3.3 TQ2440开发板网络连接的设计 (14)

3.4 网络服务器端软件设计 (15)

3.5 数据库设计 (17)

4 系统连接和测试 (20)

5 设计总结与分析 (23)

致谢 (24)

参考文献 (25)

科技外文文献 (26)

附录A: 源程序代码 (36)

附录B: 系统使用说明书 (43)

引言

随着我国农业技术的发展和社会的不断进步,高产、优质的农业需要对农业设施生物环境信息处理的准确性和精确性以及实时性都提出了更高的要求。大力发展农业科技对于构建和谐社会具有重要意义。

历史发展到今天,社会的发展对农业提出了很高的要求,必须要实现优质、高产、高效的现代农业才能满足食品安全的需要。因此,我们必须以高新科技作为支撑点,把农业设施环境的自动检测和控制作为突破口,建立起微机控制的生态数掘自动收集、处理和分析的系统,建立起确保农业持续发展的完善的信息农业设施生物环境管理体系。因为农业设施生物环境是农业生物赖以生存的基础,适时掌握农业设施生物环境,了解来自环境中生物系统状况,是确保农业措施准确恰当的基础。同时,随着电子信息技术在温室控制与管理方面的广泛应用,设施农业、虚拟农业、精准农业等新名词的应运而生,农业设施环境生物信息采集处理以及控制成为发展现代农业的必然。随着社会的加速发展和农业科技的不断进步,农作物生长环境信息采集处理逐渐成为农业生产系统的子系统,直接与农作物产量和农业经济效益联系上。

农业科技的发展,主要是农作物生长环境的监控和调控。随着传感元件、仪表的进步,逐步发展成为对温度、湿度、光照几乎所有环境参数分别进行了自动控制。计算机技术的发展使环境参数的综合控制成为可能。除了对农作物生长环境的实时控制外,在计算机优化环境参数、节水、节能及设施装备的可靠性等很多方面都取得了很好的技术成果。发达国家的温室控制技术正在向高度自动化、智能化方向发展,网络技术、局域网技术已逐渐应用于农作物环境监控与控制中。

本设计的任务是设计一个农作物生长环境远程监控系统。经过三个月的设计与研究,已能远程监控农作物的生长环境的温湿度。本文将详细介绍利用单片机,ARM终端,网络传输模块的具体应用。

1 系统总体设计

本系统主要针对农作物生长环境,设计了以PC 机为服务器,天嵌TQ2440开发版为远程终端,单片机为下位机的农作物环境的网络监控系统。综合考虑系统的精度、效率以及经济性要求这三个方面之后,最终确定下位机以AT89C52单片机为采集端,选用性价比比较高的DHT11温湿度传感器模块,实现对温度精确测量与准确控制。当单片机检测到温度和湿度值时,则通过RS-232串口发送至TQ2440开发版。TQ2440通过实现串口与单片机通讯,通过实现TCP/IP 协议实现与远程服务器通讯。为了便于系统的软件设计、调试、移植、修改,单片机采集端软件以C 语言为基础,采用模块化设计,主要包括单片机的最小系统、数据采集模块、串口发送模块以及串行通讯模块。TQ2440开发板使用Linux 内核并使用QT 文件系统,以C++语言为基础,采用面向对象方法设计,使用TCP/IP 协议传送数据给服务器。服务器使用Qt4.7编写温湿度监控界面,使用MySQL 数据库存储温湿度信息。 1.1 系统工作原理

单片机首先通过传感器DHT11采集农作物生长环境的温湿度信息,再利用单片机的串口进行编程,单片机模块通过RS232接口与TQ2440开发版相连,将传感器测得的温室度数据传送到TQ2440开发板;TQ2440开发板使用TCP/IP 协议传送数据给服务器。在PC 机中,利用面向对象编程,让PC 机和TQ2440开发板通过Internet 进行数据传输,同时PC 机界面显示作物生长环境的实时信息,实现对大棚温湿度实时的测控,保证了人类在远程可以得到农作物的生长环境信息。 1.2 系统组成

整个无线监测系统主要分为三部分:即温度检测、无线传输和PC 机对温度的监测环节。如图1.1所示。

图1.1 系统的整体连接图

(1)温湿度检测模块的组成

在温度检测中,由单片机AT89C52主控制器所组成的最小系统以及外部接口模块主要有温湿度传感器(DHT11),各模块连接如下图1.2所示。

图1.2 单片机温湿度检测模块

(2)TQ2440开发板接入Internet 组成模块

TQ2440开发版硬件主要由ARM9处理器、RAM 、Flash 等组成。系统软件采用linux 内核,文件系统采用Qt4.0。在本设计中,TQ2440开发版接收到串口数据,然后与服务器通过TCP/IP 协议建立网络连

农作物生长环境 TQ2440开发板 测温单片机装置 监控室服务器PC 机 作物生长环境 串口模块 主

时钟控制器 复位单元 电源

温度传感器

液晶显示单元 串口接收模块 TQ2440

主版

时钟控制器 复位单元 电源 Internet 接,接着向服务器传输温湿度数据,数据传输完毕,断开网络连接。模块的连接框图如图1.3所示。

图1.3 TQ2440开发版连接模块框图

(3)PC 机服务器端温湿度的实时显示与历史数据查询

PC 机服务器端接收到TQ2440开发版传输过来的数据,将环境实时数据存入数据库。并以友好界面将农作物生长环境温湿度的实时信息显示,PC 上还可以查询作物生长环境历史数据,可以选择查询时间范围和显示方式,可以以二维表方式或者是温湿度曲线变化图方式。PC 机服务器端温湿度的实时显示与历史数据查询模块如图1.4所示。

图1.4 PC 机服务器端监测模块图

(4)系统设计流程

系统的总体设计分为硬件和软件设计两方面,首先确定系统实现的功能,然后对硬件、软件分别进行规划,完成这些准备工作之后,就可以开始制作硬件电路,编写软件程序,在模块化调试结束后,进行软硬件联调,针对出现的问题对软硬件进行相应的修改,直到调试成功为止。系统的总体设计流程图如图1.5所示。

实时数据显示 服务器端 网络信息 历史信息查询 数据库

图1.5 系统总体设计流程图

1.3 系统性能指标

本系统具有良好的可靠性和经济性,能够实现对作物生长环境准确测量和控制,在实际应用中有一定价值。具体性能指标分述如下。

(1)温度范围:0℃~+50℃; (2)温度精度:2℃;

(3)湿度范围:20-90%RH ; (4)湿度精度:5%RH ;

明确功能要求 软件及硬件的功能分配

硬件电路设计

电路细节设计 软件设计

硬件调试

软件调试 需要开发工具支持

软硬件联调

程序固化需要程序烧写器支持

运行

有问题?

结束

软硬件修改

Y

N

2 硬件电路设计

2.1 设计原则

(1)尽可能选择典型电路,并符合单片机的常规用法。为硬件电路的标准化、模块化打下良好基础。

可靠性和抗干扰设计是硬件设计必不可少的一部分,它包括芯片和器件的选择、去耦电容、滤波电容、电路板的布线等。

(2)尽量朝单片方向设计硬件。硬件器件越多,器件之间相互干扰越强,功耗也会越大,就会不可

避免的降低系统的稳定性。

(3)在速度允许的情况下,尽量使用串行为主的扩展方式。串行扩展具有方便、灵活、电路简单、

占用I/O资源少等特点。

(4)留下一些指示灯或通信口以方便调试和判别系统问题。

2.2 系统硬件总体结构

监控系统的硬件部分按功能划分为三个部分,主控制部分,信号采集部分和通信部分。硬件结构图如图2.1所示。

图2.1 硬件结构图

2.3 单片机的最小系统设计

在本设计中采用了AT89C52单片机作为核心处理器,因此在电路中首先设计的是AT89C52的最小系统。

AT89C52单片机的最小系统包含以下几部分。

(1)单片机供电电路:AT89C52需要可靠的5V供电,在电路图中的VCC和GND为供电网络标识符;

振荡电路:AT89C52需要一个稳定的振荡电路才能够正常工作,单片机的时钟信号是用来提供单片机内各种微操作的基准。在该电路中采用了12MHz的晶振作为AT89C52的时钟源;这里采用的是内部振荡方式,在引脚XTAL1和XTAL2外接晶振,通过内部振荡得到的时钟信号比较稳定,在电路中使用较多。在下面的电路图中可以看到在晶振两侧连了两个电容C2,C3,它们是起稳定振荡频率、快速起振的作用,电容值一般为5~30pF。本设计中用的是30pF的电容。

(2)复位电路:复位电路是单片机正常运行的一个必要部分。复位操作一般有两种基本形式:上电复位和开关复位。在本设计中采用的是第二种。复位电路应该保证单片机在上电的瞬间进行一次有效的复位,在单片机正常工作时将RST引脚置低。此外通过一个按键进行手动复位,在单片机运行不正常时使用。上电后,由于电容充电,是RST持续一段高电平时间。当单片机已经在运行时,按下复位键也能使RST持续一段高电平,从而实现上电且开关复位的操作。通常我们选择的复位电容为10~50μF,电阻为1~10k。在本设计中复位电容选的是47μF的,电阻选的是10k的。

AT89C52的最小系统电路如图2.1所示。

图2.1 AT89C52的最小系统电路

2.4 DHT11温湿度传感器

在选择温湿度传感器时,应考虑的主要因素有温湿度的测量范围、精度、测温时间、稳定性、灵敏度和经济性。

(1)DHT11产品概述

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

(2)传感器性能说明如表2.1所示。

表2.1 传感器性能说明

参数条件Min Typ Max 单位

湿度

分辨率 1 1 1 %RH

8 Bit

重复性±1 %RH

精度25℃±4 %RH

0-50℃±5 %RH 互换性可完全互换

量程范围0℃30 90 %RH

25℃20 90 %RH

50℃20 80 %RH

6 10 15 S

响应时间1/e(63%)25℃,

1m/s 空气

迟滞±1 %RH

长期稳定性 典型值

±1 %RH/yr

续表2.1 参数 条件

Min

Typ

Max

单位

温度

分辨率

1

1

1

8 8 8 Bit 重复性

±1 ℃ 精度

±1 ±2 ℃ 量程范围 0 50 ℃ 响应时间

1/e(63%) 6

30

S

(3)接口说明

建议连接线长度短于20米时用5K 上拉电阻,大于20米时根据实际情况使用合适的上拉电阻,接口如图2.2所示。

VDD

VDD

MCU

DHT11

GND

DATA

5k

2Pin

1Pin

图2.2 DHT11接口图

(4)电源引脚

DHT11的供电电压为 3-5.5V 。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD ,GND )之间可增加一个100nF 的电容,用以去耦滤波。

(5)串行接口 (单线双向)

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms 左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:

一次完整的数据传输为40bit,高位先出。 数据格式:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和

数据传送正确时校验和数据等于“8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据”所得结果的末8

位。

用户MCU 发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit 的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。通讯过程如图2.3所示。

图2.3 通讯过程时序图

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高,如图2.4所示。

图2.4 DHT11响应主机时序图

总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1。格式见下面图示。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。

数字0信号表示方法如图2.5所示。

图2.5 DHT11发送0时序图

数字1信号表示方法,如图2.6所示。

图2.6 DHT11发送1时序图

(5) 测量分辨率

测量分辨率分别为 8bit(温度)、8bit(湿度)。

2.5 串口的简介及作用

串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。所以串行接口是微机应用系统常用的接口。许多外设和计算机按串行方式进行通信,这里所说的串行方式,是指外设与接口电路之间的信息传送方式,实际上,CPU与接口之间仍按并行方式工作。

在单片机系统中,串口是一个非常重要的组成部分。通常使用单片机串口通过RS232接口和电平转换芯片MAX232与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。在单片机编程中,串口占了很重要的地位。

2.6单片机与TQ2440开发板的串口通信

通信接口的选择:

为了便于QT2440开发板和各种外围设备的串行通信连接,更广义地来讲是为了各种数据终端设备(DTE)和数据通信设备(DCE)之间的连接,制定了若干种串行通信接口标准。只要是符合某种标准的设备之间就可以直接互相连接、互相通信。

串行通信接口按电气标准及协议来分包括RS-232、RS-422、RS485、USB等。 RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。

在本设计中,选择RS-232接口就可以满足通信需求了。

目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通信。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5~+15V,负电平在-5~-15V 电平。当无数据传输时,线上为TTL电平,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。完整的RS-232接口有25根线,采用一种25芯(针)的插头座,彼此连接十分方便。现在经常采用一种9针的插座来互相连接,因为25条线中最经常使用的只有9条线。由于一般的微机中都有RS-232接口,利用RS-232通信进行测量,连接、携带、运输方便。在那些临时、快速测量而测量的通道数又不多的场合下,利用RS-232接口的测量模块十分方便。其传送距离最大为约15m,最高速率为20kb/s。基本的数据传送引脚:

TXD:数据发送引脚;

RXD:数据接收引脚;

GND:信号地线;

在单片机通信中最简单的通信只需连这三根线。

由于单片机的串行发送线TXD和接收线RXD是TTL电平,而ARM开发板的tq2440_serial1的RS-232C连接器(D型9针插座)是EIA电平,因此单片机需加接MAX232芯片,通过串行电缆线和ARM开发板相连接。单片机的串口电路图如图2.7所示。

图2.7 单片机串口电路图

RS-232的EIA标准

它是以正负电压来表示逻辑状态,而TTL以高低电平来表示器逻辑状态。目前较广泛使用的转换芯片很多,但很多需要正负12V两种电源,使用不方便。而MAXIM公司的MAX232芯片之需要+5V 电源就可以实现TTL和EIA的双向电平转换,因此得到了广泛应用。

(2)通信协议

在进行数据通信时,必须解决好两个方面的问题:一是可靠性,二是速度。可靠性是第一位的,速度只是在可靠的基础上的追求。可靠快速传输的实现,需要上、下位机软件以及通信协议等各个环节的可靠和相互配合。

在串行通信的硬件设计完成后,通信双方(在本系统中指单片机和上位机)必须约定通信协议,否则将无法保证通信数据的可靠性,从而失去通信的意义。协议一方面要规定通信的基本参数,如通信波特率、数据位数、停止位数及奇偶校验的方式等,更重要的一方面是要规定双方传输数据的格式,以及传输数据时控制数据流的方式。现约定系统的通信协议如下:

串行通信波特率为4800bps;

数据传送格式为1个起始位,8个数据位,1个停止位;

无奇偶校验;

串行通信方式采用查询方式;

3 软件设计

3.1 设计原则

(1)明确任务,弄清软件所承担的任务细节。

(2)软件结构设计,合理的软件结构是设计出一个性能优良的单片机应用系统软件的基础。 模块化程序设计,是单片机应用中最常用的程序设计技术。将一个完整的程序分解成若干个功能相对独立的较小的程序模块,对各个程序模块分别进行设计、编制和调试,最后将各个调试好的程序模块进行联调。 而面向对象程序设计的数据抽象可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程。

(3)编写程序。根据系统功能和操作过程,列出程序的功能流程图。在完成流程图的设计之后,便可编写程序了。 3.2 单片机软件设计

单片机采用C52在keil uvision4的开发环境进行编程,在仿真软件中调试成功后,再把生成的HEX 文件烧到单片机中,在真实的硬件环境下进行测试。

具体设计主要分两部分,一是温湿度传感器的驱动和测温程序,另一个是利用单片机串口编写的无线传输程序。下面将对程序中的关键部分进行阐述。

温湿度传感器接口软件设计

单片机从DHT11完成温湿度数据读取要经过以下步骤:单片机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit 的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。流程图如图3.1所示。

图3.1 单片机软件设计的流程图

具体源码如下: 主函数如下:

void main() {

SCON = 0x50;

发送开始信号 开始 响应信号?

读取40bit 数据 转换数据格式

Y N 校验数据 通过串口发送数据 延时

TMOD|= 0x20;

PCON|= 0x80;

TH1 = 0xF3;

TL1 = 0xF3;

TR1 = 1;

ES = 1;

EA = 1;

SendData(str) ;

Delay(1);

while(1)

{

RH();

str[0]=(U8RH_data_H/10)+48;

str[1]=(U8RH_data_H%10)+48;

str[2]=(U8T_data_H/10)+48;

str[3]=(U8T_data_H%10)+48;

str[4]=(U8RH_data_H/10+U8RH_data_H%10+U8T_data_H/10+U8T_data_H%10)%10+48;

//读取模块数据周期不易小于 8S

Delay(20000);

Delay(20000);

Delay(20000);

Delay(20000);

SendData(str);

}//elihw

}// main

延时函数

void Delay(U16 j){

U8 i;

for(;j>0;j--){

for(i=0;i<27;i++);

}

}

读取传感器数据函数

void RH(void){

P2_0=0;

Delay(180);

P2_0=1;

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入判断从机响应信号

P2_0=1;

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

if(!P2_0) //T !

{

U8FLAG=2;

while((!P2_0)&&U8FLAG++);

U8FLAG=2;

//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

while((P2_0)&&U8FLAG++);

//数据接收状态

COM();

U8RH_data_H_temp=U8comdata;

COM();

U8RH_data_L_temp=U8comdata;

COM();

U8T_data_H_temp=U8comdata;

COM();

U8T_data_L_temp=U8comdata;

COM();

U8checkdata_temp=U8comdata;

P2_0=1;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{

U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}//fi

}//fi

}

发数据给串口函数

SendData(U8 *a){

U8 i;

outdata[0] = a[0];

outdata[1] = a[1];

outdata[2] = a[2];

outdata[3] = a[3];

outdata[4] = a[4];

count = 1;

for (i = 0; i < sizeof(outdata); i++){

Delay_1(100);

SBUF=outdata[i];

}

}

3.3 TQ2440开发板的软件设计

TQ2440开发板和服务器端软件设计采用C++语言,编辑器及界面设计使用Qt Creater进行编写

和设计,开发版的软件采用crosstools_3.4.5交叉编译工具编译,服务器端采用Qt 编译器编译。 3.3.1 Qt 的介绍

Qt 是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI 程式,也可用于开发非GUI 程式,比如控制台工具和服务器。Qt 是面向对象语言,易于扩展,并且允许组件编程。 3.3.2 串口软件设计

用C++具体实现串口的通信,必须掌握Qt 中对串口操作的方法,每种语言都提供了对串口读写操作。在这里我们使用Qt 提供的API 通信函数实现步骤是,它是先打开串口,在得到串口句柄后,再进行串口参数的配置。步骤如图3.2所示。

图3.2 串口通信程序实现步骤

源码如下:

void Widget::on_openMyComBtn_clicked() {

myCom->open(QIODevice::ReadWrite); myCom->setBaudRate(BAUD4800); myCom->setDataBits(DATA_8); myCom->setParity(PAR_NONE); myCom->setStopBits(STOP_1); myCom->setFlowControl(FLOW_OFF); myCom->setTimeout(10); readTimer = new QTimer(this); readTimer->start(100);

connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom())); //信号和槽函数关联,延时一段时间,进行读串口操作 ui->openMyComBtn->setEnabled(false); ui->closeMyComBtn->setEnabled(true); ui->sendMsgBtn->setEnabled(true); }

3.3.3 TQ2440开发板网络连接的设计

TCP 即Transmission Control Protocol ,传输控制协议。与UDP 不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP 协议。 TCP 协议的程序使用的是客户端/服务器模式,在Qt 中提供了QTcpSocket 类来编写客户端程序,使用QTcpServer 类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。面向连接的客户/服务器程序工作流程如图3.4所示。

打开 串口

接收数据和发送数据程序

关闭 串口

配置串口 参数

服务器 客户端

图3.4 面向连接的客户/服务器程序工作流程

TQ2440开发板网络客户端源程序

void Widget::Connect_to_Server() {

QString port = "6666";

tcpClient->connectToHost(ui->hostLineEdit->text(),port.toInt()); }

void Widget::SendMsg() {

outBlock = temp;

qDebug()<<"outBlock:"<

tcpClient->write(outBlock); outBlock.resize(0); tcpClient->close(); }

3.4 网络服务器端软件设计

创建网络服务器端步骤:

(1)创建socket 。

(2)绑定IP 地址,端口等信息到socket 。

服务器端开始建立sockfd 描述符socket() 绑定sockfd 描述符到IP 地址bind() 阻塞,等待客户发送信息 设置允许连接的最大客户端数listen()

客户端开始建立sockfd 描述符 socket()

客户端填充服务端资料

客户端发起连接connect()

read()

处理服务请求 write()

wite()

read()

close()

close()

(3)设置最大连接数。

(4)接收客户端上来的连接。

(5)接收数据。

(6)关闭网络连接。

网络服务器模块代码如下。

void Widget::start()

{

if(!tcpServer.listen(QHostAddress::Any,6666))

{

qDebug() << tcpServer.errorString();

close();

return;

}

}

void Widget::acceptConnection()

{

tcpServerConnection = tcpServer.nextPendingConnection();

connect(tcpServerConnection,SIGNAL(readyRead()),this,SLOT(Receive()));

connect(tcpServerConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::Soc ketError)));

tcpServer.close();

}

服务器端接收到网络上的数据后首先要对数据进行解析,然后对解析后的数据进行校验,如果校验正确,将数据插入数据库,如果不正确,对数据作丢弃处理。源码如下。

void Widget::Receive()

{

inBlock = tcpServerConnection->readAll();

size=inBlock.size();

qDebug()<<"size="<

QString hum1=inBlock.data()[0];

QString hum2=inBlock.data()[1];

QString tem1=inBlock.data()[2];

QString tem2=inBlock.data()[3];

QString sum=inBlock.data()[4];

qDebug()<<"inBlock:"<

qDebug()<<"sum"<

bool ok=true;

qDebug()<<"hum1="<

qDebug()<<"hum2="<

qDebug()<<"tem1="<

qDebug()<<"tem2="<

qDebug()<<"sum="<

if(sum.toInt(&ok,16)==(tem1.toInt(&ok,16)+tem2.toInt(&ok,16)+hum1.toInt(&ok,16)+hum2.toInt(&ok,16))%10) {

ui->label_3->setText(QString::number(tem1.toInt(&ok,16)*10+tem2.toInt(&ok,16)));

ui->label_5->setText(QString::number(hum1.toInt(&ok,16)*10+hum2.toInt(&ok,16)));

QString date = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); QSqlQuery query;

query.prepare("INSERT INTO tem_hum VALUES(?,?,?)"); query.addBindValue(date);

query.addBindValue(tem1.toInt(&ok,16)*10+tem2.toInt(&ok,16)); query.addBindValue(hum1.toInt(&ok,16)*10+tem2.toInt(&ok,16)); bool flag=query.exec(); }//end if

tcpServerConnection->close(); inBlock.resize(0); start();

}

3.5 数据库设计

MySQL 是一个小型关系型数据库管理系统,MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL 的SQL“结构化查询语言”。SQL 是用于访问数据库的最常用标准化语言。MySQL 软件采用了GPL (GNU 通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型企业为了降低企业总体拥有成本而选择了MySQL 作为网络数据库。 (1)根据需求分析得出的个体实体间的关系画E-R 图如图3.5所示。

图3.5 E-R 图

(2)根据上述E-R 图,表的关系模式结构如下所示: 环境(日期时间,温度,湿度) (3)建立数据库

CREATE TABLE `tem_hum` ( `date` datetime NOT NULL,

`temperature` char(20) NOT NULL, `humidity` char(20) DEFAULT NULL, PRIMARY KEY (`date`) ) ; (4)数据库连接源码

bool Widget::createDataBase() {

QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");//连接数据库类型 db.setHostName("localhost");//主机名字 db.setDatabaseName("vegetable");//数据库名字 db.setUserName("root"); db.setPassword("123"); if(!db.open()) {

QMessageBox::critical(0,tr("Database Error"), https://www.wendangku.net/doc/3f16627870.html,stError().text());

环境 日期时间 温度

湿度

相关文档