Este es un proyecto realizado en la formación de Saregune «Programación en lenguajes estructurados, sistemas embebidos con Arduino y Javascript Avanzado». Se llama «Safe Zone» y es un sistema de seguridad que detecta movimiento y envía una señal a cualquier otra parte de la red a través de la WIFI.
Material
- 2 placas WeMos D1 Mini ESP8266
- 1 sensor PIR
- 1 buzzer
- 2 protoboard
El circuito
Vídeo explicativo
Código
Aquí tenéis todo el código C++ disponible, un fichero se carga en la placa del sensor PIR (maestra) y el otro en la que emite el sonido (esclava)
Placa Maestra
#include <ESP8266WiFi.h> const char* ssid = ""; const char* password = ""; //ip de la placa esclava const char* host = "192.168.0.xxx"; //pin del sensor PIR const int pir_pin= D1; void setup() { pinMode(pir_pin, INPUT); Serial.begin(115200); delay(1000); //conexion a la WiFI saregune WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi conectado"); Serial.println("Dirección IP: "); Serial.println(WiFi.localIP()); } void loop() { //guardo 0 o 1 que me devuelve el sensor PIR int movimiento = digitalRead(pir_pin); Serial.print("Valor de la variable movimiento: "); Serial.println(movimiento); //La clase "WiFiClient" es parte de la biblioteca "ESP8266WiFi.h" y creo el objeto client WiFiClient client; //conecto a la placa esclava por el puerto 80 if (client.connect(host, 80)) { //creo una solicitud GET que se enviará a la placa esclavaincluirá el valor de la variable "movimiento" como parámetro en la URL. Al convertir la variable //a un objeto "String", se puede concatenar fácilmente al resto de la URL utilizando el operador "+" en lugar de tener que utilizar funciones de //conversión de tipos. client.print(String("GET /movimiento?valor=") + String(movimiento) + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(100); // liberar el socket y permitir que otros clientes se conecten. client.stop(); } else { Serial.println("Error al conectar con la placa esclava"); } delay(1000); }
Placa esclava
#include <ESP8266WiFi.h> const char* ssid = ""; const char* password = ""; //crea un objeto "WiFiServer" para escuchar en el puerto 80 WiFiServer server(80); //pin digital del buzzer int buzzer = D2; void setup() { pinMode(buzzer, OUTPUT); Serial.begin(115200); //conexion a la WIFI WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi conectado"); Serial.println("Dirección IP: "); Serial.println(WiFi.localIP()); server.begin(); Serial.println("Servidor web iniciado"); } void loop() { //Cuando se llama a "server.available()", el servidor verifica si hay una conexión entrante en el puerto especificado, el 80 WiFiClient client = server.available(); //si la hay if (client) { Serial.println("Cliente conectado"); while (client.connected()) { //si hay datos para leer if (client.available()) { // Si hay datos disponibles, se leen los datos y se almacenan en una variable "request" como una cadena de caracteres. //lee caracteres del cliente hasta encontrar un carácter de retorno de carro "\r" y devuelve la cadena que se ha leído hasta ese punto. String request = client.readStringUntil('\r'); Serial.println(request); int valor = 0; delay(1000); //comprueba si contiene la cadena "/movimiento?valor=1". Si la cadena se encuentra, se establece el valor de la variable "valor" en 1. if (request.indexOf("/movimiento?valor=1") != -1) { Serial.println("Entra en el if"); valor = 1; digitalWrite(buzzer, valor); delay(5000); digitalWrite(buzzer, 0); } } } } }
A continuación tenéis los links de los demás proyectos:
Un pensamiento en “Proyecto con WEMOS D1mini ESP8266 «Safe Zone»”