// código para Enviar datos de movimiento de un sensor PIR a un LED y a un servidor Iot
// Desarrollado por RMT
#include <WiFi.h>
#include <ThingSpeak.h>
// Definir constantes para los pines
const int ledPin = 12; // Pin del LED
const int inputPin = 23; // Pin del sensor PIR
// Configuración de la red WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
WiFiClient client;
// Configuración de ThingSpeak
unsigned long myChannelNumber = 2269659;
const char *myWriteAPIKey = "OGIMIOAEL4WYHMVL";
int val = 0; // Variable para leer el estado del sensor
int StatusCode; // Variable para leer el estado de la escritura en ThingSpeak
void setup() {
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
// Configuración de pines
pinMode(ledPin, OUTPUT); // Configurar el LED como salida
pinMode(inputPin, INPUT); // Configurar el sensor como entrada
Serial.begin(9600);
// Conectar a la red WiFi
connectToCloud();
}
// Función para conectar a la red WiFi
void connectToCloud() {
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Intentando conectar");
// Intentar conectarse a la red WiFi hasta que tenga éxito o se alcance el límite
int intentos = 0;
while (WiFi.status() != WL_CONNECTED && intentos < 5) {
WiFi.begin(ssid, pass);
for (int i = 0; i < 5; i++) {
Serial.print(".");
delay(1000);
}
intentos++;
}
// Verificar la conexión
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConectado a la red WiFi.");
} else {
Serial.println("\nFallo al conectar a la red WiFi. Revise las credenciales.");
}
}
}
void loop() {
val = digitalRead(inputPin); // Leer el valor de entrada del sensor
if (val == HIGH) { // Verificar si el sensor detecta movimiento
digitalWrite(ledPin, HIGH); // Encender el LED
Serial.println("Movimiento detectado!");
// Enviar el estado del sensor como un campo a ThingSpeak
ThingSpeak.setField(3, val);
// Intentar escribir en ThingSpeak y verificar el estado
StatusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (StatusCode == 200) {
Serial.println("Actualización exitosa del canal en ThingSpeak.");
} else {
Serial.println("Problema al escribir datos. Código de error HTTP: " + String(StatusCode));
}
delay(15500); // Esperar un tiempo antes de enviar el siguiente campo
// Enviar un valor de 0 para indicar el final del movimiento
ThingSpeak.setField(3, 0);
StatusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (StatusCode == 200) {
Serial.println("Actualización exitosa del canal en ThingSpeak.");
} else {
Serial.println("Problema al escribir datos. Código de error HTTP: " + String(StatusCode));
}
}
digitalWrite(ledPin, LOW); // Apagar el LED
Serial.println("Sin movimiento");
delay(1000); // Esperar un tiempo antes de realizar la siguiente lectura
}