Este proyecto es una aplicación web que permite controlar un plotter 2D, similar al robot Line-us. El sistema permite que un usuario dibuje en un canva dentro de una aplicación web, y este dibujo se replique en tiempo real utilizando un dispositivo físico (plotter) controlado por un ESP32. El flujo de trabajo es el siguiente:
- El usuario dibuja en el canva de la aplicación web.
- La interfaz web envía las coordenadas del dibujo a un servidor backend a través de una API REST.
- El backend procesa los datos y los envía al plotter utilizando un protocolo IoT.
- El ESP32, que ejecuta un sistema operativo en tiempo real (RTOS), transforma las coordenadas en movimientos físicos del plotter, replicando el dibujo.
El proyecto utiliza un monorepo para gestionar los diferentes componentes. Las siguientes carpetas están presentes en el repositorio:
- frontend/: Contiene la aplicación web (HTML, CSS, JS) que se comunica con el backend.
- backend/: Contiene la API REST desarrollada con Flask (Python), que recibe los datos del frontend y los envía al dispositivo IoT.
- rtos/: Contiene el código en C que se ejecuta en el ESP32 para controlar los movimientos del plotter.
El equipo utiliza un workflow basado en trunk based development:
- La rama principal es main, donde se integran los cambios finales.
- Cada desarrollador trabaja en su propia rama (guido, gian, nico, alex), y luego fusiona sus cambios en main tras una revisión.
- Los cambios se prueban y verifican mediante pipelines automáticos configurados con GitHub Actions.
Cada componente del proyecto utiliza un Dockerfile para facilitar el desarrollo y despliegue.
- frontend: Dockerfile que permite desarrollar y construir la imagen de la aplicación web.
- backend: Dockerfile que permite desarrollar y construir la imagen de la API Flask.
- rtos: Dockerfile que simula el entorno de desarrollo del ESP32 para compilar el código, pero no construye una imagen. Los artifacts de compilación se suben a GitHub como artifacts.
El proyecto incluye un archivo docker-compose.yml que permite ejecutar y probar el frontend y el backend juntos en un entorno local para asegurar la correcta comunicación entre ellos.
Se han configurado pipelines en GitHub Actions para automatizar el proceso de integración y despliegue. Cada componente tiene su propio pipeline:
- Frontend: Compila, prueba y sube la imagen Docker a DockerHub.
- Backend: Compila, prueba y sube la imagen Docker a DockerHub.
- RTOS: Compila el código para el ESP32 y sube los artifacts compilados a GitHub.
Se requieren credenciales para subir las imágenes Docker al repositorio de DockerHub.
Se necesitan credenciales para subir los artifacts compilados del ESP32 al repositorio de artifacts de GitHub.
git clone https://github.com/tu-repositorio/proyecto-plotter-2d.git
cd proyecto-plotter-2d
- Asegúrate de tener Docker y Docker Compose instalados en tu máquina.
- Ejecuta el siguiente comando para iniciar los servicios frontend y backend:
docker-compose up --build
El frontend estará disponible en http://localhost:3000
y el backend en http://localhost:5000
.
- Crea una rama nueva para tu desarrollo:
git checkout -b mi-nueva-funcionalidad
- Haz tus cambios y súbelos:
git add .
git commit -m "Añadir nueva funcionalidad"
git push origin mi-nueva-funcionalidad
- Crea un Pull Request para fusionar tus cambios en la rama principal.
Este proyecto está bajo la licencia MIT.