#include #include #include #include #include #include #include const int PIN_DHT = 4; const int PIN_SDA = 21; const int PIN_SCL = 22; const int PIN_RELE = 26; const float UMBRAL_TEMPERATURA = 28.0; const char* URL_TELEMETRIA = "https://unicarlos.es/MODULOS/DPIOT/api/telemetria.php"; const unsigned long INTERVALO_ENVIO_MS = 15000; DHTesp sensorDht; U8G2_SSD1306_128X64_NONAME_F_HW_I2C pantalla(U8G2_R0, U8X8_PIN_NONE); unsigned long ultimaMarca = 0; void conectarWifi() { WiFiManager gestorWifi; gestorWifi.setConfigPortalTimeout(180); if (!gestorWifi.autoConnect("DPIOT-ESP32")) { delay(2000); ESP.restart(); } } void mostrarEnPantalla(float temperatura, float humedad, int rssi) { pantalla.clearBuffer(); pantalla.setFont(u8g2_font_6x12_tr); pantalla.drawStr(0, 12, "DPIOT estacion"); pantalla.setCursor(0, 30); pantalla.print("T: "); pantalla.print(temperatura, 1); pantalla.print(" C"); pantalla.setCursor(0, 46); pantalla.print("H: "); pantalla.print(humedad, 1); pantalla.print(" %"); pantalla.setCursor(0, 62); pantalla.print("RSSI: "); pantalla.print(rssi); pantalla.sendBuffer(); } void enviarTelemetria(float temperatura, float humedad, int rssi) { if (WiFi.status() != WL_CONNECTED) { return; } JsonDocument documento; documento["dispositivo"] = "esp32-aula-01"; documento["temperatura"] = temperatura; documento["humedad"] = humedad; documento["rssi"] = rssi; String cuerpo; serializeJson(documento, cuerpo); HTTPClient clienteHttp; clienteHttp.begin(URL_TELEMETRIA); clienteHttp.addHeader("Content-Type", "application/json"); clienteHttp.POST(cuerpo); clienteHttp.end(); } void setup() { Serial.begin(115200); pinMode(PIN_RELE, OUTPUT); sensorDht.setup(PIN_DHT, DHTesp::DHT22); Wire.begin(PIN_SDA, PIN_SCL); pantalla.begin(); conectarWifi(); } void loop() { TempAndHumidity datos = sensorDht.getTempAndHumidity(); int rssi = WiFi.RSSI(); digitalWrite(PIN_RELE, datos.temperature >= UMBRAL_TEMPERATURA ? HIGH : LOW); mostrarEnPantalla(datos.temperature, datos.humidity, rssi); if (millis() - ultimaMarca >= INTERVALO_ENVIO_MS) { ultimaMarca = millis(); enviarTelemetria(datos.temperature, datos.humidity, rssi); Serial.println("Lectura enviada"); } delay(500); }