#include <WiFi.h>
//------------------Servidor Web en puerto 80---------------------
WiFiServer server(80);
//---------------------Credenciales de WiFi-----------------------
const char* ssid = "Erick";
const char* password = "12345678";
//---------------------VARIABLES GLOBALES-------------------------
int contconexion = 0;
int totalCarros = 0; // Contador para el total de carros que entraron
String header; // Variable para guardar el HTTP request
// Pines para los sensores ultrasónicos
const int trigPin1 = 5; // Pin TRIG del primer sensor
const int echoPin1 = 18; // Pin ECHO del primer sensor
const int trigPin2 = 19; // Pin TRIG del segundo sensor
const int echoPin2 = 21; // Pin ECHO del segundo sensor
// Estados previos de los espacios
bool espacio1Ocupado = false;
bool espacio2Ocupado = false;
//------------------------CODIGO HTML------------------------------
String paginaInicio = "<!DOCTYPE html>"
"<html>"
"<head>"
"<meta charset='utf-8' />"
"<title>Estado del Estacionamiento</title>"
"</head>"
"<body>"
"<center>"
"<h3>Estado del Estacionamiento</h3>";
String paginaFin = "<br><h4>Total de carros que entraron: ";
//---------------------------SETUP--------------------------------
void setup() {
Serial.begin(115200);
Serial.println("");
// Configuración de los pines de los sensores ultrasónicos
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
// Conexión WIFI
WiFi.begin(ssid, password);
// Cuenta hasta 50 si no se puede conectar y cancela
while (WiFi.status() != WL_CONNECTED && contconexion < 50) {
++contconexion;
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) { // Si se conecta correctamente
Serial.println("");
Serial.println("WiFi conectado");
Serial.println(WiFi.localIP());
server.begin(); // iniciamos el servidor
} else {
Serial.println("");
Serial.println("Error de conexión al WiFi");
}
}
//----------------------FUNCIÓN DE LECTURA DEL SENSOR ULTRASÓNICO-----------------------
float leerDistancia(int trigPin, int echoPin) {
// Generar un pulso en el pin TRIG
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Medir el tiempo del pulso en el pin ECHO
long duration = pulseIn(echoPin, HIGH, 30000); // Timeout de 30ms para evitar bloqueos
// Calcular la distancia (duración en microsegundos / 58.2 para cm)
float distance = duration / 58.2;
return distance;
}
//----------------------------LOOP----------------------------------
void loop() {
WiFiClient client = server.available(); // Escucha a los clientes entrantes
if (client) { // Si se conecta un nuevo cliente
Serial.println("New Client.");
String currentLine = ""; //
while (client.connected()) { // Loop mientras el cliente está conectado
if (client.available()) { // Si hay bytes para leer desde el cliente
char c = client.read(); // Lee un byte
Serial.write(c); // Imprime ese byte en el monitor serial
header += c;
if (c == '\n') { // Si el byte es un caracter de salto de linea
// Si la nueva línea está en blanco, significa que es el fin del
// HTTP request del cliente, entonces respondemos:
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// Muestra la página web
float distancia1 = leerDistancia(trigPin1, echoPin1);
float distancia2 = leerDistancia(trigPin2, echoPin2);
String mensaje1, mensaje2;
// Determinar el estado del Espacio1
if (distancia1 > 0 && distancia1 <= 5) {
if (!espacio1Ocupado) {
totalCarros++; // Incrementar contador si el espacio pasa a ocupado
espacio1Ocupado = true; // Actualizar estado a ocupado
}
mensaje1 = "Espacio1: Ocupado";
} else {
espacio1Ocupado = false; // Actualizar estado a disponible
mensaje1 = "Espacio1: Disponible";
}
// Determinar el estado del Espacio2
if (distancia2 > 0 && distancia2 <= 5) {
if (!espacio2Ocupado) {
totalCarros++; // Incrementar contador si el espacio pasa a ocupado
espacio2Ocupado = true; // Actualizar estado a ocupado
}
mensaje2 = "Espacio2: Ocupado";
} else {
espacio2Ocupado = false; // Actualizar estado a disponible
mensaje2 = "Espacio2: Disponible";
}
// Enviar el contenido al cliente
client.println(paginaInicio + mensaje1 + "<br>" + mensaje2 + paginaFin + totalCarros + "</h4></center></body></html>");
// La respuesta HTTP termina con una línea en blanco
client.println();
break;
} else { // Si tenemos una nueva línea, limpiamos currentLine
currentLine = "";
}
} else if (c != '\r') { // Si C es distinto al caracter de retorno de carro
currentLine += c; // Lo agrega al final de currentLine
}
}
}
// Limpiamos la variable header
header = "";
// Cerramos la conexión
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}