网络工程课程设计报告基于以太网的远程温湿度采集控制系统 7.docx
《网络工程课程设计报告基于以太网的远程温湿度采集控制系统 7.docx》由会员分享,可在线阅读,更多相关《网络工程课程设计报告基于以太网的远程温湿度采集控制系统 7.docx(24页珍藏版)》请在冰豆网上搜索。
![网络工程课程设计报告基于以太网的远程温湿度采集控制系统 7.docx](https://file1.bdocx.com/fileroot1/2023-4/16/d1f0ce93-a01a-4476-8c40-b056324245e2/d1f0ce93-a01a-4476-8c40-b056324245e21.gif)
网络工程课程设计报告基于以太网的远程温湿度采集控制系统7
《专业实训课程设计》
课程设计题目:
基于以太网的远程温湿度采集控制系统
一、环境搭建:
1.1前言:
现代社会越来越多的场所会涉及到温度与湿度并将其显示。
由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,例如:
冬天温度为18至25℃,湿度为30%
至80%;夏天温度为23至28℃,湿度为30%至60%。
在此范围内感到舒适的人占95%以上。
在装有空调的室内,室温为19至24℃,湿度为40%至50%时,人会感到最舒适。
如果考虑到温、湿度对人思维活动的影响,最适宜的室温度应是工作效率高。
18℃,湿度应是40%至60%,此时,人的精神状态好,思维最敏捷。
所以,本课程设计就是通过单片机驱动LCD1602,液晶显示温湿度,通过此设计,可以发现本设计有一定的扩展性,而且可以作为其他有关设计的基础。
需要硬件:
WIZnetW5500开发板、网线、数据线、数字温湿度传感器DHT11
需要软件:
hercules_3-2-4、KeiluVision5、FlashLoaderDemo,Wireshark抓包工具
图1-1开发板1图1-2开发板2
实现功能:
检测温度、湿度显示湿度过限报警。
二、实验步骤:
2.1总体步骤:
1、在主初始化W5500有使用的引脚和基础配置,定义数组uint8p[2]={0,0},用于存放温湿度数据。
同时在httputil.c内定义变量hum和temp,分别用来存放温度和湿度,同时在httputil.h中对两个变量进行声明:
externuint8hum;
externuint8temp;
以便其他函数可以使用两个参数。
2、进入While循环,配置DHCP,如果W5500能通过DHCP获取到IP地址。
3、判断是否通过DHCP获取到IP地址,如果获取到了,则进入下一步操作,如果为获取到,则再次进入循环,重新获取DHCP地址。
4、通过DHCP获取到IP地址后,开始通过温湿度函数DHT11_GetValue(p);来获取温室度数据,并且将温湿的数值赋值到hum和temp中。
5、通过hum湿度值对湿度进行判断,如果湿度大于30,则通过GPIO_ResetBits(GPIOX,GPIO_Pin_X)点亮指定的LED灯,如果不大于30度,则通过GPIO_SetBits(GPIOX,GPIO_Pin_X)熄灭指定的LED灯。
6、在httpuil.c中输出该两个参数
sprintf(buf,"settingsCallback({\"ver\":
\"%d.%d\",\
\"mac\":
\"%02X:
%02X:
%02X:
%02X:
%02X:
%02X\",\
\"ip\":
\"%d.%d.%d.%d\",\
\"gw\":
\"%d.%d.%d.%d\",\
\"sub\":
\"%d.%d.%d.%d\",\
\"dns\":
\"%d.%d.%d.%d\",\
\"temp\":
\"%d\",\
\"hum\":
\"%d\",\
});",config_msg.sw_ver[0],config_msg.sw_ver[1],
config_msg.mac[0],config_msg.mac[1],config_msg.mac[2],config_msg.mac[3],
config_msg.mac[4],config_msg.mac[5],config_msg.lip[0],config_msg.lip[1],
config_msg.lip[2],config_msg.lip[3],config_msg.gw[0],config_msg.gw[1],
config_msg.gw[2],config_msg.gw[3],config_msg.sub[0],config_msg.sub[1],
config_msg.sub[2],config_msg.sub[3],config_msg.dns[0],config_msg.dns[1],
config_msg.dns[2],config_msg.dns[3],temp,hum
);
7、在webpage内添加两个新的Lable,一个是温度,一个是湿度
"
湿度:
"\
"
温度:
"\
在再Lable中赋值,一个是湿度hum,一个是温度temp
"if($('txthum'))$('txthum').value=o.hum;"\
"if($('txttemp'))$('txttemp').value=o.temp;"\
同时设置页面每隔3秒刷新一次
""\
8、调用do_http(SOCK_HTTP)函数建立HTTP页面,并且在页面中显示temp和hum数值。
2.2详细步骤:
1、TCP通信:
TCP(TransmissionControlProtocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP数据交互过程依靠“三次握手”建立。
如图所示:
首先,客户端向服务器端发送一个SYN=a(a为随机数)报文,然后服务器收到主机发送的SYN包之后向主机发送SYN=b以及ACK=a+1的报文,其中ACK和上一个SYN对应来保证信息的正确性,最后主机向服务器发送ACK=b+1的报文,服务器收到正确的ACK的报文之后,三次握手成功建立。
图2-1TCP三次握手交互过程
2、DHCP地址获取:
动态主机配置协议,传输时使用UDP包
主机向DHCP服务器获取IP的过程
图2-2DHCP地址获取过程
Discover包发包时间间隔:
1s\9s\15s
微软始终全广播
Cisco环境中,路由器做客户端时,全是广播包。
Win7的PC做客户端时,两个广播包,两个单播包。
使用DHCP时必须在网络上有一台DHCP服务器,而其他机器执行DHCP客户端。
当DHCP客户端程序发出一个信息,请求一个动态的IP地址时,DHCP服务器会根据目前已经配置的地址,提供一个可供使用的IP地址和子网掩码给客户端。
1)客户端向服务器端发送广播包discover包给附近的DHCP服务器。
请求IP地址。
2)DHCP服务器收到discover包之后向主机发送offer包提供ip地址、子网掩码、DNS、网关IP和租期。
如果客户端收到多个offer包,则先获取第一个offer包。
3)主机收到offer包之后发送ARP包查找网络中是否有主机使用此IP地址。
4)当没有主机使用这个IP地址,客户端就发送request广播包给DHCP服务器,告诉主机自己已经使用这个IP地址。
5)DHCP服务器向主机发送ACK的确认消息。
DHCP地址获取完成。
3、HTTP网页链接:
将所有数据以HTML格式显示到网页上。
它使用TCP协议工作,默认端口号为80,。
允许将HTML文档从Web服务器传达到Web浏览器。
HTML是一种创建文档的标记语言,这些文档包含相关信息的链接。
HTTP通信机制是指在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成一系列交互。
如图所示:
图2-3http交互过程
交互过程有以下七个步骤:
1)建立TCP连接。
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接。
HTTP是基于TCP的更高层次的应用层协议,根据规则,只有底层协议建立之后,才能进行更高层协议的连接,因此,首先要建立TCP连接,一般端口号是80。
2)Web浏览器向Web服务器发送请求命令。
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。
3)Web浏览器发送请求头信息。
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一个空包行来通知服务器,它已经结束了该头信息的发送。
4)Web服务器应答。
客户机向服务器发送请求后,服务器会向客户端发送应答。
5)Web服务器发送应答头信息。
正如客户端会随同请求发送关于自身的信息一样,服务器也会随应答向用户发送关于自己的数据及被请求的文档。
6)Web服务器向浏览器发送数据。
Web服务器向浏览器发送头信息之后,它会发送一个空白行来表示头信息的发送到此结束,接着它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
7)Web服务器关闭TCP连接。
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,但是如果浏览器或者服务器在其头信息中加入了”Connection:
keep-alive“这行代码,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。
保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
4、DHT11
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
图2-4DHT11传感器
三、开发板代码:
3.1流程图:
图3-1总体流程图
3.2main.c
#include
#include
#include"stm32f10x.h"
#include"bsp_usart1.h"
#include"bsp_i2c_ee.h"
#include"bsp_i2c_gpio.h"
#include"bsp_led.h"
#include"w5500.h"
#include"W5500_conf.h"
#include"socket.h"
#include"utility.h"
/*app函数头文件*/
#include"dhcp.h"
#include"httputil.h"
#defineSOCK_HTTP5
#include"dht11.h"
intmain(void)
{
uint8p[2];
uint8PHY_connect=0;
systick_init(72);/*初始化Systick工作时钟*/
USART1_Config();/*初始化串口通信:
115200@8-n-1*/
i2c_CfgGpio();/*初始化eeprom*/
printf("W5500DHCPDemoV1.0\r\n");
gpio_for_w5500_config();/*初始化MCU相关引脚*/
reset_w5500();/*硬复位W5500*/
set_w5500_mac();/*配置MAC地址*/
LED_GPIO_Config();
GPIO_Configuration();
socket_buf_init(txsize,rxsize);/*初始化8个Socket的发送接收缓存大小*/
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
printf("W5500作为DHCP客户端,尝试从DHCP服务器获取IP地址\r\n");
while
(1)/*循环执行的函数*/
{
do_dhcp();/*DHCP测试程序*/
if(dhcp_ok==1)
{
DHT11_GetValue(p);
hum=p[0];
temp=p[1];
if(hum>30)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
}
do_http(SOCK_HTTP);
//printf("%d%d\r\n",p[0],p[1]);
}
}
}
3.3dht11.c(温湿度控制)
#include"dht11.h"
#include"bsp_systick.h"
#include
uint8DHT11_ReadData(void)
{
uint8i,temp=0;
for(i=0;i<8;i++)
{
while(!
rDHT11);//每一bit数据都以50us低电平时隙开始
delay_us(33);//精确延时33us
if(rDHT11)//数据位为1
{
temp=temp<<1|0x01;
while(rDHT11);
}
else//数据位为0
temp<<=1;
}
returntemp;
}
uint8DHT11_GetValue(uint8*p)
{
uint8temp,temp1,temp2;
//总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。
GPIO_ResetBits(GPIOA,PA12);
delay_ms(20);//精确延时20ms
GPIO_SetBits(GPIOA,PA12);
//主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号。
delay_us(40);//精确延时40us
//总线为低电平,说明DHT11发送响应信号
if(!
rDHT11)
{
//判断从机发出的低电平响应信号是否结束
while(!
rDHT11);
//DHT11发送响应信号后,再把总线拉高80us
while(rDHT11);
p[0]=DHT11_ReadData();//8bit湿度整数数据
temp1=DHT11_ReadData();//忽略无效数据
p[1]=DHT11_ReadData();//8bit温度整数数据
temp2=DHT11_ReadData();//忽略无效数据
temp=DHT11_ReadData();//8bit校验和
GPIO_SetBits(GPIOA,PA12);
if(temp==(p[0]+p[1]+temp1+temp2))
{
return1;
}
}
return0;
}
3.4webpage.h(Web界面)
#ifndef__WEBPAGE_H
#define__WEBPAGE_H
#defineINDEX_HTML"
DOCTYPEhtml>"\
""\
"
"\
"
WIZNETTrain"\
""\
""\
"body{text-align:
center;background-color:
#e6e6fa;font-family:
微软雅黑;}"\
"#main{margin-right:
auto;margin-left:
auto;margin-top:
30px;}"\
"label{display:
inline-block;width:
150px;}"\
"#mainh3{color:
#66b3ff;text-decoration:
underline;}"\
""\
""\
""\
"
"\
""\
"snow;display:
block;padding:
10px20px;'>"\
"
配置网络参数
"\
"center>"\
"
固件版本号:
"\
"
MAC地址:
"\
"
IP地址:
"\
"
子网掩码:
"\
"
默认网关:
"\
"
DNS服务器:
"\
"
温度:
"\
"
湿度:
"\
"
"\
""\
"