ESP32 Урок 35/55 — Монитор растений, почва, температура и свет | Учебный набор SunFounder для ESP32 IoT
В этом руководстве мы создадим монитор растений с использованием микроконтроллера ESP32 из учебного набора SunFounder ESP32 IoT Learning Kit. Этот проект объединяет несколько компонентов для контроля влажности почвы, температуры, влажности воздуха и уровня освещенности. К концу этого руководства у вас будет полностью работающая система, которая сможет управлять и отображать эти важные параметры для ухода за растениями. Подробное визуальное объяснение смотрите в видео (в видео на 00:00).

Описание аппаратного обеспечения
Основные компоненты, используемые в этом проекте, включают микроконтроллер ESP32, датчик DHT11, датчик влажности почвы, фоторезистор (LDR) и ЖК-дисплей для отображения данных. ESP32 служит мозгом системы, обрабатывая данные и выполняя задачи управления. Он имеет встроенные Wi-Fi и Bluetooth, что обеспечивает возможности подключения для удаленного мониторинга.
Датчик DHT11 измеряет температуру и влажность воздуха, а датчик влажности почвы определяет уровень влаги в почве. Фоторезистор измеряет интенсивность окружающего света, что позволяет получить информацию об условиях освещения растения. Каждый компонент играет решающую роль в обеспечении здоровья растения, предоставляя данные в реальном времени.
Данные из технической документации
| Производитель | SunFounder |
|---|---|
| Номер детали | DHT11 |
| Логическое/IO напряжение | 3,3 В |
| Напряжение питания | 5 В |
| Выходной ток (на канал) | 20 мА |
| Пиковый ток (на канал) | 50 мА |
| Рекомендации по частоте ШИМ | Н/Д |
| Пороговые значения входной логики | 0,3 ВСС (низкий), 0,7 ВСС (высокий) |
| Падение напряжения / RDS(on) / насыщение | Н/Д |
| Тепловые пределы | от 0°С до 50°С |
| Корпус | DIP |
| Примечания / варианты | Совместим с DHT22 |
- Обеспечьте правильные уровни напряжения для каждого компонента (5 В для драйвера двигателя, 3,3 В для датчиков).
- Используйте подтягивающие резисторы для кнопок, чтобы предотвратить плавающие входы.
- Содержите проводку в порядке, чтобы избежать путаницы и возможных коротких замыканий.
- Проверьте соединения перед подачей питания на схему, чтобы предотвратить повреждения.
- Проверьте подключение DHT11, так как он чувствителен к неправильным соединениям.
Инструкции по подключению

Для подключения компонентов начните с соединения линий питания и заземления. ESP32 должен питаться от литиевой батареи: положительный вывод подключается к линии VCC, а заземление — к линии GND на макетной плате. Вывод данных датчика DHT11 подключается к PIN 13, его VCC — к линии 3,3 В, а GND — к земле. Датчик влажности почвы подключается аналогично: его сигнальный вывод — к PIN 14, VCC — к 3,3 В, а GND — к земле.
Для фоторезистора подключите один вывод к линии 3,3 В, а другой — к PIN 35, при этом резистор 10 кОм соединяется от фоторезистора с землей. ЖК-дисплей подключается к линии 5 В для питания и использует выводы SDA и SCL, подключенные к PIN 21 и PIN 22 соответственно. Наконец, подключите кнопку к PIN 32 с подтягивающим резистором, соединенным с землей, чтобы она считывала низкий уровень, когда не нажата, и высокий, когда нажата.
Примеры кода и пояснения
Ядро нашей программы начинается с определения выводов для каждого компонента. Например, DHTPIN назначается на PIN 13 для датчика DHT11, а MOIS_PIN устанавливается на PIN 14 для датчика влажности. Такая организация помогает отслеживать, какой датчик подключен к какому выводу.
#define DHTPIN 13 // Установите вывод, подключенный к выводу данных DHT11
#define MOIS_PIN 14 // Модуль влажности почвы
#define LIGHT_PIN 35 // Фоторезистор
Далее мы инициализируем датчик DHT и ЖК-дисплей внутри функции setup(). Это важно, так как подготавливает эти компоненты к работе. Обязательный вызов dht.begin() необходим для того, чтобы датчик DHT начал правильно считывать значения.
void setup() {
Serial.begin(115200);
dht.begin(); // Инициализация DHT11
lcd.init(); // Инициализация ЖК-дисплея
lcd.backlight();
}
В функции loop() мы непрерывно считываем значения температуры и влажности, отображая их на ЖК-дисплее. Если кнопка нажата, двигатель активируется для полива растений. Эта логика использует цифровое чтение вывода кнопки, чтобы определить, включать или выключать двигатель.
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (digitalRead(BUTTON) == HIGH) {
digitalWrite(motor1A, HIGH); // Включить водяной насос
} else {
digitalWrite(motor1A, LOW); // Выключить водяной насос
}
delay(2000);
}
Эта структура кода обеспечивает четкий поток данных и управления, гарантируя бесперебойную работу монитора растений. Для получения более подробной информации полный код загружен ниже статьи.
Демонстрация / Что ожидать
После завершения настройки и загрузки кода на ЖК-дисплее должны попеременно отображаться показания температуры и влажности, а также уровня влажности почвы и освещенности. При нажатии кнопки водяной насос должен активироваться, подавая воду к растению. Убедитесь, что все соединения надежны, чтобы избежать таких проблем, как плавающие входы или неверные показания (на видео на 05:30).
Контроль значений, отображаемых на ЖК-дисплее и в последовательном мониторе, поможет убедиться в правильной работе системы. Если возникнут проблемы, перепроверьте подключение и убедитесь, что все компоненты получают соответствующее питание.
Таймкоды видео
- 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 Демонстрация
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 13 // Установите контакт, подключенный к пину данных DHT11.
#define MOIS_PIN 14 // Модуль влажности почвы
#define LIGHT_PIN 35 // Фоторезистор
#define motor1A 27 // Пин насоса
#define motor2A 26 // Пин насоса
#define BUTTON 32 // Кнопка
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
int page = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
// Инициализируйте dht11
dht.begin();
lcd.init(); // инициализировать lcd
lcd.backlight();
lcd.clear();
// инициализировать цифровой пин как выходной.
pinMode(motor1A, OUTPUT);
pinMode(motor2A, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
// Считывание температуры или влажности занимает около 250 миллисекунд!
// Показания датчика могут быть "старыми" до 2 секунд (это очень медленный датчик)
float humidity = dht.readHumidity();
// Читать температуру в градусах Цельсия (по умолчанию)
float temperature = dht.readTemperature();
// Проверьте, не было ли сбоев чтения, и завершите выполнение (чтобы попробовать снова).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
lcd.clear();
// Показывать сообщение каждые 2 секунды
if ((page++) % 2) {
// Отображать температуру и влажность
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 {
// Отображение значений датчиков влажности и освещенности
lcd.setCursor(0, 0);
lcd.print("Mois: ");
lcd.print(analogRead(MOIS_PIN));
lcd.setCursor(0, 1);
lcd.print("Light: ");
lcd.print(analogRead(LIGHT_PIN));
}
// Поливайте растение, пока кнопка нажата.
Serial.println(digitalRead(BUTTON));
if (digitalRead(BUTTON) == HIGH) {
// Включите водяной насос, если кнопка нажата.
digitalWrite(motor1A, HIGH);
digitalWrite(motor2A, LOW);
} else {
// Выключите водяной насос, если кнопка не нажата.
digitalWrite(motor1A, LOW);
digitalWrite(motor2A, LOW);
}
delay(2000);
}
Common Course Links
Common Course Files
Вещи, которые могут вам понадобиться
-
АмазонкаКупите LCD1602-I2C на Amazonamzn.to
-
eBayКупить LCD1602-I2C на eBayebay.us
-
АлиЭкспрессКупите 10 шт. LCD1602-I2C на AliExpresss.click.aliexpress.com
Ресурсы и ссылки
-
ДокументацияESP32 Учебник 35/55 - страница документа SunFounder, мониторинг растенийdocs.sunfounder.com
Файлы📁
Файл Fritzing
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB -
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB