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»”