//SE DEFINE LAS LIBRERIAS A USAR
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include <stdio.h>
//SE DEFINE LOS PINES DIGITALES QUE SE USARA
#define Trigger D1 //Pin digital 2 para el Trigger del sensor
#define Echo D3 //Pin digital 3 para el Echo del sensor
#define LED D4
#define BUZZER D5
#define LEDCASA D6
//PARAMETROS WIFI
const char* ssid = "WiFi ID";
const char* pass = "contraseña";
const char* host = "35.245.196.73"; //Direccion del servidor
int id_ant=0;
//SE EJECUTA SOLO UNA VEZ LO QUE ESTA DENTRO DEL VOID SETUP
void setup() {
Serial.begin(115200);
//SE DEFINE COMO ENTRADA O SALIDA
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
//pinMode(D4, OUTPUT);
pinMode(D6, OUTPUT);
//SE INICIALIZA EN CIERTO ESTADO
digitalWrite(Trigger, LOW); //Inicializamos el pin con 0
digitalWrite(D4, HIGH); //Se define el led como HIGH al principio porque tiene lógica invertida
//SE IMPRIME EN EL MONITOR LA INICIALIZACION DE LA CONEXION
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass); //Se hace la conexion WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); }
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
void loop() {
//SE DEFINE LAS VARIABLES PARA LA MEDICION DE TIEMPO Y DISTANCIA
float t; //tiempo que demora en llegar el eco
float d; //distancia en centimetros
//SE INICIALIZA LA MEDICION DEL ULTRASONICO
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
d = t/59; //escalamos el tiempo a una distancia en cm
// PROCESO PARA ENVIAR UN VALOR Y GUARDAR EN FORMATO JSON AL SERVIDOR -
CODIFICACION
StaticJsonBuffer<300> JSONbuffer;
JsonObject& JSONencoder = JSONbuffer.createObject();
JSONencoder["distance"] = d;
char JSONmessageBuffer[300];
JSONencoder.prettyPrintTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
//Serial.println(JSONmessageBuffer);
if (WiFi.status() == WL_CONNECTED) {
// SE RECOPILARA EL VALOR DEL SERVIDOR
HTTPClient http1; //Se crea el objeto http1 para recibir la informacion
http1.begin("http://35.245.196.73/order");
int httpCode1 = http1.GET();
// SE ENVIARA LA DATA AL SERVIDOR
HTTPClient http2; //Se crea el objeto htt2 para enviar la informacion
http2.begin("http://35.245.196.73/api/sensor/ultrasonic"); //Specify request destination
http2.addHeader("Content-Type", "application/json"); //Specify content-type header
int httpCode2 = http2.POST(JSONmessageBuffer); //Send the request
String payload = http2.getString();
// SE REVISA QUE DEVUELVE EL SERVIDOR
if (httpCode1 > 0 && httpCode2>0) {
// PROCESO PARA RECIBIR UN VALOR JSON Y GUARDARLO EN UNA VARIABLE -
DECODIFICACION
const size_t bufferSize = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 8;
DynamicJsonBuffer jsonBuffer(bufferSize);
JsonObject& root = jsonBuffer.parseObject(http1.getString());
int id = root["value"];
Serial.print("Distancia: ");
Serial.print(d);
Serial.print("cm");
Serial.println(" ");
// LA DECISION QUE SE TOMARA LUEGO DE RECIBIR EL VALOR Y GUARDARLO EN UNA
VARIABLE
if (id) {
if(id==1 && id_ant==0)
{Serial.println("SENSOR ACTIVADO");}
id_ant=1;
if(d<60)
{//digitalWrite(D4, LOW);
digitalWrite(D6, HIGH);
delay(900);
Serial.println("MANTENER SU DISTANCIA POR FAVOR");
tone(D5,1000);}
else
{ noTone(D5);
//digitalWrite(D4, HIGH);
digitalWrite(D6, LOW);}
else if(id==0) {
if(id==0 && id_ant==1)
{Serial.println("SENSOR DESACTIVADO");
id_ant=0;
digitalWrite(D6, LOW);
noTone(D5);}
else{
Serial.println("No olvide activar el sensor cuando este dentro de su vivienda.");
digitalWrite(D6, LOW);
noTone(D5);
}
else {
Serial.println("Hubo un errror :( ");}
http1.end();
http2.end();
delay(500);