搜索代码

ESP32教程35/55 - 植物监测器,土壤、温度和光照 | SunFounder的ESP32物联网学习套件

ESP32教程35/55 - 植物监测器,土壤、温度和光照 | SunFounder的ESP32物联网学习套件

在本教程中,我们将使用SunFounder ESP32 IoT学习套件中的ESP32微控制器来构建一个植物监测器。该项目结合了多个组件来监测土壤湿度、温度、湿度和光照强度。通过本指南的学习,您将拥有一个功能完备的系统,能够管理和显示植物护理所需的关键参数。如需详细的视觉讲解,请务必观看视频(视频中00:00处)。

ESP32-25_plant_moitor_schematic

硬件详解

本项目使用的主要组件包括ESP32微控制器、DHT11传感器、土壤湿度传感器、光敏电阻(LDR)以及用于显示数据的LCD显示屏。ESP32作为整个系统的核心,负责数据处理和控制任务。它内置Wi-Fi和蓝牙功能,为远程监控提供了连接选项。

光敏电阻
DHT11模块
DHT11模块

DHT11传感器用于测量温度和湿度,而土壤湿度传感器则检测土壤中的水分含量。LDR测量环境光强度,有助于了解植物的光照条件。每个组件都通过提供实时数据,在确保植物健康方面发挥着至关重要的作用。

数据手册详情

制造商 SunFounder
零件编号 DHT11
逻辑/IO电压 3.3 V
电源电压 5 V
输出电流(每通道) 20 mA
峰值电流(每通道) 50 mA
PWM频率指南 不适用
输入逻辑阈值 0.3 VCC(低电平),0.7 VCC(高电平)
压降 / RDS(on) / 饱和电压 不适用
热限制 0°C至50°C
封装 DIP
备注/变体 兼容DHT22

 

  • 确保每个组件的电压水平正确(电机驱动器为5V,传感器为3.3V)。
  • 为按钮使用下拉电阻,以防止输入引脚悬空。
  • 保持布线整洁,以避免混淆和潜在的短路。
  • 在给电路通电前检查连接,以防止损坏。
  • 检查DHT11的接线,因为它对错误连接很敏感。

接线说明

ESP32-25_plant_moitor_wiring

要连接组件,首先连接电源线和地线。ESP32应使用锂电池供电,将正极连接到面包板上的VCC线,负极连接到GND线。DHT11传感器的数据引脚连接到PIN 13,其VCC连接到3.3V线,GND连接到地线。土壤湿度传感器的连接方式类似:其信号引脚连接到PIN 14,VCC连接到3.3V,GND连接到地线。

对于LDR,将一个引脚连接到3.3V线,另一个引脚连接到PIN 35,并从LDR到地线连接一个10k欧姆电阻。LCD显示屏连接到5V线供电,并使用SDASCL引脚分别连接到PIN 21PIN 22。最后,将按钮连接到PIN 32,并将下拉电阻连接到地线,确保未按下时读取低电平,按下时读取高电平。

代码示例与讲解

我们程序的核心首先是为每个组件定义引脚。例如,DHTPIN被分配给PIN 13用于DHT11传感器,而MOIS_PIN被设置为PIN 14用于湿度传感器。这种组织方式有助于跟踪哪个传感器连接到哪个引脚。


#define DHTPIN 13     // 设置连接到DHT11数据引脚的引脚
#define MOIS_PIN 14 // 土壤湿度模块
#define LIGHT_PIN 35 // 光敏电阻

接下来,我们在setup()函数中初始化DHT传感器和LCD显示屏。这对于准备这些组件进行工作至关重要。确保调用dht.begin()对于DHT传感器开始正确读取数值是必不可少的。


void setup() {
  Serial.begin(115200);
  dht.begin();  // 初始化DHT11
  lcd.init();  // 初始化LCD
  lcd.backlight();
}

loop()函数中,我们持续读取温度和湿度值,并将其显示在LCD上。如果按钮被按下,电机将被激活以浇灌植物。该逻辑使用按钮引脚的数字读取来确定是打开还是关闭电机。


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // 打开水泵
  } else {
    digitalWrite(motor1A, LOW); // 关闭水泵
  }
  delay(2000);
}

这种代码结构使得数据和控制的流程清晰明了,确保植物监测器平稳运行。如需更多细节,完整代码将在文章下方加载。

演示/预期效果

完成设置并上传代码后,LCD应交替显示温度和湿度读数以及土壤湿度和光照水平。按下按钮时,水泵应启动,向植物供水。确保所有连接牢固,以避免浮动输入或错误读数等问题(视频中05:30处)。

监测LCD和串口监视器上显示的值将有助于确保系统正常运行。如果遇到问题,请仔细检查接线,并确保所有组件供电正常。

视频时间戳

  • 00:00 开始
  • 2:23 项目介绍
  • 4:02 文档页面
  • 7:43 1-L293D水泵电机驱动器
  • 14:30 2-水泵按钮
  • 16:35 3-DHT11温湿度传感器
  • 19:26 4-土壤湿度传感器
  • 21:43 5-光照传感器
  • 24:47 6-土壤湿度传感器
  • 26:01 完整植物监测器Arduino代码
  • 29:21 演示

图像

DHT11 Module
DHT11 Module
5V DC water pump
5V DC water pump
soil_mositure_module
soil_mositure_module
photoresistor
photoresistor
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_wiring
ESP32-25_plant_moitor_wiring
836-ESP32 Tutorial 35/55- Arduino code for plant monitor
语言: C++
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 13     // Set the pin connected to the DHT11 data pin
#define MOIS_PIN 14 // Soil mOisture module
#define LIGHT_PIN 35 // Photoresistor
#define motor1A 27 // Pump pin
#define motor2A 26 // Pump pin
#define BUTTON 32 // Button

#define DHTTYPE DHT11  // DHT 11
DHT dht(DHTPIN, DHTTYPE);

int page = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

  Serial.begin(115200);

  // Initialize the dht11
  dht.begin();

  lcd.init();  // initialize the lcd
  lcd.backlight();
  lcd.clear();

  // initialize digital pin as an output.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);

  pinMode(BUTTON, INPUT);
}

void loop() {

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  lcd.clear();
  // Show message per 2 second
  if ((page++) % 2) {
    // Display temperature and humidity
    lcd.setCursor(0, 0);
    lcd.print("Humi: ");
    lcd.print(humidity);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print("\xDF");
    lcd.print("C");
  } else {
    // Display moisture and light sensor values
    lcd.setCursor(0, 0);
    lcd.print("Mois: ");
    lcd.print(analogRead(MOIS_PIN));
    lcd.setCursor(0, 1);
    lcd.print("Light: ");
    lcd.print(analogRead(LIGHT_PIN));
  }
  // Water plant while button pressed
  Serial.println(digitalRead(BUTTON));
  if (digitalRead(BUTTON) == HIGH) {
    // Turn on water pump if button is pressed
    digitalWrite(motor1A, HIGH);
    digitalWrite(motor2A, LOW);
  } else {
    // Turn off water pump if button is not pressed
    digitalWrite(motor1A, LOW);
    digitalWrite(motor2A, LOW);
  }

  delay(2000);
}

|||您可能需要的东西

资源与参考

文件📁

Fritzing 文件