基于STM32的室外环境监测系统:设计与实施

目 录

摘 要 Ⅰ
Abstract Ⅱ
第1章 绪论 9
1.1 课题研究背景与意义 9
1.2 国内外研究现状 9
1.3 课题研究的主要内容 10
1.4 本文组织结构 10
第2章 系统关键技术介绍 12
2.1 无线传感器网络技术 12
2.2 WiFi通讯技术 13
2.3 单片机技术 13
2.4 物联网云平台 13
第3章 系统需求分析 15
3.1 系统需求概述 15
3.2 系统可行性分析 16
3.2.1 经济可行性 16
3.2.2 技术可行性 16
第4章 系统具体设计与实现 17
4.1 系统总体设计 17
4.2 硬件部分设计 17
4.2.1 stm32单片机 17
4.2.2 dht11温湿度传感器 19
4.2.3 光敏传感器 21
4.2.4 oled显示器 22
4.2.5 ESP8266模块 23
4.3 系统各部分功能实现 24
4.3.1数据的采集 24
4.3.2云平台的接入 25
4.3.3 串口命令的传输 26
4.3.4数据的可视化显示 27
4.4 系统软件的实现 28
4.4.1 MQTT协议 28
4.4.2 ADC采集 30
4.4.3 I2C通信 32
4.5 安卓APP实现 33
4.5.1 Android studio简介 33
4.5.2 Android设备的MQTT对接 33
4.6 系统编辑环境介绍 35
第5章 系统测试 36
5.1 系统搭建完成 36
5.2 测试结果 36
5.2 测试总结 38
第6章 总结与展望 39
6.1 总结 39
6.2 展望 39
参考文献 39
致 谢 40
第3章 系统需求分析
3.1 系统需求概述
放眼整个设计,系统需求分析是对设计做出一个准确判断,需求分析是否到位关系着整个设计最终的成败,包括软件产品的质量。在全面完善的需求分析下,设计者可明确设计的整体方向,大大减少返工重做的可能。因此,需求分析要求对系统所需的功能进行全面的完整的有效的分析。
此次,设计的是一个室外的环境监测系统,考虑本次设计面向的用户是普通家庭,环境温湿度和光照强度时影响室外植物健康生长的重要因素,所以系统所要完成的任务就是要实时准确的监测室外所处环境的温湿度、光照强度等物理信息,然后要直观地反馈到用户管理处。那么最终目的是为了方便客户,所以在系统采集数据之前就要保证系统有简单、经济的特性。当客户不在室外旁边时,就需要用一个合适的传输协议把数据传输到客户端,这也要保证室外环境监测具有可靠性、实时性和直观性,这才能让用户更好分析数据,当客户在家时便需要一个视频显示设备直接反馈信息,然后设置报警值域提醒用户对环境做出合理的处理,这才能体现本次设计功能所在!分析,总结处理之后,其大致模块如下图3-1所示:

图3-1 系统的功能模块图
3.2 系统可行性分析
设计出发点,背景都是好的,系统的构思也是符合实际的,但是在设计完成前系统的可行性分析也是不可或缺的,第一点,室外是用户比较小的一个生活组成部分,所以这就确定此次设计所用的成本不必过大,避免盲目投资导致失败;第二点,系统在理论知识上是可行的,那么就要考虑实际操作中,得来的结果会不会过于鸡肋;第三点,如果实际需要的技术存在过高要求,在消耗经济的同时又消耗人力,这是不是一种浪费。所以在思考这些问题之后才能决定系统该设计的意义。
3.2.1 经济可行性
由于站在的出发点是室外,物件小,客观因素少,所以此系统能做到成本低,流程简单,只需要一些合适的廉价、低功耗的传感器及其传输模块,而且只需要把传感节点部署在室外附近,然后搭建网络,设置好网关,这就避免了大量布线所带来的经济损耗,搭配应用程序让客户无需消耗过多时间照看室外,这便省去了人力,本文转载自http://www.biyezuopin.vip/onews.asp?id=16845如后续问题发现也只需调试节点,又省去了维护成本。

3.2.2 技术可行性
本次设计使用的是物联网相关技术,在万物互联的时代,无线传感器已经在各个领域应用,传感器的使用已经深入到生活且已经难以摆脱,尤其是社会产业的迅速发展,物联网技术越发重要,这样物联网技术的使用方法日益熟练且规范,设备越来越智能化。又有云计算,云平台的加持,个人用户的服务利于慢慢变得丰富,这样也就不用过多考虑数据的存储与处理问题了,然后WiFi结合stm32可以更快的设定终端节点,在app开发方面,随着平台 越来越友好,开源代码越来越多,这样设计一个智能室外环境监测系统愈加可行,这样本次设计的技术需求是不成问题的。
第4章 系统具体设计与实现
4.1 系统总体设计
此次设计的是一个室外环境的监测系统,主要目标就是对室外区域采集温湿度,光照强度等物理数据,然后上传至云平台,最后转发至手机用户端接收。其中温湿度传感器、光敏传感器就是整个系统的感知层,利用stm32将采集到得数据一边通过oled显示出来,另一边再在云平台创建两个api接口,通过WiFi模块接入互联网与云平台建立连接使用mqtt协议把数据传输至云平台,用户就可以使用手机app连入互联网和云平台建立通信,获取室外实时环境数据,查看室外是否健康。系统框架如图4.1所示:

#include "dht11.h"
#include "delay.h"
//	 
								  
//
u8 DHT11_Temp,DHT11_Hum;
//复位DHT11
void DHT11_Rst(void)	   
{                 
	DHT11_IO_OUT(); 	//SET OUTPUT
    DHT11_DQ_OUT=0; 	//拉低DQ
    delay_ms(20);    	//拉低至少18ms
    DHT11_DQ_OUT=1; 	//DQ=1 
	delay_us(30);     	//主机拉高20~40us
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	DHT11_IO_IN();//SET INPUT	 
    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
	{
		retry++;
		delay_us(1);
	};	 
	if(retry>=100)return 1;
	else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
	{
		retry++;
		delay_us(1);
	};
	if(retry>=100)return 1;	    
	return 0;
}
//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void) 			 
{
 	u8 retry=0;
	while(DHT11_DQ_IN&&retry<100)//等待变为低电平
	{
		retry++;
		delay_us(1);
	}
	retry=0;
	while(!DHT11_DQ_IN&&retry<100)//等待变高电平
	{
		retry++;
		delay_us(1);
	}
	delay_us(40);//等待40us
	if(DHT11_DQ_IN)return 1;
	else return 0;		   
}
//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)    
{        
    u8 i,dat;
    dat=0;
	for (i=0;i<8;i++) 
	{
   		dat<<=1; 
	    dat|=DHT11_Read_Bit();
    }						    
    return dat;
}
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
{        
 	u8 buf[5];
	u8 i;
	DHT11_Rst();
	if(DHT11_Check()==0)
	{
		for(i=0;i<5;i++)//读取40位数据
		{
			buf[i]=DHT11_Read_Byte();
		}
		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
		{
			*humi=buf[0];
			*temp=buf[2];
		}
	}else return 1;
	return 0;	    
}
//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在    	 
u8 DHT11_Init(void)
{	 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能PG端口时钟
	
 	GPIO_InitStructure.GPIO_Pin = DHT11_PIN;				 //PG11端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(DHT11_IO, &GPIO_InitStructure);				 //初始化IO口
 	GPIO_SetBits(DHT11_IO,DHT11_PIN);						 //PG11 输出高
			    
	DHT11_Rst();  //复位DHT11
	return DHT11_Check();//等待DHT11的回应
} 

//DHT11_Read_Data(&temperature,&hum);	
//printf("%d  %d\r\n",temperature,hum);























物联沃分享整理
物联沃-IOTWORD物联网 » 基于STM32的室外环境监测系统:设计与实施

发表评论