毕设题目1 《基于STM32的大棚环境检测》

 1、内容简介:通过STM32F103芯片驱动OLED显示环境温湿度、土壤温湿度和光照强度,并可以通过按键控制温湿度的预设值进行报警,当湿度小于预设值时开启水泵,并将数据上传到阿里云和手机APP。

2、硬件选型:主控:STM32F103C8T6

                        OLED:四脚OLED

                        温湿度检测:DHT11

                        土壤湿度:土壤湿度检测模块

                         WIFI:ESP8266-01S

3、主要程序

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "sys.h"
#include "OLED.h"
#include "DHT11.h"
#include "AD.h"
#include "Key.h"
#include <stdbool.h> 
#include "MyUSART.h"
#include "esp.h"
#include "BH1750.h"


#define ADC1_DR_Address   ((uint32_t)0x4001244C)//ADC的外设地址
int temperature,Humidity;
int soilHumidity;
float LightLux;


uint8_t MAN=0;
uint8_t OM,OX,Key_Num,Key1_Num,Key2_Num;
u16 WD=0,WD1=0,SI=0,SI1=0;
u16 temp=0,temp1=0;
float Light=10;


void BG_Init(void);
void LED_Init(void);
void Motor_Init(void);
void Fee_Init(void);
void Init_Pan(void);
int main(void)
{
	uint8_t wendu,shidu;
	int moisture;
	
	
	MyUSART_Init();//串口初始化
	Esp_Init();//esp初始化
	BH1750_Init();  //BH1750初始化
  OLED_Init();
	DHT11_INIT();
	BG_Init();
	LED_Init();
	Motor_Init();
	Fee_Init();
	Init_Pan();
	Key_Init();
	Adc_Init();
	
	WD1=temp/10%10;
  WD=temp%10;
	SI1=temp1/10%10;
  SI=temp1%10;
	while (1)
	{

		Esp_PUB();
		Read_DHT_Data(&wendu,&shidu);
		temperature=wendu;
		Humidity=shidu;
		
		if (!i2c_CheckDevice(BH1750_Addr))
				{
					Light = LIght_Intensity();              //获取光照强度
				}	
				LightLux=Light;
		
	moisture=ADC_GetConversionValue(ADC1)*3.3/4096*10;
		soilHumidity=moisture;
		
		
		
		
		
		Key_Num=Key_GetNum();
		Key1_Num=Key1_GetNum();
		Key2_Num=Key2_GetNum(); 
		
		if(Key_Num == 0)//主页面
		{
				OX=0;
			OM++;
		if(OM == 1 )
		  {
				//光照
		//		OLED_Clear();//清屏一次
				OLED_ShowCHINESE(1,1,14,15);
					OLED_ShowString(1,5,":");
				
				//空气温湿度
			OLED_ShowCHINESE(2,1,0,2);//静态显示部分
			OLED_ShowString(2,7,":");
			OLED_ShowCHINESE(2,6,7,7);//OLED显示摄氏度
			OLED_ShowString(2,16,"%");	
				//土壤湿度
				OLED_ShowString(3,1,"Soil");
				OLED_ShowString(3,5,":");
	
				//光照阈值设置
			OLED_ShowCHINESE(4,1,14,15);
			OLED_ShowString(4,5,":");
		  }
			OLED_ShowNum(1,8,Light,4);
			
			
			
			
			OLED_ShowNum(2,8,wendu,2);//显示温度			
	  	OLED_ShowNum(2,14,shidu,2);//显示湿度
			
			OLED_ShowNum(3,7,moisture,2);
			
			//光照阈值设置
			OLED_ShowNum(4,7,	WD1,1);//显示光照
		  OLED_ShowNum(4,8,WD,1);
			
//			OLED_ShowNum(3,5,CO2,2);
		
			
		
		}
		//设置湿度阈值
		 if(Key_Num == 1)
		 {
	
			OM=0;
			OX++;
			if(OX == 1)
			{
				OLED_Clear();//清屏一次
		  OLED_ShowString(1,1,"Soil");
				OLED_ShowString(1,5,":");
			
			}
			OLED_ShowNum(1,7,	SI1,1);//显示湿度	
		  OLED_ShowNum(1,8,SI,1);//显示湿度	
		 }
		

			//温度阈值
			if(Key1_Num == 2&&Key_Num == 0)//加
	{
		WD+=1;
		 if(WD > 9)
		  {
			 WD=0;
			 WD1++;
		  }		
	}
	
		
		if(Key2_Num == 3&&Key_Num == 0)//阈值设置(温度减)
	  {
		
			if(WD==0)
			{
			WD1--;
				WD=9;
			}
			 else
			 {
			 WD--;
			 
			 }
		 }
		
		
			//湿度阈值
			if(Key1_Num == 2&&Key_Num == 1)//加
	{
		SI+=1;
		 if(SI > 9)
		  {
			 SI=0;
			 SI1++;
		  }		
	}
	
		
		if(Key2_Num == 3&&Key_Num == 1)//阈值设置(湿度减)
	  {
		
			if(SI==0)
			{
			SI1--;
				SI=9;
			}
			 else
			 {
			 SI--;
			 }
			
		 }
		
		
			
			
			//报警
		 if(Light<20||Light<WD1*10+WD)
			{
				GPIO_SetBits(GPIOA, GPIO_Pin_4);//开补光灯
			}
			if(Light>20&&Light>WD1*10+WD)
			{
			GPIO_ResetBits(GPIOA, GPIO_Pin_4);//关补光灯
			}
			
			
			if(moisture<20||moisture<SI1*10+SI)
			{
					 GPIO_ResetBits(GPIOC, GPIO_Pin_13);//湿度报警,小灯闪烁
				Delay_ms(10);
				GPIO_SetBits(GPIOC, GPIO_Pin_13);
				
				GPIO_SetBits(GPIOA,GPIO_Pin_3);//开灌溉
			}
			if(moisture>20&&moisture>SI1*10+SI)
			{
				GPIO_SetBits(GPIOC, GPIO_Pin_13);//关小灯
				
				
					GPIO_ResetBits(GPIOA,GPIO_Pin_3);//关灌溉
			}

		if(wendu >30)
		{
		GPIO_SetBits(GPIOA, GPIO_Pin_6);//温度大于30,开风扇
		}
		if(wendu<30)
		{
			GPIO_ResetBits(GPIOA, GPIO_Pin_6);//温度小于30,开风扇
		}
		
	}
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值