Sprint 0 – Proyecto base ESP32 usando PlatformIO.
Este proyecto valida el entorno de desarrollo para ESP32.
- Compila y flashea firmware en ESP32
- Muestra logs por monitor serial
- Verifica ejecución continua mediante uptime
El siguiente registro demuestra que el firmware fue compilado, flasheado y ejecutado correctamente en el ESP32, mostrando un contador de uptime continuo.
Se implementó la lectura de un botón/cable en el GPIO 25 del ESP32 usando INPUT_PULLUP.
El firmware detecta cambios de estado (pressed/released) y los reporta por el monitor serial.
Estado RELEASED (GPIO a HIGH):

En este ticket se implementa la conexión del ESP32 a una red WiFi utilizando el framework Arduino en PlatformIO, evitando el hardcodeo de credenciales dentro del código fuente.
La solución mantiene una estructura limpia, modular y segura, permitiendo que el firmware se conecte a WiFi sin exponer información sensible en el repositorio.
Esta funcionalidad se integra sobre los tickets previos:
- GE-80: Base del proyecto PlatformIO para ESP32.
- GE-81: Lectura de botón mediante GPIO con
INPUT_PULLUP.
- La lógica de conexión WiFi se encapsula en un módulo independiente (
wifi_manager), ubicado ensrc/wifi/. - Las credenciales WiFi se definen en un archivo externo (
secrets.h) que no se versiona. - Se incluye un archivo plantilla (
secrets_template.h) como referencia para la configuración local. - El sistema reporta el estado de conexión, dirección IP y nivel de señal (RSSI) mediante el Monitor Serial.
- La lectura del botón GPIO continúa funcionando de manera correcta mientras el dispositivo está conectado a la red.
La siguiente evidencia corresponde a la ejecución del firmware GE-82, donde se observa:
- Inicio correcto del sistema.
- Conexión exitosa del ESP32 a la red WiFi.
- Asignación de dirección IP y reporte del nivel de señal (RSSI).
- Monitoreo periódico del estado de conexión.
- Funcionamiento correcto del botón GPIO durante la conexión WiFi.
En este ticket se implementa la conexión del ESP32 a la plataforma ThingsBoard mediante el protocolo MQTT, utilizando un token de dispositivo almacenado de forma segura fuera del código fuente.
La solución evita el hardcodeo de credenciales y mantiene una estructura modular y escalable, preparada para el envío de telemetría en tickets posteriores.
Esta funcionalidad se apoya en:
- GE-80: Base del proyecto PlatformIO para ESP32.
- GE-81: Lectura de botón mediante GPIO.
- GE-82: Conexión WiFi sin credenciales hardcodeadas.
- Cliente MQTT basado en la librería
PubSubClient. - Conexión al broker MQTT de ThingsBoard (
demo.thingsboard.io). - Autenticación mediante token de dispositivo (definido en
secrets.h). - El archivo
secrets.hse encuentra ignorado por git. - Se incluye
secrets_template.hcomo referencia de configuración. - El estado de la conexión se reporta mediante logs en el Monitor Serial.
A continuación se presentan las evidencias que validan la conexión MQTT entre el ESP32 y ThingsBoard:
1. Monitor Serial – Conexión MQTT exitosa
Se observa el inicio del sistema, la conexión a la red WiFi y la conexión exitosa al broker MQTT de ThingsBoard.
2. ThingsBoard – Dispositivo en estado Active
La plataforma ThingsBoard reconoce al dispositivo como Active, confirmando que la autenticación mediante token y la sesión MQTT se establecieron correctamente.
En este ticket se implementa el envío de telemetría del estado del botón hacia ThingsBoard mediante MQTT.
La telemetría se envía únicamente cuando el botón cambia de estado (PRESSED/RELEASED), evitando publicar mensajes continuamente dentro del loop.
- Publicación MQTT al topic estándar de ThingsBoard:
v1/devices/me/telemetry. - Payload JSON enviado en cada cambio de estado:
button:1(PRESSED) /0(RELEASED)button_str:"PRESSED"/"RELEASED"
- Envío condicionado a conexión MQTT activa (
tb_mqtt::isConnected()). - Logs por Monitor Serial para evidenciar publicación exitosa (sin exponer secretos).
1. Monitor Serial – Telemetría enviada Se observa la conexión WiFi/MQTT y el envío de telemetría al presionar/soltar el botón.
2. ThingsBoard – Latest telemetry
Se visualiza la última telemetría recibida por ThingsBoard (button y button_str) con timestamps recientes.
En este ticket se implementa un manejo básico de reconexión para mantener el ESP32 operativo ante caídas de red.
El firmware detecta desconexiones de WiFi y MQTT e intenta recuperar la conectividad automáticamente, evitando bloqueos en bucles infinitos y manteniendo la ejecución del programa.
- WiFi reconnection (no bloqueante):
- Se implementa
wifi::loop()para reintentar conexión cada cierto intervalo (RECONNECT_INTERVAL_MS). - Se detectan cambios de estado (
wl_status_t) para registrar eventos de caída/recuperación sin saturar el log.
- Se implementa
- MQTT reconnection (no bloqueante):
tb_mqtt::loop()intenta reconectar al broker de ThingsBoard cada cierto intervalo (MQTT_RECONNECT_INTERVAL_MS) únicamente si hay WiFi.- Se registran fallos de conexión (por ejemplo, DNS temporal) y recuperación exitosa.
- Robustez:
- La telemetría del botón se envía solo si MQTT está conectado.
- No se exponen credenciales ni tokens en el repositorio.
1. Monitor Serial – Caída y recuperación WiFi/MQTT
Se observa desconexión, reintentos y recuperación de WiFi, seguido de reconexión MQTT exitosa a ThingsBoard.
2. ThingsBoard – Telemetría posterior a reconexión
Se valida que el dispositivo continúa enviando telemetría correctamente luego de recuperar la conectividad.
Este repositorio NO incluye credenciales reales.
-
Copia el archivo de plantilla:
- Copia
include/secrets.example.h - Renómbralo como
include/secrets.h(archivo local)
- Copia
-
Edita
include/secrets.hy reemplaza los valores de ejemplo por tus credenciales reales.
Nota:
include/secrets.hes un archivo local, está ignorado por Git y no debe subirse al repositorio.
.gitignoreconfigurado para ignorarinclude/secrets.h.- Archivo
include/secrets.example.hversionado como plantilla sin credenciales. - Archivo
include/secrets.hutilizado solo en entorno local (no versionado).
En este ticket se crea y configura un device en ThingsBoard, validando la conectividad del ESP32 mediante MQTT.
El dispositivo se autentica usando un Access Token, sin exponer credenciales en el repositorio, y queda listo para enviar y recibir datos.
Se valida que:
- El ESP32 se conecte correctamente al broker MQTT de ThingsBoard.
- El device pase a estado Active.
- La comunicación MQTT quede establecida antes de enviar telemetría o recibir comandos.
En este ticket se implementa control remoto bidireccional usando RPC (Remote Procedure Call) de ThingsBoard hacia el ESP32.
El flujo implementado es:
- Desde el dashboard se envía un comando RPC (
setState). - El ESP32 recibe el comando vía MQTT.
- El dispositivo ejecuta la acción (encendido/apagado de LED).
- El ESP32 envía telemetría de confirmación hacia ThingsBoard.
Este enfoque asegura que el dashboard no solo envía comandos, sino que también verifica su ejecución real en el hardware.
-
RPC ejecutado desde el dashboard en ThingsBoard (Switch RPC)

-
El ESP32 recibe el comando RPC y ejecuta la acción en hardware (LED)

En este ticket se crea un dashboard completo en ThingsBoard que integra:
- Visualización del estado del botón físico.
- Visualización del estado lógico del botón (0 / 1).
- Control remoto del ESP32 mediante un Switch (RPC) de ThingsBoard.
- Confirmación visual del estado aplicado en el dispositivo.
El dashboard permite observar y controlar el sistema en tiempo real, cerrando completamente el ciclo IoT:
ESP32 ↔ ThingsBoard
- Label & Value Card →
button_str(PRESSED / RELEASED) - Value Card →
button(0 / 1) - Switch (RPC) →
setState - Value Card →
remote_state(confirmación del comando)
-
Dashboard – switch encendido, botón PRESSED, valores en 1 **

-
Monitor Serial – RPC recibido + telemetría completa (RPC + botón)




















