#include <WiFi.h>
#include <HTTPClient.h>
#include <DHTesp.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* apiKey = "Q1F6CB4T59MES1BC";
#define DHT_PIN 15
#define VIB_PIN 34
#define DEF_PIN 35
DHTesp dht;
void setup() {
Serial.begin(115200);
dht.setup(DHT_PIN, DHTesp::DHT22);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado");
}
void loop() {
// Lectura DHT22
TempAndHumidity data = dht.getTempAndHumidity();
float temperatura = data.temperature;
float humedad = data.humidity;
// Lectura sensores simulados
int vibRaw = analogRead(VIB_PIN);
int defRaw = analogRead(DEF_PIN);
float vibracion = map(vibRaw, 0, 4095, 0, 100);
float deformacion = map(defRaw, 0, 4095, 0, 50);
// ==================================================
// FIELD5 - ESTADO ESTRUCTURAL
// 0 = Óptimo
// 1 = Regular
// 2 = Crítico
// ==================================================
int estadoEstructural;
if (vibracion < 30 && deformacion < 15) {
estadoEstructural = 0;
}
else if (vibracion < 70 && deformacion < 35) {
estadoEstructural = 1;
}
else {
estadoEstructural = 2;
}
// ==================================================
// FIELD6 - RIESGO
// 0 = Bajo
// 1 = Medio
// 2 = Alto
// ==================================================
int riesgo;
if (estadoEstructural == 0) {
riesgo = 0;
}
else if (estadoEstructural == 1) {
riesgo = 1;
}
else {
riesgo = 2;
}
// ==================================================
// FIELD7 - TRANSITO
// Vehículos/hora simulados
// ==================================================
int transito = random(20, 121);
// ==================================================
// FIELD8 - NIVEL DE ALERTA
// 0 = Normal
// 1 = Preventiva
// 2 = Advertencia
// 3 = Emergencia
// ==================================================
int alerta;
if (riesgo == 0) {
alerta = 0;
}
else if (riesgo == 1) {
alerta = 1;
}
else {
if (transito > 80) {
alerta = 3;
} else {
alerta = 2;
}
}
// Monitor Serie
Serial.println("===============");
Serial.print("Temperatura: ");
Serial.println(temperatura);
Serial.print("Humedad: ");
Serial.println(humedad);
Serial.print("Vibracion: ");
Serial.println(vibracion);
Serial.print("Deformacion: ");
Serial.println(deformacion);
Serial.print("Estado Estructural: ");
Serial.println(estadoEstructural);
Serial.print("Riesgo: ");
Serial.println(riesgo);
Serial.print("Transito: ");
Serial.println(transito);
Serial.print("Nivel de Alerta: ");
Serial.println(alerta);
// Envío a ThingSpeak
HTTPClient http;
String url =
String("https://api.thingspeak.com/update?api_key=") +
apiKey +
"&field1=" + String(temperatura, 2) +
"&field2=" + String(humedad, 2) +
"&field3=" + String(vibracion, 2) +
"&field4=" + String(deformacion, 2) +
"&field5=" + String(estadoEstructural) +
"&field6=" + String(riesgo) +
"&field7=" + String(transito) +
"&field8=" + String(alerta);
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP: ");
Serial.println(httpCode);
http.end();
delay(20000);
}