#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <ESP32Servo.h>
#define DHTPIN1 15
#define DHTPIN2 4
#define PIRPIN1 14
#define PIRPIN2 5
#define LED1 12
#define LED2 13
#define BUZZER 27
#define DOOR_SERVO_PIN 18
#define WINDOW_SERVO_PIN 19
#define DHTTYPE DHT22
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
Servo doorServo;
Servo windowServo;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* serverUrl = "http://tu-api-rest.com/api";
bool motionDetected1 = false;
bool motionDetected2 = false;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
Serial.println("Conectado a WiFi");
dht1.begin();
dht2.begin();
pinMode(PIRPIN1, INPUT);
pinMode(PIRPIN2, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BUZZER, OUTPUT);
doorServo.attach(DOOR_SERVO_PIN);
windowServo.attach(WINDOW_SERVO_PIN);
doorServo.write(0);
windowServo.write(0);
}
void loop() {
checkMotion();
controlDevices();
sendDataToApi();
delay(2000);
}
void checkMotion() {
motionDetected1 = digitalRead(PIRPIN1);
motionDetected2 = digitalRead(PIRPIN2);
if (motionDetected1 || motionDetected2) {
digitalWrite(BUZZER, HIGH);
Serial.println("Movimiento detectado");
} else {
digitalWrite(BUZZER, LOW);
}
}
void controlDevices() {
float temp1 = dht1.readTemperature();
float hum1 = dht1.readHumidity();
float temp2 = dht2.readTemperature();
float hum2 = dht2.readHumidity();
Serial.print("Cuarto 1 - Temp: ");
Serial.print(temp1);
Serial.print("C, Hum: ");
Serial.print(hum1);
Serial.println("%");
Serial.print("Cuarto 2 - Temp: ");
Serial.print(temp2);
Serial.print("C, Hum: ");
Serial.print(hum2);
Serial.println("%");
if (motionDetected1) {
digitalWrite(LED1, HIGH);
doorServo.write(90);
} else {
digitalWrite(LED1, LOW);
doorServo.write(0);
}
if (motionDetected2) {
digitalWrite(LED2, HIGH);
windowServo.write(90);
} else {
digitalWrite(LED2, LOW);
windowServo.write(0);
}
}
void sendDataToApi() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String apiUrl = String(serverUrl) + "/sensor-data";
String payload = "{\"room1\":{\"temp\":" + String(dht1.readTemperature()) +
",\"hum\":" + String(dht1.readHumidity()) +
",\"motion\":" + String(motionDetected1) +
"},\"room2\":{\"temp\":" + String(dht2.readTemperature()) +
",\"hum\":" + String(dht2.readHumidity()) +
",\"motion\":" + String(motionDetected2) + "}}";
http.begin(apiUrl);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(payload);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("Datos enviados: " + response);
} else {
Serial.println("Error al enviar datos: " + String(httpResponseCode));
}
http.end();
}
}