Samouczek ESP32 35/55 - Monitor roślin, gleba, temperatura i światło | Zestaw do nauki IoT ESP32 od SunFounder
W tym samouczku zbudujemy monitor roślin z wykorzystaniem mikrokontrolera ESP32 z zestawu edukacyjnego SunFounder ESP32 IoT Learning Kit. Ten projekt łączy kilka komponentów do monitorowania wilgotności gleby, temperatury, wilgotności powietrza i poziomu światła. Po ukończeniu tego przewodnika będziesz mieć w pełni działający system, który może zarządzać i wyświetlać te kluczowe parametry dla pielęgnacji roślin. Aby uzyskać szczegółowe wyjaśnienie wizualne, koniecznie obejrzyj wideo (na wideo w 00:00).

Omówienie sprzętu
Główne komponenty użyte w tym projekcie obejmują mikrokontroler ESP32, czujnik DHT11, czujnik wilgotności gleby, fotorezystor (LDR) oraz wyświetlacz LCD do prezentacji danych. ESP32 służy jako mózg układu, obsługując przetwarzanie danych i zadania sterowania. Posiada wbudowane Wi-Fi i Bluetooth, zapewniając opcje łączności do zdalnego monitorowania.
Czujnik DHT11 mierzy temperaturę i wilgotność powietrza, podczas gdy czujnik wilgotności gleby wykrywa poziomy wilgotności w glebie. Fotorezystor mierzy natężenie światła otoczenia, umożliwiając wgląd w warunki oświetleniowe rośliny. Każdy komponent odgrywa kluczową rolę w zapewnieniu zdrowia rośliny, dostarczając dane w czasie rzeczywistym.
Szczegóły z karty katalogowej
| Producent | SunFounder |
|---|---|
| Numer części | DHT11 |
| Napięcie logiczne/IO | 3,3 V |
| Napięcie zasilania | 5 V |
| Prąd wyjściowy (na kanał) | 20 mA |
| Prąd szczytowy (na kanał) | 50 mA |
| Zalecenia dotyczące częstotliwości PWM | Nie dotyczy |
| Progi logiczne wejściowe | 0,3 VCC (niski), 0,7 VCC (wysoki) |
| Spadek napięcia / RDS(on) / nasycenie | Nie dotyczy |
| Limity termiczne | 0°C do 50°C |
| Obudowa | DIP |
| Uwagi / warianty | Kompatybilny z DHT22 |
- Upewnij się, że poziomy napięcia dla każdego komponentu są prawidłowe (5V dla sterownika silnika, 3,3V dla czujników).
- Użyj rezystorów podciągających do masy dla przycisków, aby zapobiec pływającym wejściom.
- Utrzymuj okablowanie w porządku, aby uniknąć pomyłek i potencjalnych zwarć.
- Sprawdź połączenia przed zasileniem obwodu, aby zapobiec uszkodzeniom.
- Sprawdź okablowanie DHT11, ponieważ jest wrażliwe na nieprawidłowe połączenia.
Instrukcje okablowania

Aby podłączyć komponenty, zacznij od połączenia linii zasilania i masy. ESP32 powinien być zasilany baterią litową, podłączając dodatni zacisk do linii VCC, a masę do linii GND na płytce stykowej. Pin danych czujnika DHT11 łączy się z PIN 13, podczas gdy jego VCC idzie do linii 3,3V, a GND do masy. Czujnik wilgotności gleby podłącza się podobnie: jego pin sygnałowy do PIN 14, VCC do 3,3V, a GND do masy.
Dla fotorezystora podłącz jeden pin do linii 3,3V, a drugi do PIN 35, z rezystorem 10k omów podłączonym od fotorezystora do masy. Wyświetlacz LCD łączy się z linią 5V dla zasilania i używa pinów SDA i SCL podłączonych odpowiednio do PIN 21 i PIN 22. Na koniec podłącz przycisk do PIN 32 z rezystorem podciągającym do masy, zapewniając, że odczytuje stan niski, gdy nie jest wciśnięty, i wysoki, gdy jest wciśnięty.
Przykłady kodu i omówienie
Rdzeń naszego programu zaczyna się od zdefiniowania pinów dla każdego komponentu. Na przykład DHTPIN jest przypisany do PIN 13 dla czujnika DHT11, podczas gdy MOIS_PIN jest ustawiony na PIN 14 dla czujnika wilgotności. Taka organizacja pomaga śledzić, który czujnik jest podłączony do którego pinu.
#define DHTPIN 13 // Ustaw pin podłączony do pinu danych DHT11
#define MOIS_PIN 14 // Moduł wilgotności gleby
#define LIGHT_PIN 35 // Fotorezystor
Następnie inicjalizujemy czujnik DHT i wyświetlacz LCD wewnątrz funkcji setup(). Jest to kluczowe, ponieważ przygotowuje te komponenty do działania. Upewnienie się, że wywołano dht.begin(), jest niezbędne, aby czujnik DHT zaczął poprawnie odczytywać wartości.
void setup() {
Serial.begin(115200);
dht.begin(); // Inicjalizacja DHT11
lcd.init(); // Inicjalizacja LCD
lcd.backlight();
}
W funkcji loop() ciągle odczytujemy wartości temperatury i wilgotności, wyświetlając je na LCD. Jeśli przycisk jest wciśnięty, silnik jest aktywowany w celu podlania roślin. Ta logika używa odczytu cyfrowego pinu przycisku, aby określić, czy włączyć, czy wyłączyć silnik.
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (digitalRead(BUTTON) == HIGH) {
digitalWrite(motor1A, HIGH); // Włącz pompę wody
} else {
digitalWrite(motor1A, LOW); // Wyłącz pompę wody
}
delay(2000);
}
Taka struktura kodu pozwala na wyraźny przepływ danych i sterowania, zapewniając płynne działanie monitora roślin. Aby uzyskać więcej szczegółów, pełny kod znajduje się poniżej artykułu.
Demonstracja / Czego się spodziewać
Po zakończeniu konfiguracji i wgraniu kodu, wyświetlacz LCD powinien na przemian pokazywać odczyty temperatury i wilgotności oraz poziomy wilgotności gleby i światła. Po naciśnięciu przycisku pompa wodna powinna się uruchomić, dostarczając wodę do rośliny. Upewnij się, że wszystkie połączenia są pewne, aby uniknąć problemów, takich jak pływające wejścia lub błędne odczyty (na filmie w 05:30).
Monitorowanie wartości wyświetlanych na LCD i monitorze szeregowym pomoże zapewnić prawidłowe działanie systemu. Jeśli napotkasz problemy, sprawdź dokładnie okablowanie i upewnij się, że wszystkie komponenty są odpowiednio zasilane.
Znaczniki czasu wideo
- 00:00 Start
- 2:23 Wprowadzenie do projektu
- 4:02 Strona dokumentacji
- 7:43 1-Sterownik silnika pompy L293D
- 14:30 2-Przycisk do pompy
- 16:35 3-Czujnik temperatury i wilgotności DHT11
- 19:26 4-Czujnik wilgotności gleby
- 21:43 5-Czujnik światła
- 24:47 6-Czujnik wilgotności gleby
- 26:01 Pełny kod Arduino monitora roślin
- 29:21 Demonstracja
#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);
}
Common Course Links
Common Course Files
Rzeczy, których możesz potrzebować
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
AllegroPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
DokumentacjaESP32 Tutorial 35/55- SunFounder doc page plant monitordocs.sunfounder.com
Pliki📁
Plik 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