{"id":26194515,"url":"https://github.com/miusarname2/basecode","last_synced_at":"2026-04-24T14:35:58.550Z","repository":{"id":281406387,"uuid":"945179481","full_name":"miusarname2/BaseCode","owner":"miusarname2","description":"This repository is dedicated to developing a modular system for managing ESP32 controllers. The application integrates a GPS module (Ublox NEO-6M) to capture the device's current location, alongside an MQTT controller that periodically transmits this data to a server. The objective is to construct a scalable, modular, and easily maintainable solu..","archived":false,"fork":false,"pushed_at":"2025-05-10T21:24:34.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-10T21:32:35.495Z","etag":null,"topics":["cpp","esp32","iot"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miusarname2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-08T20:52:49.000Z","updated_at":"2025-05-10T21:24:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"485b5df1-1297-4196-a709-595e76e13731","html_url":"https://github.com/miusarname2/BaseCode","commit_stats":null,"previous_names":["miusarname2/basecode"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/miusarname2/BaseCode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2FBaseCode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2FBaseCode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2FBaseCode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2FBaseCode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miusarname2","download_url":"https://codeload.github.com/miusarname2/BaseCode/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2FBaseCode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32227924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","esp32","iot"],"created_at":"2025-03-12T01:57:19.951Z","updated_at":"2026-04-24T14:35:58.545Z","avatar_url":"https://github.com/miusarname2.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Documentación del Repositorio\n\n## Descripción General\n\nEste repositorio tiene como objetivo desarrollar un sistema modular para el manejo de controladores del ESP32. La aplicación integra un módulo GPS (Ublox NEO-6M) para obtener la ubicación actual del dispositivo y un controlador MQTT para enviar periódicamente esta información a un servidor. Se busca construir una solución escalable, modular y de fácil mantenimiento que permita futuras ampliaciones o modificaciones.\n\n## Estructura del Proyecto\n\nLa estructura del repositorio está organizada de la siguiente manera:\n\n```\n├── .gitignore\n├── .vscode\n│   ├── extensions.json\n│   └── settings.json\n├── README.md\n├── include\n│   └── README\n├── lib\n│   └── README\n├── platformio.ini\n├── src\n│   ├── controller\n│   │   ├── ESPModule.h\n│   │   ├── GPSModule.h\n│   │   └── MQTTController.h\n│   ├── MQTTController.cpp\n│   └── main.cpp\n└── test\n    └── README\n```\n\n### Detalle de la Estructura\n\n- **.vscode/**  \n  Configuraciones específicas para Visual Studio Code, ayudando a mantener un entorno de desarrollo coherente.\n\n- **include/** y **lib/**  \n  Carpetas reservadas para incluir archivos y bibliotecas adicionales, en caso de ser necesario.\n\n- **platformio.ini**  \n  Archivo de configuración para PlatformIO, donde se definen la plataforma, placa, framework y dependencias (por ejemplo, *TinyGPSPlus* y *PubSubClient*).\n\n- **src/**  \n  Directorio que contiene el código fuente del proyecto.\n  \n  - **controller/**  \n    Carpeta dedicada a los módulos o controladores del sistema.\n    \n    - **ESPModule.h:**  \n      Clase base abstracta para los módulos del ESP32. Todas las clases controladoras heredan de esta clase, garantizando una interfaz común (`begin()` y `update()`).\n      \n    - **GPSModule.h:**  \n      Módulo encargado de gestionar el procesamiento de datos del GPS. Utiliza la librería *TinyGPSPlus* para parsear las tramas NMEA y obtener la ubicación.\n      \n    - **MQTTController.h:**  \n      Módulo que administra la conexión MQTT. Extiende de **ESPModule** y se encarga de la conexión, reconexión y publicación de datos a un broker MQTT.\n      \n  - **MQTTController.cpp:**  \n    Implementación de la clase **MQTTController**, que contiene la lógica para establecer y mantener la conexión MQTT y publicar los mensajes.\n    \n  - **main.cpp:**  \n    Archivo principal del proyecto. Se encarga de inicializar la conexión WiFi, instanciar y actualizar los módulos (GPS y MQTT). Aquí se orquesta el envío de la ubicación en formato JSON cada vez que el GPS actualice la posición.\n\n- **test/**  \n  Espacio reservado para pruebas unitarias o de integración que aseguren el correcto funcionamiento del sistema.\n\n## Uso de Programación Orientada a Objetos (POO)\n\nEl proyecto se ha diseñado utilizando un enfoque orientado a objetos por las siguientes razones:\n\n- **Modularidad:**  \n  La POO permite encapsular la lógica en clases. Cada módulo (por ejemplo, GPSModule y MQTTController) tiene responsabilidades bien definidas, lo que facilita la separación de funcionalidades y la reutilización de código.\n\n- **Escalabilidad:**  \n  Gracias al diseño basado en clases y la herencia de la clase **ESPModule**, es sencillo agregar nuevos controladores o extender los existentes sin alterar la estructura global del sistema.\n\n- **Mantenibilidad:**  \n  Un código organizado y modular facilita la localización de errores, la realización de modificaciones y la integración de nuevas funcionalidades. Además, el uso de estándares en los mensajes de commit (mediante la extensión \"Conventional commits\") permite un historial de cambios claro y uniforme, mejorando la colaboración en equipos.\n\n## Flujo de Trabajo y Funcionalidad\n\n1. **Inicialización:**  \n   - En `main.cpp`, se inicia la conexión WiFi y se instancian los módulos.\n   - Se llama al método `begin()` de cada módulo para realizar las configuraciones iniciales.\n\n2. **Actualización Continua:**  \n   - En el `loop()`, se invoca el método `update()` de cada módulo.\n   - **GPSModule:** Procesa continuamente la información del GPS. Cuando detecta una nueva ubicación, habilita la actualización.\n   - **MQTTController:** Verifica y mantiene la conexión al broker MQTT, reconectándose automáticamente en caso de desconexión, y se encarga de enviar los datos en el formato deseado.\n\n3. **Publicación de Datos:**  \n   - Cuando el GPS actualiza su ubicación, se crea un mensaje JSON con la latitud y longitud.\n   - Este mensaje se publica en el tópico definido a través del **MQTTController**.\n\n## Estándar de Commits\n\nSe recomienda utilizar la extensión **\"Conventional commits\"** en Visual Studio Code para lograr:\n- **Mensajes claros y descriptivos:**  \n  Facilita la comprensión del historial de cambios y mejora la comunicación entre desarrolladores.\n- **Estandarización de mensajes:**  \n  Mantiene un formato uniforme que resulta útil para la integración continua y el versionado semántico.\n\nAdoptar este estándar contribuye a un desarrollo más organizado y a un seguimiento eficiente de los cambios en el repositorio.\n\n## Justificación Técnica\n\n1. **Modularidad y Organización del Código:**  \n   Separar la lógica de controladores en su propio directorio y centralizar la inicialización en `main.cpp` permite una estructura clara, facilitando el mantenimiento y la extensión del sistema.\n\n2. **Escalabilidad:**  \n   La utilización de clases y la herencia de **ESPModule** posibilitan agregar nuevos módulos (por ejemplo, nuevos sensores o métodos de comunicación) sin reestructurar el proyecto por completo.\n\n3. **Mantenibilidad:**  \n   La modularidad, junto con una buena documentación y el uso de commit messages estandarizados, reduce la curva de aprendizaje y simplifica la identificación y corrección de errores.\n\n4. **Facilidad en la Colaboración:**  \n   Una estructura bien definida y documentada permite que nuevos miembros del equipo comprendan rápidamente el flujo y la organización del código, facilitando la integración y la colaboración en el proyecto.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiusarname2%2Fbasecode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiusarname2%2Fbasecode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiusarname2%2Fbasecode/lists"}