#include <WiFi.h> // Importa la librería WiFi para gestionar la conexión del ESP32 a una red WiFi.
#include "DHTesp.h" // Importa la librería DHTesp para interactuar con el sensor de temperatura y humedad DHT22.
#include "ThingSpeak.h" // Importa la librería ThingSpeak para enviar datos al servidor ThingSpeak.
const int DHT_PIN = 15; // Define el pin GPIO 15 del ESP32 para conectar el sensor DHT22.
const int LED_PIN = 13; // Define el pin GPIO 13 del ESP32 para conectar el LED.
const char* WIFI_NAME = "Wokwi-GUEST"; // Nombre de la red WiFi a la que el ESP32 se conectará (SSID).
const char* WIFI_PASSWORD = ""; // Contraseña de la red WiFi (en este caso está vacía porque es una red abierta).
const int myChannelNumber = 2659703; // Número de canal de ThingSpeak donde se publicarán los datos.
const char* myApiKey = "N6CHVE7GD86S9LGT"; // Clave API para autenticarse con ThingSpeak y enviar datos.
const char* server = "api.thingspeak.com"; // URL del servidor de ThingSpeak donde se enviarán los datos.
DHTesp dhtSensor; // Declara un objeto `dhtSensor` de tipo DHTesp para interactuar con el sensor DHT22.
WiFiClient client; // Declara un objeto `client` de tipo WiFiClient para gestionar la conexión a Internet.
void setup() {
Serial.begin(115200); // Inicializa la comunicación serie a 115200 baudios, para mostrar mensajes en el monitor serie.
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Configura el sensor DHT22 indicando el pin al que está conectado.
pinMode(LED_PIN, OUTPUT); // Configura el pin 13 como salida para controlar el LED.
// Conexión a la red WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); // Inicia la conexión WiFi usando el SSID y la contraseña especificados.
while (WiFi.status() != WL_CONNECTED) { // Mientras no esté conectado a la red WiFi...
delay(1000); // Espera 1 segundo.
Serial.println("Wifi not connected"); // Imprime un mensaje en el monitor serie indicando que no está conectado.
}
Serial.println("Wifi connected !"); // Imprime un mensaje indicando que la conexión WiFi fue exitosa.
Serial.println("Local IP: " + String(WiFi.localIP())); // Muestra la dirección IP local asignada al ESP32.
WiFi.mode(WIFI_STA); // Configura el ESP32 en modo cliente (estación) para conectarse a la red WiFi.
ThingSpeak.begin(client); // Inicializa la comunicación con ThingSpeak usando el objeto WiFiClient.
}
void loop() {
// Lee los valores de temperatura y humedad del sensor DHT22.
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Configura los campos de ThingSpeak con los valores obtenidos del sensor.
ThingSpeak.setField(1, data.temperature); // Asigna el valor de la temperatura al campo 1 de ThingSpeak.
ThingSpeak.setField(2, data.humidity); // Asigna el valor de la humedad al campo 2 de ThingSpeak.
// Control del LED: Si los valores de temperatura o humedad están fuera de los rangos especificados, enciende el LED.
if (data.temperature > 35 || data.temperature < 12 || data.humidity > 70 || data.humidity < 40) {
digitalWrite(LED_PIN, HIGH); // Enciende el LED si la temperatura o la humedad están fuera de rango.
} else {
digitalWrite(LED_PIN, LOW); // Apaga el LED si la temperatura y la humedad están dentro de los rangos establecidos.
}
// Envía los datos de temperatura y humedad a ThingSpeak.
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
// Muestra los valores de temperatura y humedad en el monitor serie.
Serial.println("Temp: " + String(data.temperature, 2) + "°C"); // Imprime la temperatura con 2 decimales.
Serial.println("Humidity: " + String(data.humidity, 1) + "%"); // Imprime la humedad con 1 decimal.
// Verifica si el envío de datos a ThingSpeak fue exitoso.
if (x == 200) {
Serial.println("Data pushed successfully"); // Si el código de respuesta es 200, indica que los datos fueron enviados correctamente.
} else {
Serial.println("Push error: " + String(x)); // Si no es 200, imprime un mensaje de error con el código recibido.
}
Serial.println("---"); // Imprime un separador para organizar las lecturas en el monitor serie.
delay(20000); // Espera 20 segundos antes de realizar la siguiente lectura del sensor.
}