🥇这里给一个题目综合评分(每项满分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年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/5c97fbe74221b8546c6900989e5154bb.png)
![img](https://img-blog.csdnimg.cn/img_convert/4aa35e6343d078b1a135fa42fd06f93b.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/eba27bf7e8d2aa4ab8385fdac1587054.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c4b05462fd7a60cd8407e468333aa3d.png)
![img](https://img-blog.csdnimg.cn/img_convert/8a7dd620d00d8ae387d77171dd2f1ce8.png)
![img](https://img-blog.csdnimg.cn/img_convert/f57700652f95177030eab10f71836341.png)
![](https://img-blog.csdnimg.cn/img_convert/b9c35927014c287b10f26132e395aecb.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!