基于STM32单片机的智能蔬菜大棚温湿度监测系统设计

embedded/2025/2/22 9:46:55/

引言

在现代农业生产中,温湿度、光照强度和土壤湿度等环境因素对植物的生长起着至关重要的作用。智能蔬菜大棚正是基于这些因素,通过自动化控制和远程监控技术,实现对植物生长环境的精准管理,最终提升蔬菜的产量和质量。本文介绍了一种基于STM32单片机的智能蔬菜大棚温湿度监测系统,具备温湿度检测、光照强度检测、土壤湿度监测、自动控制风扇、水泵、LED等功能,且可通过手机APP与云平台实现远程管理。

 一、系统方案介绍

本系统基于STM32F103单片机作为主控芯片,采用ESP8266-01S WiFi模块实现数据的无线传输。系统通过不同类型的传感器检测温湿度、光照强度和土壤湿度等环境数据,并通过OLED屏幕实时显示。用户可以通过手机APP查看大棚环境数据,还可以通过APP进行设备控制,系统支持自动模式与手动模式两种操作方式。此外,系统还能通过机智云云平台进行数据存储与分析,实现远程监控。

 二、系统架构图

- STM32F103主控单片机:作为系统的核心处理单元,负责数据采集、处理与控制指令的下发。

- ESP8266-01S模块:用于WiFi通讯,将采集的数据上传至云平台,并接收APP的控制指令。

- OLED显示屏:实时显示温湿度、光照强度和土壤湿度等信息。

- 温湿度传感器(DHT11/DHT22):用于测量环境的温度和湿度。

- 光照传感器(LDR):用于检测大棚内部的光照强度。

- 土壤湿度传感器:用于检测土壤中的水分含量。

- 风扇、水泵、LED灯:根据传感器数据自动调节,确保环境条件符合蔬菜生长需求。

 三、功能描述

1. 温湿度监测:通过温湿度传感器(如DHT11/DHT22)实时监测大棚内部温度和湿度,并通过OLED显示屏显示,同时将数据上传至云平台。

2. 光照监测:通过光照强度传感器(如LDR)监测大棚内部的光照强度,当光照不足时自动开启LED灯照明,反之关闭。

3. 土壤湿度监测:利用土壤湿度传感器实时监测土壤水分状况,若土壤湿度低于设定阈值,系统自动启动水泵进行灌溉。

4. 环境数据远程监控:通过ESP8266模块将环境数据传输到机智云云平台,用户可以通过手机APP随时查看大棚的温湿度、光照强度和土壤湿度等信息。

5. 自动控制模式:当温度过高时,系统自动启动风扇;当土壤湿度过低时,系统自动启动水泵;当光照不足时,自动开启LED灯。

6. 手动控制模式:用户通过手机APP手动开启或关闭风扇、水泵、LED灯。

7. 参数设置:用户可以通过物理按键设置温湿度、光照强度和土壤湿度的最大阈值,超过阈值时设备自动启用保护机制。

 四、硬件架构

1. 主控芯片:STM32F103

   - STM32F103系列单片机具有强大的处理能力、丰富的外设接口,适合用于嵌入式系统的开发。

2. WiFi模块:ESP8266-01S

   - 用于无线通信,将数据传输到机智云云平台并接收来自APP的指令。

3. 显示屏:OLED 128x64

   - 显示温湿度、光照强度、土壤湿度等实时数据。

4. 传感器:

   - DHT11/DHT22传感器:用于检测大棚的温度和湿度。

   - LDR(光照传感器):用于检测大棚内部的光照强度。

   - 土壤湿度传感器:用于监测土壤中的湿度。

5. 执行器:

   - 风扇、水泵、LED灯:根据传感器数据进行自动控制。

 五、软件架构

本系统的软件架构包括以下几个模块:

1. 传感器数据采集:定时从温湿度传感器、光照传感器和土壤湿度传感器读取数据。

2. 自动控制:根据设定的阈值,通过控制风扇、水泵和LED灯的开关来调节环境。

3. 数据传输与云平台交互:通过ESP8266模块将数据上传至机智云平台,并接收来自APP的控制指令。

4. 显示与用户界面:在OLED屏幕上显示实时数据,并在APP上提供可视化操作界面。

5. 数据存储与云平台:将数据存储至机智云云平台,进行远程查看和管理。

 六、关键代码展示

1. 温湿度传感器数据读取

#include "dht11.h"// 初始化DHT11传感器
DHT11_Data dht11;// 获取温湿度数据
void getTemperatureHumidity() {if (DHT11_Read(&dht11) == DHT11_OK) {float temperature = dht11.temperature;float humidity = dht11.humidity;// 显示数据OLED_ShowString(0, 0, "Temp: %.1f C", temperature);OLED_ShowString(0, 1, "Humidity: %.1f %%", humidity);}
}

 2. 光照强度读取与LED控制

int lightIntensity = 0;// 获取光照强度
void getLightIntensity() {lightIntensity = analogRead(LDR_PIN);if (lightIntensity < THRESHOLD_LIGHT) {digitalWrite(LED_PIN, HIGH);  // 光照不足,开启LED灯} else {digitalWrite(LED_PIN, LOW);  // 光照充足,关闭LED灯}
}

3. WiFi数据上传至机智云

#include "ESP8266.h"void uploadDataToCloud() {char data[100];sprintf(data, "temp=%.1f&humidity=%.1f", temperature, humidity);ESP8266_SendData(data);
}

 七、总结与展望

本设计基于STM32单片机和ESP8266 WiFi模块,实现了一个多功能的智能蔬菜大棚监测系统。通过实时监测环境数据并自动调整温湿度、光照强度和土壤湿度等参数,确保了蔬菜生长的最佳环境。未来,系统可以进一步扩展,增加更多的环境监测模块,提升自动化水平,使得大棚的管理更加智能化和高效。

八、资料获取

请评论区留言或者私信作者。 


http://www.ppmy.cn/embedded/164292.html

相关文章

C#上位机--结构

引言 在 C# 上位机开发中&#xff0c;我们常常需要处理各种数据&#xff0c;例如从硬件设备采集到的传感器数据、与下位机通信时传输的数据包等。结构&#xff08;struct&#xff09;作为 C# 中的一种值类型&#xff0c;在这种场景下有着广泛且重要的应用。它可以将多个相关的…

Fink与Hadoop的简介以及联系

Fink 和 Hadoop 是两个常用于大数据处理的开源工具&#xff0c;它们可以搭配使用以构建高效的数据处理系统。 一、Fink 和 Hadoop 的关系 Fink&#xff1a; 1、Fink 是一个分布式流处理框架&#xff0c;专注于实时数据处理。 它支持高吞吐、低延迟的流处理&#xff0c;适用于实…

JAVA学习-练习试用Java实现“使用Apache Flink对实时数据流进行复杂事件处理和筛查”

问题&#xff1a; 编写一个Java程序&#xff0c;使用Apache Flink对实时数据流进行复杂事件处理和筛查。 解答思路&#xff1a; Apache Flink 是一个流处理框架&#xff0c;非常适合进行实时数据流的复杂事件处理和筛查。以下是一个简单的Java程序示例&#xff0c;它展示了如何…

游戏引擎学习第112天

黑板&#xff1a;优化 今天的内容是关于优化的&#xff0c;主要讨论了如何在开发中提高代码的效率&#xff0c;尤其是当游戏的帧率出现问题时。优化并不总是要将代码做到最快&#xff0c;而是要确保代码足够高效&#xff0c;以避免性能问题。优化的过程是一个反复迭代的过程&a…

对免认证服务提供apikey验证

一些服务不带认证&#xff0c;凡是可以访问到服务端口&#xff0c;都可以正常使用该服务&#xff0c;方便是方便&#xff0c;但是不够安全。 比如ollama默认安装后就是这样。现在据说网上扫一下端口11434&#xff0c;免apikey的ollama服务一大堆。。。 那我们怎样将本机安装的o…

Effective Objective-C 2.0 读书笔记——协议和分类

Effective Objective-C 2.0 读书笔记——协议和分类 文章目录 Effective Objective-C 2.0 读书笔记——协议和分类在分类中添加属性使用 “class-continuation分类” 隐藏实现细节通过协议提供匿名对象 在分类中添加属性 尽管从技术上说&#xff0c;分类里也可以声明属性&…

2025蓝桥杯JAVA编程题练习Day5

1.最少步数【省模拟赛】 问题描述 小蓝要上一个楼梯&#xff0c;楼梯共有 n 级台阶&#xff08;即小蓝总共要走 nn级&#xff09;。小蓝每一步可以走 1 级、2 级或 3 级台阶。 请问小蓝至少要多少步才能上到楼梯顶端&#xff1f; 输入格式 输入一行包含一个整数 n。 输出…

XML XML约束 一、XML约束概述

一个XML文档一旦有了约束&#xff0c;那么这个XML文档就只能使用约束中创建的元素及属性。如果约束没有创建<a>元素&#xff0c;那么XML文档就不能使用<a>元素 1 什么是xml约束 因为xml文档是可以自定义元素的&#xff0c;这会让使用xml文档的应用程序无法知道x…