Monitor ambiental IoT con ESP32
Estación IoT maestro-esclavo con ESP32 y analítica ambiental en PySpark.
01 Problema y contexto
La instrumentación ambiental de bajo costo falla distinto que el software ordinario. El dato nace en un sensor analógico barato, cruza un enlace inalámbrico que se cae y aterriza en un servidor que no controla el instante de la medición. El diseño se juega en la cadena completa, no en ninguno de sus eslabones por separado.
La instrumentación ambiental de bajo costo falla distinto que el software ordinario. El dato nace en un sensor analógico barato, cruza un enlace inalámbrico que se cae y aterriza en un servidor que no controla el instante de la medición. El diseño se juega en la cadena completa, entre captura, transporte, persistencia y análisis, y no en ninguno de sus eslabones por separado.
02 Solución
Dos nodos ESP32 en topología maestro-esclavo enlazados por ESP-NOW, sin depender de una red WiFi local, con salto de canal en el esclavo para reencontrar al maestro tras una desconexión. Cinco señales con identificadores fijos para que el origen de cada lectura quede explícito en la base, telemetría cada 15 segundos sin bloquear la interfaz táctil, y analítica en PySpark que contrasta las lecturas propias contra referencias externas de clima y calidad del aire.
- Definición de la topología: un gateway ESP32 con pantalla táctil (DHT22 para temperatura y humedad, MQ135 para gas) y un nodo remoto que aporta gas y humedad de suelo.
- Enlace entre placas por ESP-NOW, sin depender de WiFi local, con channel hopping sobre los canales 1 a 13 en el esclavo para reencontrar al maestro tras una desconexión.
- Estandarización del esquema de telemetría en cinco señales con identificadores fijos, de modo que el origen de cada lectura quede explícito en la base de datos.
- Envío del payload cada 15 segundos en segundo plano, sin bloquear la interfaz táctil, hacia una API REST que persiste en MySQL con la zona horaria fijada desde el servidor.
- Configuración de red mediante portal cautivo: la placa levanta su propio punto de acceso para recibir las credenciales, en lugar de dejarlas escritas en el firmware.
- Resolución del conflicto nativo del ESP32 entre el conversor ADC2 y la antena WiFi activa, que corrompía la lectura del sensor de gas.
- Analítica en PySpark sobre las series almacenadas, cruzando la API propia con fuentes externas de clima y calidad del aire.
03 Resultados
Cifras verificables en el repositorio y su documentación:
04 Cómo está construido
Estación de monitoreo ambiental IoT construida sobre una red de dos nodos ESP32: un gateway maestro con pantalla táctil y un nodo esclavo que transmite lecturas de gas y humedad de suelo vía ESP-NOW. El maestro envía cada 15 segundos las cinco señales estandarizadas (temperatura, humedad, gas local/remoto y humedad de tierra) a una API REST en PHP con PDO que persiste en MySQL remoto. Incluye además un notebook PySpark para Google Colab que integra cuatro fuentes de datos (OpenMeteo, AQICN, la API del sistema y MongoDB) como evaluación de Big Data.
05 Decisiones éticas
- La configuración de red se resuelve por portal cautivo, de modo que las credenciales del router del usuario no quedan escritas en el firmware.
- El sistema mide variables ambientales de un espacio, no personas: no captura audio, imagen ni identificadores de dispositivos cercanos.
- Las lecturas del MQ135 se muestran como niveles relativos y no como una medición de calidad del aire en unidades certificadas, porque el sensor no está calibrado contra un patrón.
06 Aspectos destacados
- Arquitectura maestro-esclavo con dos ESP32 comunicados por ESP-NOW, con channel hopping (canales 1-13) para auto-recuperación del nodo esclavo.
- Gateway con pantalla táctil (Cheap Yellow Display) que envía el payload de sensores cada 15 segundos sin bloquear la UI, con portal cautivo para configurar WiFi.
- Backend PHP con PDO para inserción segura en MySQL remoto con zona horaria America/Santiago.
- Pipeline Big Data en PySpark (Google Colab) que integra cuatro fuentes: OpenMeteo, AQICN, la API REST del sistema y MongoDB.
- Workaround de lectura ADC2 que resuelve el conflicto nativo del ESP32 entre el sensor de gas analógico y la antena WiFi activa.
07 Limitaciones
Ninguno de los sensores está calibrado contra un instrumento de referencia, y eso condiciona todo lo que puede afirmarse con estos datos. El MQ135 entrega una resistencia que también depende de la temperatura y la humedad y que deriva con el tiempo, así que sus valores sirven para comparar el ambiente consigo mismo, no para reportar concentraciones. La humedad de suelo es una lectura analógica cruda, sin curva de conversión. La serie proviene de un único punto de instalación, sin sensores redundantes ni estudio de deriva, y los cortes del enlace dejan huecos: el muestreo real no es estrictamente regular pese al intervalo nominal.