#include <AsyncTaskLib.h>
#include <HTTPClient.h>
#include <UrlEncode.h>
#include <ThingSpeak.h>
#include <WiFi.h>
const int LDR_PIN = 34;
const int PIR_PIN = 15;
int Lamparas_LDR_PIN = 14;
int Lampara_PIR_PIN = 2;
int tiempo_espera = 5000;
int LECTURA_PIR = 0;
int LECTURA_LDR = 0;
const int ChannelID = 2319418;
const char* writeAPIKey = "5R5DDKEMQS64HY0A";
const char* readAPIKey = "GB3XUE1S6CEX2BNN";
const char* server = "api.thingspeak.com";
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient clientewifi;
String celular = "5493515942504"; // Reemplaza con tu número de celular
String apiKey = "9778202"; // Reemplaza con tu API Key
unsigned long intervaloEnvio = 0.5 * 60 * 1000; // por minutos
unsigned long ultima_activacion_pir = 0; // Variable para almacenar la última activación del sensor PIR
// Tareas asíncronas
AsyncTask asyncLDR(tiempo_espera, []() {
digitalWrite(Lamparas_LDR_PIN, LOW);
});
AsyncTask asyncPIR(tiempo_espera, []() {
digitalWrite(Lampara_PIR_PIN, LOW);
});
void enviar_msj(String mensaje) {
String URL = "https://api.callmebot.com/whatsapp.php?phone=" + celular + "&text=" + urlEncode(mensaje) + "&apikey=" + apiKey;
HTTPClient http;
http.begin(URL);
http.addHeader("Content-type", "application/x-www-form-urlencoded");
int respuesta = http.POST(URL);
Serial.println("La respuesta a peticion POST es: " + String(respuesta ) + "!!!");
http.end();
}
void setup() {
pinMode(LDR_PIN, INPUT);
pinMode(Lampara_PIR_PIN, OUTPUT);
pinMode(Lamparas_LDR_PIN, OUTPUT);
Serial.begin(9600);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a la red Wi-Fi...");
}
Serial.println("Conectado a la red Wi-Fi.");
ThingSpeak.begin(clientewifi);
}
void loop() {
LECTURA_PIR = digitalRead(PIR_PIN);
LECTURA_LDR = analogRead(LDR_PIN);
if (LECTURA_LDR <= 600 && !asyncLDR.IsActive()) {
digitalWrite(Lamparas_LDR_PIN, HIGH);
asyncLDR.Start();
}
Serial.println("Estado de LDR: " + String(asyncLDR.IsActive()));
asyncLDR.Update();
if (LECTURA_PIR == HIGH) {
digitalWrite(Lampara_PIR_PIN, HIGH);
ultima_activacion_pir = millis();
if (millis() - ultima_activacion_pir < tiempo_espera) {
enviar_msj("ALERTA!!! INTRUSO EN LA CASA");
}
asyncPIR.Start();
}
Serial.println("Estado de PIR: " + String(asyncPIR.IsActive()));
asyncPIR.Update();
ThingSpeak.setField(1, LECTURA_LDR);
ThingSpeak.setField(2, LECTURA_PIR);
int x = ThingSpeak.writeFields(ChannelID, writeAPIKey);
Serial.print("Dato de LDR enviado a ThingSpeak: ");
Serial.println(LECTURA_LDR);
Serial.print("Dato de PIR enviado a ThingSpeak: ");
Serial.println(LECTURA_PIR);
if (x == 200) {
Serial.println("Datos enviados con éxito a ThingSpeak.");
} else {
Serial.println("Error al enviar datos a ThingSpeak. Código de error: " + String(x));
}
delay(intervaloEnvio);
}