//Incluimos las librerias
#include "DHTesp.h"
#include <WiFi.h>
#include <ESP32Servo.h>
//Declaramos las variables y el pin en el que se encuentran
int pinDHT = 15;
int pinLuz = 34;
int datosluz;
float valorluz;
int pos;
Servo servo;
int pinServo=4;
//Instanciamos el DHT
DHTesp dht;
void setup() {
Serial.begin(115200);
//Inicializamos la posicion del servo
servo.attach(pinServo, 500, 2500);
//Inicializamos el dht
dht.setup(pinDHT, DHTesp::DHT22);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);//iniciamos el wifi.begin para iniciar la conexión al wifi
while (WiFi.status() != WL_CONNECTED) {
delay(100);// mientras no se conecte, pondrá puntos suspensivos
Serial.print(".");
}
Serial.println(" Connected!");// una vez conectado empezará la medición
randomSeed(analogRead(0));
delay(2000);
}
void loop() {
datosluz=analogRead(pinLuz); // leemos los datos que recibe el sensor
valorluz=map(datosluz, 4064, 32, 100, 0); // convertimos los datos que recibe a un baremo de entre 0-100
//Obtenemos el arreglo de datos (humedad y temperatura)
TempAndHumidity data = dht.getTempAndHumidity();
//Mostramos los datos de la temperatura, humedad y luz
Serial.println("Temperatura: " + String(data.temperature, 2) + "°C");
Serial.println("Humedad: " + String(data.humidity, 1) + "%");
Serial.print("Luminosidad: ");
Serial.println(valorluz);
//declaramos int tierra_humedad
int tierra_humedad = random(1, 100); // Generamos un número aleatorio para la humedad de la tierra debido a la falta de este sensor
Serial.print("Humedad de la tierra: ");
Serial.println(tierra_humedad);
//declaramos int nivelph
int nivelph = random (1, 14); //Generamos un número aletario para el nivel de PH debido a la falta de este sensor
Serial.print("El nivel de PH es de: ");
Serial.println(nivelph);
if(nivelph>8){//creamos un if donde si el PH es superior a 8 mande un aviso de absorición de nutrientes
Serial.println("El nivel de PH es demasiado alto, debe estar entre 4 y 7 para una buena absorción de nutrientes");
}
if(nivelph<3){//creamos un segundo if donde si el ph es inferior de 3 mande un aviso de absorción de nutrientes
Serial.println("El nivel de PH es insuficiente para que absorba nutrientes");
}
if(valorluz<50){// creamos un tercer if que avisará de si la planta tiene poca luz gracias a la fotorresistencia
Serial.println("La planta necesita más iluminación");
}
if(data.temperature>28){// creamos un cuarto if que avisará de si la planta se encuentra en una zona con mucha temperatura
Serial.println("La planta está secandose, dentro de poco necesitará riego");
}
if(tierra_humedad<50 && data.humidity<50){ // creamos el ultimo if donde se avisará si la planta necesita regarse
Serial.println("Necesita regarse");
for (pos = 0; pos <= 180; pos += 1) {
//Movemos el servo a los grados que le entreguemos
servo.write(pos);
//Esperamos 15 milisegundos
delay(15);
}
//Ciclo que posicionara el servo desde 180 hsta 0 grados
for (pos = 180; pos >= 0; pos -= 1) {
//Movemos el servo a los grados que le entreguemos
servo.write(pos);
//Esperamos 15 milisegundos
delay(15);
}
}
Serial.println("---");
// le ponemos un delay razonable para poder analizar las medidas y saber que hacer en caso de necesitarlo
delay(10000);
}