#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
// Configuración del DHT22
#define DHTPIN 4 // Pin del ESP32 donde está conectado el DHT22
#define DHTTYPE DHT22 // Tipo de sensor
DHT dht(DHTPIN, DHTTYPE);
// Configuración de los LEDs
#define LED_VERDE 18
#define LED_AMARILLO 19
#define LED_ROJO 21
// Credenciales WiFi
const char* ssid = "Wokwi-GUEST"; // Reemplaza con tu red WiFi
const char* password = "";
// Configuración de InfluxDB
const char* serverName = "https://us-east-1-1.aws.cloud2.influxdata.com";
const char* token = "Cw4dlPVoK-swIgglK75KWdrX2SQ0fwZwlPSznYcOXn-M0xigERXZA7FqG5BIuLMJirMbfWoBFYSjwfQdfscj8A=="; // Token de autenticación
void setup() {
Serial.begin(115200);
dht.begin();
// Configurar pines de LEDs como salida
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
// Conectar a WiFi
WiFi.begin(ssid, password);
Serial.print("Conectando a WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConectado a WiFi!");
}
void loop() {
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
if ((temperatura) || (humedad)) {
Serial.println("Error al leer el sensor DHT22");
return;
}
Serial.print("Temperatura: "); Serial.print(temperatura); Serial.print("°C ");
Serial.print("Humedad: "); Serial.print(humedad); Serial.println("%");
// Control del semáforo
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, LOW);
if (temperatura < 4 || temperatura > 10 || humedad < 65 || humedad > 80) {
digitalWrite(LED_ROJO, HIGH); // Alerta crítica
} else if ((temperatura >= 4 && temperatura < 6) || (temperatura > 8 && temperatura <= 10) ||
(humedad >= 65 && humedad < 68) || (humedad > 78 && humedad <= 80)) {
digitalWrite(LED_AMARILLO, HIGH); // Advertencia
} else {
digitalWrite(LED_VERDE, HIGH); // Condiciones óptimas
}
// Envío de datos a InfluxDB
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverName);
http.addHeader("Authorization", String("Token ") + token);
http.addHeader("Content-Type", "text/plain");
// Formato de la línea en InfluxDB
String payload = "monitoreo,ubicacion=almacen temperatura=" + String(temperatura) + ",humedad=" + String(humedad);
int httpResponseCode = http.POST(payload);
Serial.print("Respuesta InfluxDB: ");
Serial.println(httpResponseCode);
http.end();
} else {
Serial.println("Error: No conectado a WiFi");
}
delay(10000); // Capturar datos cada 10 segundos
}