/*
Sistema de supervisión de temperatura y humedad IoT enlazado a ThingSpeak
ESP32-DevKitC V4 + sensor DHT22 — simulación en Wokwi
Comunicación: API RESTful (peticiones HTTP con clave de escritura)
Autor: Sergio Melo
*/
#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASS = "";
const char* WRITE_API_KEY = "XKQV5TMJ5GUYBLOU";
const char* SERVIDOR = "http://api.thingspeak.com/update";
const unsigned long INTERVALO = 20000;
unsigned long ultimoEnvio = 0;
void conectarWiFi() {
Serial.print("Conectando a Wi-Fi");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS, 6);
while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
Serial.print("\nWi-Fi conectado. IP: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("\n=== Supervision de temperatura y humedad IoT (REST) ===");
dht.begin();
conectarWiFi();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) conectarWiFi();
if (millis() - ultimoEnvio < INTERVALO && ultimoEnvio != 0) return;
ultimoEnvio = millis();
float humedad = dht.readHumidity();
float temperatura = dht.readTemperature();
if (isnan(humedad) || isnan(temperatura)) {
Serial.println("Error: lectura invalida del DHT22.");
return;
}
float sensacion = dht.computeHeatIndex(temperatura, humedad, false);
String url = String(SERVIDOR) + "?api_key=" + WRITE_API_KEY +
"&field1=" + String(temperatura, 2) +
"&field2=" + String(humedad, 2) +
"&field3=" + String(sensacion, 2);
HTTPClient http;
http.begin(url);
int codigo = http.GET();
if (codigo > 0) {
String respuesta = http.getString();
Serial.printf("HTTP %d | Entrada creada: %s | T=%.2f C H=%.2f %% ST=%.2f C\n",
codigo, respuesta.c_str(), temperatura, humedad, sensacion);
} else {
Serial.printf("Error en la peticion: %s\n", http.errorToString(codigo).c_str());
}
http.end();
}