Search Code

ESP32 Tutoriaal 35/55 - Plantmonitor, grond, temperatuur en lig | SunFounder se ESP32 IoT-leerkit

ESP32 Tutoriaal 35/55 - Plantmonitor, grond, temperatuur en lig | SunFounder se ESP32 IoT-leerkit

In hierdie tutoriaal gaan ons 'n plantmonitor bou met die ESP32-mikrobeheerder van die SunFounder ESP32 IoT-leerkit. Hierdie projek kombineer verskeie komponente om grondvog, temperatuur, humiditeit en ligvlakke te monitor. Teen die einde van hierdie gids sal jy 'n ten volle funksionerende stelsel hê wat hierdie kritieke parameters vir plantsorg kan bestuur en vertoon. Vir 'n gedetailleerde visuele verduideliking, maak seker om die video te kyk (in video by 00:00).

ESP32-25_plant_moitor_schematic

Hardeware Verduidelik

Die hoofkomponente wat in hierdie projek gebruik word, sluit die ESP32-mikrobeheerder, DHT11-sensor, grondvogsensor, ligafhanklike weerstand (LDR) en 'n LCD vir die vertoon van data in. Die ESP32 dien as die brein van die opstelling en hanteer dataverwerking en beheertake. Dit beskik oor ingeboude Wi-Fi en Bluetooth, wat konnektiwiteitsopsies vir afstandmonitering bied.

fotoweerstand
DHT11 Module
DHT11 Module

Die DHT11-sensor meet temperatuur en humiditeit, terwyl die grondvogsensor vogvlakke in die grond bespeur. Die LDR meet die omgewingsligintensiteit, wat insig in die plant se ligtoestande moontlik maak. Elke komponent speel 'n deurslaggewende rol in die versekering van die plant se gesondheid deur intydse data te verskaf.

Datablad Besonderhede

Vervaardiger SunFounder
Deelnommer DHT11
Logika/IO-spanning 3.3 V
Toevoerspanning 5 V
Uitsetstroom (per kanaal) 20 mA
Piekstroom (per kanaal) 50 mA
PWM-frekwensieriglyne N/A
Insetlogikadrumpels 0.3 VCC (laag), 0.7 VCC (hoog)
Spanningsval / RDS(on) / versadiging N/A
Termiese limiete 0°C tot 50°C
Pakket DIP
Notas / variante Verenigbaar met DHT22

 

  • Verseker behoorlike spanningsvlakke vir elke komponent (5V vir motorbestuurder, 3.3V vir sensors).
  • Gebruik afwaartse weerstande vir drukknoppies om drywende insette te voorkom.
  • Hou bedrading netjies om verwarring en potensiële kortsluitings te vermy.
  • Verifieer verbindings voordat die stroombaan aangeskakel word om skade te voorkom.
  • Kontroleer die DHT11-bedrading aangesien dit sensitief is vir verkeerde verbindings.

Bedradingsinstruksies

ESP32-25_plant_moitor_wiring

Om die komponente te bedraad, begin deur die krag- en grondlyne te verbind. Die ESP32 moet met 'n litiumbattery aangedryf word, deur die positiewe terminaal aan die VCC-lyn en die grond aan die GND-lyn op die broodbord te koppel. Die DHT11-sensor se datapen verbind aan PIN 13, terwyl sy VCC na die 3.3V-lyn en GND na die grond gaan. Die grondvogsensor verbind soortgelyk: sy seinpen aan PIN 14, VCC aan 3.3V, en GND aan grond.

Vir die LDR, verbind een pen aan die 3.3V-lyn en die ander aan PIN 35, met 'n 10k ohm-weerstand wat van die LDR na grond gekoppel is. Die LCD-skerm verbind aan die 5V-lyn vir krag en gebruik SDA en SCL-penne wat onderskeidelik aan PIN 21 en PIN 22 gekoppel is. Laastens, bedraad die drukknoppie aan PIN 32 met die afwaartse weerstand wat aan grond gekoppel is, om te verseker dat dit laag lees wanneer dit nie gedruk word nie en hoog wanneer dit gedruk word.

Kode Voorbeelde & Deurloop

Die kern van ons program begin met die definisie van die penne vir elke komponent. Byvoorbeeld, DHTPIN word aan PIN 13 toegewys vir die DHT11-sensor, terwyl MOIS_PIN op PIN 14 gestel word vir die vogsensor. Hierdie organisasie help om tred te hou met watter sensor aan watter pen gekoppel is.


#define DHTPIN 13     // Stel die pen wat aan die DHT11-datapen gekoppel is
#define MOIS_PIN 14 // Grondvogmodule
#define LIGHT_PIN 35 // Fotoweerstand

Volgende, initialiseer ons die DHT-sensor en die LCD-skerm binne die setup()-funksie. Dit is deurslaggewend aangesien dit hierdie komponente vir werking voorberei. Maak seker om dht.begin() te roep, wat noodsaaklik is vir die DHT-sensor om waardes korrek te begin lees.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Initialiseer die DHT11
  lcd.init();  // Initialiseer die LCD
  lcd.backlight();
}

In die loop()-funksie lees ons voortdurend die temperatuur- en humiditeitswaardes en vertoon dit op die LCD. As die knoppie gedruk word, word die motor geaktiveer om die plante nat te lei. Hierdie logika gebruik die digitale lees van die knoppiepen om te bepaal of die motor aan- of afgeskakel moet word.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Skakel waterpomp aan
  } else {
    digitalWrite(motor1A, LOW); // Skakel waterpomp af
  }
  delay(2000);
}

Hierdie kodestruktuur maak voorsiening vir 'n duidelike vloei van data en beheer, wat verseker dat die plantmonitor glad funksioneer. Vir meer besonderhede, laai die volledige kode hieronder die artikel.

Demonstrasie / Wat om te Verwag

Na voltooiing van die opstelling en oplaai van die kode, behoort die LCD temperatuur- en humiditeitlesings afwisselend met vog- en ligvlakke te vertoon. Wanneer die drukknoppie gedruk word, behoort die waterpomp te aktiveer en water aan die plant te lewer. Maak seker dat alle verbindings veilig is om probleme soos drywende insette of verkeerde lesings te vermy (in video by 05:30).

Die monitering van die waardes wat op die LCD en reeksmonitor vertoon word, sal help om te verseker dat die stelsel korrek funksioneer. As jy probleme ondervind, kontroleer die bedrading weer en verseker dat alle komponente toepaslik van krag voorsien word.

Video Tydstempels

  • 00:00 Begin
  • 2:23 Projek Inleiding
  • 4:02 Dokumentasie bladsy
  • 7:43 1-L293D Pomp motor drywer
  • 14:30 2-Drukknoppie vir Pomp
  • 16:35 3-DHT11 Temperatuur- en humiditeitsensor
  • 19:26 4-slild Vogsensor
  • 21:43 5-Ligsensor
  • 24:47 6-Grondvogsensor
  • 26:01 Volledige Plant Monitor Arduino Kode
  • 29:21 Demonstrasie

Beelde

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
Taal: 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);
}

Goedere wat jy dalk nodig het

Hulpbronne en verwysings

Lêers📁

Fritzing-lêer