Este proyecto implementa un sistema IoT utilizando dos módulos ESP32 comunicados de forma inalámbrica mediante sockets TCP y un servidor central en Python.
El sistema está compuesto por:
- Un ESP32 con sensor ultrasónico que mide distancia y envía los datos al servidor.
- Un ESP32 con LEDs que actúa como sistema de respuesta (actuador).
- Un servidor TCP en Python que recibe los datos del sensor, los procesa y envía comandos al actuador.
-
El sistema debe permitir que múltiples clientes (2 clientes: un sensor y un actuador) se conecten al servidor mediante comunicación TCP.
-
El sistema debe permitir que los clientes se identifiquen como:
"SENSOR"y"ACTUADOR". -
El sistema debe recibir datos enviados por el ESP32 sensor en el formato:
DIST:<valor>. -
El servidor debe procesar los datos de distancia recibidos y determinar una acción según la lógica definida.
-
El sistema debe enviar comandos al ESP32 actuador según la lógica:
DANGER → distancia < 10 RED → 10 ≤ distancia < 20 YELLOW → 20 ≤ distancia < 50 GREEN → 50 ≤ distancia < 80 -
El ESP32 actuador debe recibir los comandos y activar la combinación de LEDs correspondiente.
- El sistema debe procesar y responder a los datos del sensor en tiempo cercano a tiempo real (≈2 segundos debido al intervalo de envío del sensor)
- El sistema debe ser fácil de probar mediante herramientas como scripts en Python.
-
ESP32 → se conecta al servidor (TCP)
-
ESP32 → envía identificación "SENSOR" o "ACTUADOR"
-
Sensor → envía datos "DIST:30"
-
Servidor:
- recibe datos
- procesa lógica
-
Servidor → envía comando "YELLOW"
-
Actuador → enciende LED correspondiente
| Tipo de Mensaje | Emisor | Formato | Ejemplo | Descripción |
|---|---|---|---|---|
| Identificación | ESP32 | "SENSOR" |
SENSOR | Registro como sensor |
| Identificación | ESP32 | "ACTUADOR" |
ACTUADOR | Registro como actuador |
| Datos | Sensor | DIST:<valor> |
DIST:30 | Envío de distancia |
| Respuesta | Servidor | "DANGER" |
DANGER | Estado crítico |
| Respuesta | Servidor | "RED" |
RED | Distancia corta |
| Respuesta | Servidor | "YELLOW" |
YELLOW | Distancia media |
| Respuesta | Servidor | "GREEN" |
GREEN | Distancia segura |
| Distancia (cm) | Estado | Acción (LEDs) |
|---|---|---|
| < 10 | Estado crítico | Parpadeo (todos ON/OFF) |
| 10 – 19 | Distancia corta | Activación combinada |
| 20 – 49 | Distancia media | Activación combinada |
| 50 – 79 | Distancia segura | Activación combinada |
- Diagrama de Componentes
- Diagrama de Clases (Servidor Python)
- Diagrama de Secuencia
- Diagrama de Flujo del Sistema
- Diagrama de Estados (Actuador)
- Diagrama de Estados (Sensor)
- El ESP32 sensor captura la distancia.
- Envía la información al servidor (TCP) mediante WiFi.
- El servidor procesa los datos y determina una acción.
- El ESP32 actuador recibe el comando y enciende el LED correspondiente.
- ESP32 (Framework Arduino - PlatformIO)
- Python (Sockets TCP)
- Comunicación WiFi
esp32_sensor/→ Código del ESP32 con sensor ultrasónicoesp32_actuador/→ Código del ESP32 con LEDsserver_python/→ Servidor TCP en Python
El plan de pruebas cubre:
- Conexión de clientes (ESP32 y simuladores) al servidor
- Envío de datos desde el sensor
- Procesamiento lógico en el servidor
- Recepción y ejecución de comandos en el actuador
- Manejo de errores y desconexiones
| Componente | Descripción |
|---|---|
| ESP32 Sensor | Envía datos de distancia |
| ESP32 Actuador | Recibe comandos y activa LEDs |
| Servidor Python | Procesa datos y coordina acciones |
| Scripts de prueba | Simulan sensor o actuador |
- Entrada: "SENSOR"
- Resultado esperado: El servidor registra el sensor correctamente
- Entrada: "ACTUADOR"
- Resultado esperado: El servidor registra el actuador correctamente
| Entrada | Resultado esperado |
|---|---|
| DIST:10 | RED |
| DIST:30 | YELLOW |
| DIST:60 | GREEN |
- Sensor envía datos
- Servidor procesa
- Actuador recibe comando
Resultado esperado: Flujo completo sin errores
- Entrada: "SENSOR\nDIST:10"
- Resultado esperado: Ambos mensajes procesados correctamente
- Cliente se desconecta
- Resultado esperado: El servidor detecta la desconexión y cierra la conexión
- Entrada: "DIST:abc"
- Resultado esperado: El sistema genera una excepción (no controlada)
Se utilizaron tres tipos de pruebas:
Uso de scripts Python:
test_sensor.pytest_actuador.py
- ESP32 real + script Python
- ESP32 sensor + ESP32 actuador
- Comunicación TCP estable
- Procesamiento correcto de datos válidos
- Respuesta adecuada del actuador
- Procesamiento correcto de mensajes concatenados
- Comunicación TCP funcional.
- Manejo concurrente de clientes mediante hilos.
- Procesamiento correcto de datos válidos.
- Respuestas correctas según distancia.
- Sistema funcional en pruebas reales.
- TCP garantiza comunicación confiable.
- Arquitectura cliente-servidor simplifica el sistema.
- Separación de responsabilidades mejora mantenimiento.
- Uso de hilos permite concurrencia básica.
- Sistema cumple requisitos funcionales y no funcionales.
- Usar JSON o MQTT.
- Implementar logs.
- Migrar a
asyncio. - Añadir autenticación.
- Integrar base de datos.
- Crear dashboard web.
ESP32 Sensor → Servidor TCP → ESP32 Actuador | | | |---- "SENSOR" --------->| | | | | |---- "DIST:30" -------->| | | |---- "YELLOW" --------->| | | |
SENSOR ACTUADOR
DIST:10 DIST:30 DIST:60
RED YELLOW GREEN
- Protocolo orientado a conexión
- Puede concatenar mensajes
- Requiere procesamiento manual del buffer
{
"type": "sensor",
"distance": 30
}{
"action": "YELLOW"
}


.png)
.png)
.png)
.png)
.png)