Volver al portafolio
2025 Mobile Developer

Tlaloc IOT - App de Control de Riego

Aplicación Android nativa para monitoreo y control en tiempo real de sistemas de riego inteligente IOT basados en ESP32 con comunicación MQTT

Tlaloc IOT - App de Control de Riego

Tecnologías

Kotlin Jetpack Compose Firebase MQTT HiveMQ Coroutines Flow

01. Contexto

Los usuarios del sistema de riego inteligente Tlaloc's Garden necesitaban una aplicación móvil para monitorear y controlar sus cultivos desde cualquier lugar. El sistema debía comunicarse con dispositivos ESP32 equipados con sensores de humedad del suelo, luz ambiental, calidad del agua (TDS) y nivel de depósito, permitiendo tanto control automático basado en parámetros de la planta como intervención manual. La aplicación debía manejar múltiples zonas de cultivo, cada una con diferentes tipos de plantas y parámetros de cuidado ideales.

02. Objetivo

Desarrollar una aplicación Android nativa en Kotlin con Jetpack Compose que integrara: comunicación bidireccional MQTT con ESP32 para telemetría en tiempo real y envío de comandos, arquitectura MVVM con repositorios y ViewModels, integración Firebase (Auth, Firestore) para autenticación y persistencia de datos, gestión de múltiples zonas de cultivo con parámetros personalizados por planta, modo automático que ajusta riego basado en umbrales ideales, modo manual para control directo de bomba, calibración de sensores, visualización de históricos con gráficos, y sistema de alertas para condiciones críticas.

03. Mi Rol

Como Mobile Developer, diseñé e implementé toda la arquitectura de la aplicación Android: configuré proyecto con Kotlin y Jetpack Compose, implementé arquitectura MVVM con 5 ViewModels y 6 repositorios, integré cliente MQTT (HiveMQ) con manejo de conexión TLS y suscripciones a topics, desarrollé sistema de Flows reactivos para UI en tiempo real, implementé autenticación Firebase y operaciones CRUD en Firestore, creé 11 pantallas con Material Design 3, desarrollé sistema de calibración de sensores capacitivos, implementé scanner QR para configuración rápida de credenciales MQTT, creé sistema de gráficos con MPAndroidChart para históricos, y documenté exhaustivamente toda la arquitectura técnica.

Arquitectura

  • Arquitectura MVVM con separación clara de capas (UI/ViewModel/Repository/Data Sources)
  • UI: Jetpack Compose con Material Design 3, navegación con Navigation Compose
  • Comunicación IOT: Cliente MQTT HiveMQ con TLS (puerto 8883) para telemetría bidireccional
  • Backend: Firebase Auth para autenticación, Firestore para persistencia de zonas/plantas/telemetría
  • Concurrencia: Kotlin Coroutines + Flow para operaciones asíncronas y streams reactivos
  • Storage local: DataStore para credenciales MQTT y preferencias de usuario
  • Repositorios: ZoneRepository, TelemetryRepository, HistoryRepository, PlantRepository, CareRepository
  • ViewModels: ZonesViewModel, AuthViewModel, NewPlantViewModel, HistoryViewModel con StateFlows
  • Visualización: MPAndroidChart para gráficos de línea de históricos de telemetría

Decisiones Técnicas

  • Elegí Jetpack Compose sobre XML layouts para UI declarativa más simple y menos boilerplate
  • Implementé arquitectura MVVM pura con repositorios para separar lógica de negocio de UI
  • Utilicé Kotlin Flow en lugar de LiveData para streams reactivos más potentes y composables
  • Configuré HiveMQ Client con TLS/SSL para comunicación segura en puerto 8883
  • Diseñé sistema de topics MQTT jerárquico: tlaloc/tele/{zoneId}/{sensor} y tlaloc/cmd/{zoneId}/{action}
  • Implementé SharedFlow en HiveMqManager para broadcast de mensajes MQTT a múltiples suscriptores
  • Utilicé Firestore snapshots con Flow para updates en tiempo real de zonas y cuidados
  • Creé sistema de combinación de Flows (combine, map, filterNotNull) para datos derivados complejos
  • Implementé calibración lineal de sensor capacitivo: humedad% = (SECO - ADC) / (SECO - HUMEDO) * 100

Galería del Proyecto

Screenshot 1 of Tlaloc IOT - App de Control de Riego
Screenshot 2 of Tlaloc IOT - App de Control de Riego
Screenshot 3 of Tlaloc IOT - App de Control de Riego
Screenshot 4 of Tlaloc IOT - App de Control de Riego
Screenshot 5 of Tlaloc IOT - App de Control de Riego
Screenshot 6 of Tlaloc IOT - App de Control de Riego
Screenshot 7 of Tlaloc IOT - App de Control de Riego
Screenshot 8 of Tlaloc IOT - App de Control de Riego
Screenshot 9 of Tlaloc IOT - App de Control de Riego
Screenshot 10 of Tlaloc IOT - App de Control de Riego

Impacto y Resultados

  • 11 pantallas implementadas con Jetpack Compose (Auth, QR, Manual, Test, Calibrate, Zones, Detail, History, Plants, NewPlant, NewZone)
  • 5 ViewModels con StateFlows reactivos conectados a 6 repositorios especializados
  • 4 sensores IOT monitoreados en tiempo real (humedad suelo, luz lx, TDS ppm, nivel cm)
  • Sistema de telemetría bidireccional: 4 topics de lectura + 4 topics de comando por zona
  • Modo automático que ajusta riego basado en umbral ideal de planta (ej: tomate 60%)
  • Histórico con gráficos de línea (MPAndroidChart) mostrando últimas 50 lecturas por zona
  • Sistema de alertas: humedad < 25% ideal = crítico, volumen depósito < 0.25L = crítico
  • Calibración de sensor capacitivo con valores en seco (~3400 ADC) y húmedo (~1700 ADC)
"La app me permite monitorear mis cultivos desde cualquier lugar. El modo automático es increíble: solo asigno el tipo de planta y el sistema riega cuando detecta que la humedad baja del ideal. Las alertas me avisan cuando el depósito está bajo."

Lecciones Aprendidas

  • 💡 Jetpack Compose simplifica enormemente desarrollo de UI en Android eliminando XML y reduciendo boilerplate
  • 💡 Los Flows de Kotlin son más potentes que LiveData para casos complejos con múltiples fuentes y transformaciones
  • 💡 El protocolo MQTT es ideal para IOT: ligero, QoS configurables, y pattern pub/sub perfecto para sensores
  • 💡 La arquitectura MVVM con repositorios escala bien: cada capa tiene responsabilidad clara y es testeable
  • 💡 SharedFlow con replay permite broadcast de eventos MQTT a múltiples colectores sin pérdida de mensajes
  • 💡 Firestore snapshots con Flow se integran perfectamente en arquitectura reactiva con combine/map
  • 💡 La calibración de sensores capacitivos requiere valores de referencia (seco/húmedo) para conversión lineal precisa
  • 💡 Los topics MQTT jerárquicos (tlaloc/tele/zone1/humidity) permiten suscripciones granulares y wildcards