Aplicacion web academica desarrollada con Flask para gestionar un sistema hidropónico con enfoque en monitoreo, telemetria IoT, gestion de torres y CRUD de cultivos sobre MySQL/MariaDB.
Esta version del proyecto cumple con:
- autenticacion de usuarios con
Flask-Login - CRUD completo de
cultivos - gestion de usuarios en MySQL/MariaDB
- monitoreo de sensores por torre
- plantillas con Jinja2
- estilos con Bootstrap y CSS propio
- generacion de reportes PDF de cultivos
- estructura organizada en capas:
models,services,forms,conexion
- Python 3
- Flask
- Flask-Login
- MySQL Connector for Python
- MySQL / MariaDB
- Jinja2
- Bootstrap 5
- HTML + CSS
- fpdf2
- PlatformIO + ESP32
proyecto_ecogrow/
├── app.py
├── form.py
├── requirements.txt
├── render.yaml
├── README.md
├── blueprints/
│ ├── auth.py
│ ├── cultivos.py
│ ├── main.py
│ ├── mysql.py
│ ├── sensores.py
│ ├── shared.py
│ ├── torres.py
│ └── ai.py
├── conexion/
│ ├── __init__.py
│ └── conexion.py
├── Conexión/
│ ├── __init__.py
│ └── conexion.py
├── models/
│ ├── __init__.py
│ ├── cultivo.py
│ └── user.py
├── services/
│ ├── __init__.py
│ └── cultivo_service.py
├── forms/
│ ├── __init__.py
│ ├── cultivo_form.py
│ ├── login_form.py
│ ├── torre_form.py
│ └── usuario_form.py
├── database/
│ └── schema.sql
├── templates/
│ ├── base.html
│ ├── cultivos/
│ │ ├── form.html
│ │ └── lista.html
│ └── ...
├── static/
├── tests/
│ └── test_app.py
└── platformio/
├── esp32_rele_base/ # Inicio: solo relé + WiFi
└── esp32_hidroponico/ # Completo: sensores + riego
| Documento | Descripción |
|---|---|
| Documentación completa | Tecnologías, arquitectura, APIs, BD, despliegue |
| Presentación | Diapositivas para sustentación |
| Manual hidropónico | Dominio torre vertical |
| Fase 1 ESP32 + bomba | Cableado, PlatformIO, puesta en marcha |
| Fase 1 ESP32 + bomba | Cableado, PlatformIO, bomba + relé |
| Guía ESP32 | Resumen API e IoT |
Perfiles pH/EC por fase: domain/hidroponia_torre.py
Fase 1 (recomendada): ESP32 DevKit + relé + bomba → docs/iot/FASE1-ESP32-BOMBA-RELE.md
Resumen rápido: docs/iot/GUIA-ESP32-RELE.md
- API de sincronización:
POST /api/iot/sync(tokenX-API-Token) - Control manual desde Monitoreo en el panel web
- Firmware mínimo:
platformio/esp32_rele_base/
app.py: crea la aplicacion Flask, inicializaFlask-Login, registra blueprints y comandos CLI.conexion/conexion.py: capa de compatibilidad para la conexion principal a MySQL/MariaDB.models/: modelos del sistema usados por la aplicacion.services/: servicios con logica de negocio y generacion de reportes.forms/: acceso organizado a los formularios del sistema.blueprints/auth.py: login, registro y logout.blueprints/torres.py: gestion de torres y panel principal.blueprints/cultivos.py: CRUD completo de cultivos y reporte PDF.blueprints/sensores.py: monitoreo y recepcion de lecturas IoT.blueprints/mysql.py: gestion de usuarios en MySQL/MariaDB.Conexión/conexion.py: consultas SQL, creacion de tablas y acceso a datos.
La entidad principal adaptada a la consigna es cultivos.
Operaciones implementadas:
- Crear:
/cultivos/nuevo - Leer:
/cultivos - Actualizar:
/cultivos/editar/<id> - Eliminar:
/cultivos/borrar/<id> - Reporte PDF:
/cultivos/reporte/pdf
El proyecto trabaja con MySQL/MariaDB.
Tablas principales relacionadas:
usuariostorrescultivosciclos_cultivolecturas_sensoresconfiguracion_controlactuadores_torreprogramaciones_riegoalertas_sistemaeventos_control
El script SQL del proyecto esta en:
database/schema.sql
Tambien puedes inicializar las tablas con:
flask mysql-initPara mantener el proyecto sincronizado entre dos computadoras hay dos niveles:
- codigo: usar el mismo repositorio de GitHub
- datos: usar la misma base MySQL remota o mover respaldos entre equipos
La opcion recomendada es usar una sola base MySQL compartida y configurar las mismas variables MYSQL_* en ambas PCs.
Si todavia trabajas con MySQL local, este repo incluye scripts para exportar e importar la base sin subir dumps al repositorio:
bash scripts/db_backup.sh
bash scripts/db_restore.shEl respaldo se genera en backups/mysql/latest.sql, que puedes copiar a la otra PC por un medio privado. Ese directorio esta ignorado por Git para no publicar datos reales.
Configura estas variables en tu entorno local o despliegue:
SECRET_KEY=cambia-esta-clave-secreta
SESSION_COOKIE_SECURE=false
SESSION_COOKIE_SAMESITE=Lax
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=
MYSQL_DATABASE=ecogrow_mysql
MYSQL_UNIX_SOCKET=/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
MYSQL_USE_SOCKET=true
MYSQL_AUTO_CREATE_DATABASE=true
MYSQL_SSL_DISABLED=true
ECOGROW_SENSOR_API_TOKEN=cambia-este-token-del-dispositivo
ECOGROW_ADMIN_EMAILS=admin@correo.comECOGROW_ADMIN_EMAILS es una lista separada por comas. Solo esos correos pueden activar el modo administrador (/modo/admin) y acceder a /mysql.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtflask runO tambien:
python3 app.py//about/contactos/demo/login/registro
/dashboard/torres/torres/registrar/torres/cultivo/fase/torres/cultivo/cosecha/torres/configuracion/cultivos/cultivos/nuevo/cultivos/reporte/pdf/sensores/mysql/mysql/usuarios
Se incluye generacion de PDF usando fpdf2.
Contenido del reporte:
- listado de cultivos registrados
- campos principales del cultivo
- fecha de generacion
Ejecutar:
venv/bin/python -m unittest discover -s tests -vPara la plataforma se entrega:
- enlace del repositorio GitHub
- proyecto Flask actualizado
- script SQL en
database/schema.sql - evidencia del CRUD de cultivos
- evidencia del reporte PDF
https://github.com/elJohn72/proyecto_ecogrow