2024届毕设 基于STM32的农业大棚环境监控系统设计与实现(源码+硬件+论文+答辩)_基于stm32的大棚环境监测系统毕业论文

🥇这里给一个题目综合评分(每项满分5分)

难度系数:3分
工作量:3分
创新点:4分

🧿 项目分享:见文末!

1 开题报告

在这里插入图片描述
在这里插入图片描述

1 主要功能

本系统主要由单片机系统STM32F103、OLED显示、温湿度采集模块、CO2采集模块、光线强度采集模块以及风扇、水泵等控制模块。采用单片机作为主控芯片,将采集到的温湿度和光线,二氧化碳浓度显示到1.8寸OLED显示屏上,来实现当前大棚的采集和控制。

在这里插入图片描述

总体的设计和要求如下:

  • (1)检测农业大棚中各种环境数据,例如:光照、空气温湿度、气体浓度和土壤湿度等。通过手动或自动实现对环境的控制,使大棚内的环境保持在适宜农作物生长的状态。
  • (2)及时显示大棚内温湿度、光照强度、气体浓度和土壤湿度等状态。
  • (3)大棚内的环境参数的上限和下限值可手动进行预设定。
  • (4)大棚内的环境参数低于或高于上下限值时,蜂鸣器启动报警功能,以便用户执行相应的措施,控制参数的变化。
  • (5)手机APP上设置自动和手动状态,满足用户的需求。
  • (6)设置无线通信模块,可通过手机APP显示并远程监控各种环境参数。

2 硬件设计(PCB+原理图+模块)

原理图:

在这里插入图片描述

PCB:

在这里插入图片描述

模块清单(淘宝搜索直接购买):
在这里插入图片描述

3 核心软件设计

核心代码main.c

void chuishi\_1(void) // 初始界面1显示
{

	Gui\_DrawFont\_GBK16(0, 0, BLACK, WHITE, "空气温度: ℃");
	Gui\_DrawFont\_GBK16(0, 16, BLACK, WHITE, "空气湿度: %");
	Gui\_DrawFont\_GBK16(0, 32, BLACK, WHITE, "土壤湿度: %");
	Gui\_DrawFont\_GBK16(0, 48, BLACK, WHITE, "光照强度: lux");
	Gui\_DrawFont\_GBK16(0, 64, BLACK, WHITE, "二氧化碳: ‰");
	Gui\_DrawFont\_GBK16(10, 144, BLACK, WHITE, "WIFI:");
	if (Onenet_succes)
		Gui\_DrawFont\_GBK16(60, 144, BLACK, WHITE, "已连接:");
	else
		Gui\_DrawFont\_GBK16(60, 144, BLACK, WHITE, "未连接:");
}
void chuishi\_2(void)
{
	Gui\_DrawFont\_GBK16(10, 30, BLACK, WHITE, "温度阈值:");
	Gui\_DrawFont\_GBK16(10, 46, BLACK, WHITE, "温度阈值:");
	Gui\_DrawFont\_GBK16(10, 62, BLACK, WHITE, "土壤湿度阈值:");
	Gui\_DrawFont\_GBK16(10, 88, BLACK, WHITE, "光照阈值:");
	Gui\_DrawFont\_GBK16(10, 102, BLACK, WHITE, "二氧化碳阈值:");
}
void control\_gui(void) // 控制端口显示
{

	switch (control_mode)
	{
	case 0:
		Gui\_DrawFont\_GBK16(0, 128, BLUE, WHITE, "自动");
		Gui\_DrawFont\_GBK16(45, 128, BLACK, WHITE, "手动");
		Gui\_DrawFont\_GBK16(90, 128, BLACK, WHITE, "云端");
		break;
	case 1:
		Gui\_DrawFont\_GBK16(0, 128, BLACK, WHITE, "自动");
		Gui\_DrawFont\_GBK16(45, 128, BLUE, WHITE, "手动");
		Gui\_DrawFont\_GBK16(90, 128, BLACK, WHITE, "云端");
		break;
	case 2:
		Gui\_DrawFont\_GBK16(0, 128, BLACK, WHITE, "自动");
		Gui\_DrawFont\_GBK16(45, 128, BLACK, WHITE, "手动");
		Gui\_DrawFont\_GBK16(90, 128, BLUE, WHITE, "云端");
		break;
	}
}
void GUI\_Test1(void) /// 主界面控制和显示,环境数据显示
{

	if (Gui_mode_last != Gui_mode) // 判断是否改变,更新固定显示
	{
		chuishi\_1();
		Gui_mode_last = Gui_mode;
	}

	LCD\_ShowNum(70, 0, SUR_status.air_tem, 2, BLACK, WHITE);
	LCD\_ShowNum(70, 16, SUR_status.air_hum, 2, BLACK, WHITE);
	LCD\_ShowNum(70, 32, SUR_status.soil_hum, 2, BLACK, WHITE);
	LCD\_ShowNum(70, 48, SUR_status.light, 4, BLACK, WHITE);
	LCD\_ShowNum(70, 64, SUR_status.car, 2, BLACK, WHITE); // 数据显示
}
void GUI\_Test2(void) // 参数设置显示
{
	if (Gui_mode_last != Gui_mode) // 初始显示
	{

		Gui\_DrawFont\_GBK16(40, 0, BLACK, WHITE, "参数设置");
		Gui\_DrawFont\_GBK16(10, 16, BLACK, WHITE, "温度阈值:");
		Gui\_DrawFont\_GBK16(10, 32, BLACK, WHITE, "土湿阈值:");
		Gui\_DrawFont\_GBK16(10, 48, BLACK, WHITE, "光照阈值:");
		Gui\_DrawFont\_GBK16(10, 64, BLACK, WHITE, "CO2阈值:");
		Gui_mode_last = Gui_mode;
	}
	Gui\_DrawFont\_GBK16(0, threshold_sta \* 16, BLACK, WHITE, "\*");
	LCD\_ShowNum(80, 16, SUR_status.air_tem_num, 2, BLACK, WHITE);
	LCD\_ShowNum(80, 32, SUR_status.soil_hum_num, 2, BLACK, WHITE);
	LCD\_ShowNum(80, 48, SUR_status.light_num, 4, BLACK, WHITE);
	LCD\_ShowNum(80, 64, SUR_status.car_num, 3, BLACK, WHITE); // 参数显示
}

void GUI\_Test3(void) // 手动控制界面
{
	if (Gui_mode_last != Gui_mode) // 界面显示
	{

		Gui\_DrawFont\_GBK16(40, 0, BLACK, WHITE, "手动控制");
		Gui\_DrawFont\_GBK16(20, 16, BLACK, WHITE, "风扇:");
		Gui\_DrawFont\_GBK16(20, 32, BLACK, WHITE, "水泵:");
		Gui\_DrawFont\_GBK16(20, 48, BLACK, WHITE, "灯光:");
		Gui_mode_last = Gui_mode;
	}
	Gui\_DrawFont\_GBK16(0, threshold_sta_control \* 16, BLACK, WHITE, "\*"); // 显示选择位置
	if (FAN_KEY)														  // 手动控制显示文字
		Gui\_DrawFont\_GBK16(80, 16, BLACK, WHITE, "开");
	else
		Gui\_DrawFont\_GBK16(80, 16, BLACK, WHITE, "关");

	if (Water_pump_KEY)
		Gui\_DrawFont\_GBK16(80, 32, BLACK, WHITE, "开");
	else
		Gui\_DrawFont\_GBK16(80, 32, BLACK, WHITE, "关");

	if (LED_KEY)
		Gui\_DrawFont\_GBK16(80, 48, BLACK, WHITE, "开");
	else
		Gui\_DrawFont\_GBK16(80, 48, BLACK, WHITE, "关");
}


int main(void)
{
	unsigned char \*dataPtr = 0;
	delay\_init();		 // 延时函数初始化
	SWITCH\_Init();		 // 初始化与LED连接的硬件接口 水泵 风扇
	Usart2\_Init(115200); // wifi模块串口
	uart\_init(115200);	 // 串口1

	I2C\_GPIO\_Config(); // iic初始化 ccs811,模块初始化 检测CO2
	CS\_EN();		   // 对ccs811 配置
	delay\_ms(100);
	ON\_CS();
	delay\_ms(100);
	Single\_ReadI2C(CCS811_Add, 0x20, Information, 1); // Read CCS's information ,ID,0x81

	Single\_ReadI2C(CCS811_Add, 0x23, &Information[1], 2); // FW\_Boot\_Version
	Single\_ReadI2C(CCS811_Add, 0x24, &Information[3], 2); // FW\_App\_Version
	Single\_ReadI2C(CCS811_Add, 0x00, &Status, 1);
	if (Status & 0x10)
		Single\_MWriteI2C\_byte(CCS811_Add, 0xF4, &temp, 0); // Used to transition the CCS811 state from boot to application mode, a write with no data is required.
	Single\_ReadI2C(CCS811_Add, 0x00, &Status, 1);
	Single\_ReadI2C(CCS811_Add, 0x01, &MeasureMode, 1);
	Single\_WriteI2C\_byte(CCS811_Add, 0x01, 0x10); // Write Measure Mode Register,sensor measurement every second,no interrupt
	OFF\_CS();
	// 二氧化碳模块初始化

	KEY\_Init();			 // 按键初始化
	Lcd\_Init();			 // st7735 LCD屏幕初始化
	LCD_LED_SET;		 // 通过IO控制背光亮
	Lcd\_Clear(WHITE);	 // 清屏
	Adc\_Init();			 // ADc初始化,采集土壤湿度模块的模拟量
	init\_data();		 // 初始阈值参数设置
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/a5101a59d22774321ead58bb5bdc49aa.png)

![img](https://img-blog.csdnimg.cn/img_convert/e564013cece2921ef474bf3219b68e51.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/af309dff40d5f40ce0514111027979d6.png)

 **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

![img](https://img-blog.csdnimg.cn/img_convert/d6adb662d6d012e9c57805c8e3437125.png)

![img](https://img-blog.csdnimg.cn/img_convert/f7a75a16db624bf0c59b60a52f8ecb32.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值