#include <WiFi.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
// Configuración del pin al que está conectado el sensor DHT22
const int DHT_PIN = 15;
// Configuración de la red WiFi
const char* WIFI_NAME = "Wokwi-GUEST"; // Nombre de la red WiFi
const char* WIFI_PASSWORD = ""; // Contraseña de la red WiFi
// Configuración de ThingSpeak
const int myChannelNumber = 2659693; // Número de tu canal en ThingSpeak
const char* myApiKey = "3ZJ6DFG3W8RUE6UJ"; // Clave API de escritura en ThingSpeak
const char* server = "api.thingspeak.com"; // Dirección del servidor de ThingSpeak
// Definir el pin del LED (utilizando GPIO2, si no está definido como LED_BUILTIN)
const int LED_PIN = 2; // Pin GPIO2 generalmente utilizado para el LED integrado
// Instancias de las bibliotecas
DHTesp dhtSensor; // Crear una instancia de la biblioteca DHTesp
WiFiClient client; // Crear un objeto cliente WiFi
void setup() {
Serial.begin(115200); // Inicializar la comunicación serial a una velocidad de 115200 baudios
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Inicializar el sensor DHT22 en el pin especificado
pinMode(LED_PIN, OUTPUT); // Configurar el pin del LED como salida
// Conectar a la red WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000); // Esperar 1 segundo
Serial.println("WiFi no conectado"); // Imprimir mensaje si no está conectado
}
Serial.println("¡WiFi conectado!"); // Imprimir mensaje cuando esté conectado al WiFi
Serial.println("IP local: " + String(WiFi.localIP())); // Imprimir la dirección IP local
ThingSpeak.begin(client); // Inicializar la biblioteca ThingSpeak
}
void loop() {
// Leer la temperatura y humedad del sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Enviar los datos a ThingSpeak
ThingSpeak.setField(1, data.temperature); // Establecer el valor del campo 1 como la temperatura
ThingSpeak.setField(2, data.humidity); // Establecer el valor del campo 2 como la humedad
// Enviar los datos a ThingSpeak y obtener el código de estado HTTP
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
// Imprimir los datos leídos
Serial.println("Temp: " + String(data.temperature, 2) + "°C"); // Imprimir la temperatura con 2 decimales
Serial.println("Humedad: " + String(data.humidity, 1) + "%"); // Imprimir la humedad con 1 decimal
// Comprobar si los datos se enviaron correctamente
if (x == 200) {
Serial.println("Datos enviados correctamente"); // Mensaje de éxito
} else {
Serial.println("Error al enviar los datos: " + String(x)); // Mensaje de error con código de estado HTTP
}
// Controlar el LED según las condiciones de temperatura y humedad
if (data.temperature > 35 || data.temperature < 12 || data.humidity > 70 || data.humidity < 40) {
digitalWrite(LED_PIN, HIGH); // Encender el LED si la condición se cumple
} else {
digitalWrite(LED_PIN, LOW); // Apagar el LED si la condición no se cumple
}
Serial.println("---"); // Línea separadora en el monitor serial
delay(10000); // Esperar 10 segundos antes de volver a leer los datos
}