/*
Pines del sensor:
+: Pin de alimentación -> 3V3 (3.3V)
-: Conexion a tierra -> GND
D: Pin de salida -> D4 (GPIO4)
*/
#include <WiFi.h>
#include <HTTPClient.h>
/*
const char* ssid = "TU WIFI"; // Nombre de la Wi-Fi
const char* password = "TU CONTRA"; // Contraseña de la red Wi-Fi
*/
const char* server = "api.thingspeak.com";
const String apiKey = "9BZTS5Z5MITILNPF"; // clave API de ThingSpeak
const int dataField = 1; // Número de campo para enviar la señal
const int PIN_SENSOR = 4;
void setup() {
// Inicializa la comunicación serial para ver los resultados en el monitor serie
Serial.begin(115200);
delay(10);
// Conexion a la red WIFI
WiFi.begin("Wokwi-GUEST", "", 6); //Wokwi es una red proporcionada por el simulador
Serial.print("Conectándose a la red Wi-Fi...");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(".");
Serial.println("Conexión exitosa");
Serial.println("----------------");
// Inicialización de pines
pinMode(PIN_SENSOR, INPUT);
}
void loop() {
// Leer estado del sensor
int estadoSensor = digitalRead(PIN_SENSOR);
// Verificar estado del sensor
if (estadoSensor == HIGH) {
Serial.println("Se ha detectado movimiento");
// Enviar datos a ThingSpeak
sendToThingSpeak(1); // Envía un 1 al campo en ThingSpeak
} else {
Serial.println("Sin movimiento");
// Enviar datos a ThingSpeak
sendToThingSpeak(0); // Envía un 0 al campo en ThingSpeak
}
delay(100);
}
void sendToThingSpeak(int data) {
//Crea una instancia del cliente http para realizar solicitudes web
HTTPClient http;
//Inicio de la url de la solicitud
String url = "http://";
//Agrega el nombre del servidor
url += server;
//Agrega la ruta para actualizar el canal
url += "/update?api_key=";
//Agrega la clave API del canal de ThingSpeak
url += apiKey;
//Agrega el numero de campo al canal (Field)
url += "&field" + String(dataField);
//Agrega los datos a enviar
url += "=" + String(data);
Serial.print("Enviando datos a ThingSpeak: ");
Serial.println(data);
//Inicia la solicitud HTTP GET usando la url
http.begin(url);
//Realiza la solicitud GET y almacena la respuesta
int httpCode = http.GET();
//Comprueba si la respuesta es exitosa (200)
if (httpCode == 200) {
Serial.println("Datos enviados exitosamente");
Serial.println("---------------------------");
} else {
Serial.println("Error al enviar datos");
Serial.println("---------------------------");
}
//Finaliza la solicitud HTTP y libera recursos
http.end();
}