Introducción a las Plataformas IoT
En el ecosistema IoT moderno, las plataformas de integración en la nube se han convertido en elementos fundamentales para el desarrollo de soluciones mecatrónicas escalables y profesionales.
Las plataformas IoT ofrecen servicios completos que incluyen gestión de dispositivos, visualización de datos, análisis en tiempo real y control remoto. En este módulo exploraremos tres de las plataformas más importantes:
ThingsBoard
Plataforma open-source para visualización y gestión de dispositivos IoT con dashboards profesionales.
- Dashboards personalizables
- Reglas de negocio
- APIs REST y MQTT
- Escalabilidad empresarial
Blynk
Plataforma para crear aplicaciones móviles IoT sin programación, ideal para prototipos rápidos.
- Apps móviles automáticas
- Widgets drag-and-drop
- Notificaciones push
- Hardware virtual
Node-RED
Herramienta de programación visual para conectar dispositivos, APIs y servicios online.
- Programación visual
- Integración de servicios
- Flujos de datos
- Extensible con nodos
Arquitectura de Integración IoT
La integración del ESP32 con plataformas IoT sigue una arquitectura de cuatro capas que garantiza escalabilidad y mantenibilidad:
Arquitectura de Sistema IoT
Capa de Dispositivo
ESP32 + SensoresCapa de Conectividad
Wi-Fi / MQTT / HTTPCapa de Plataforma
ThingsBoard / BlynkCapa de Aplicación
Dashboards / AppsProtocolo MQTT
MQTT (Message Queuing Telemetry Transport) es el protocolo estándar para IoT debido a su bajo ancho de banda, confiabilidad y capacidad de manejar conexiones intermitentes.
Integración con ThingsBoard
ThingsBoard es una plataforma IoT open-source que ofrece capacidades empresariales para gestión de dispositivos, visualización de datos y análisis en tiempo real.
Configuración del Dispositivo
Registro en ThingsBoard Cloud
Crea una cuenta en thingsboard.cloud
o instala ThingsBoard localmente. Obtén el token de acceso del dispositivo desde el panel de administración.
Configuración del Código ESP32
#include <WiFi.h>
#include <ThingsBoard.h>
#include <DHT.h>
// Configuración WiFi
const char* ssid = "TU_WIFI";
const char* password = "TU_PASSWORD";
// Configuración ThingsBoard
const char* tb_server = "thingsboard.cloud";
const char* token = "TU_DEVICE_TOKEN";
// Configuración del sensor DHT22
#define DHT_PIN 4
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// Cliente ThingsBoard
WiFiClient espClient;
ThingsBoard tb(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
// Conectar a WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
Serial.println("WiFi conectado");
// Conectar a ThingsBoard
if (tb.connect(tb_server, token)) {
Serial.println("Conectado a ThingsBoard");
}
}
void loop() {
// Verificar conexión
if (!tb.connected()) {
tb.connect(tb_server, token);
}
// Leer sensores
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
if (!isnan(temperatura) && !isnan(humedad)) {
// Enviar telemetría
tb.sendTelemetryFloat("temperatura", temperatura);
tb.sendTelemetryFloat("humedad", humedad);
tb.sendTelemetryInt("timestamp", millis());
Serial.printf("Datos enviados - T: %.2f°C, H: %.2f%%\n",
temperatura, humedad);
}
tb.loop();
delay(5000); // Enviar cada 5 segundos
}
Creación del Dashboard
En ThingsBoard, crea un dashboard con widgets de:
- Gráficas de líneas para tendencias temporales
- Indicadores digitales para valores actuales
- Mapas de calor para visualizar rangos
- Alertas para valores fuera de rango
Integración con Blynk
Blynk permite crear aplicaciones móviles para controlar y monitorear dispositivos IoT sin conocimientos de programación móvil.
Configuración con Blynk 2.0
Configuración de la App
Descarga Blynk IoT desde App Store/Google Play. Crea un nuevo dispositivo y obtén el Template ID y Auth Token.
Código ESP32 para Blynk
#define BLYNK_TEMPLATE_ID "TU_TEMPLATE_ID"
#define BLYNK_TEMPLATE_NAME "ESP32 Sensor Node"
#define BLYNK_AUTH_TOKEN "TU_AUTH_TOKEN"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Credenciales
const char* ssid = "TU_WIFI";
const char* password = "TU_PASSWORD";
// Configuración del sensor
#define DHT_PIN 4
#define DHT_TYPE DHT22
#define LED_PIN 2
DHT dht(DHT_PIN, DHT_TYPE);
BlynkTimer timer;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(LED_PIN, OUTPUT);
// Conectar a Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
// Timer para enviar datos cada 10 segundos
timer.setInterval(10000L, sendSensorData);
}
void loop() {
Blynk.run();
timer.run();
}
// Función para enviar datos del sensor
void sendSensorData() {
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
if (!isnan(temperatura) && !isnan(humedad)) {
// Enviar a pines virtuales
Blynk.virtualWrite(V0, temperatura);
Blynk.virtualWrite(V1, humedad);
Serial.printf("Datos enviados a Blynk - T: %.2f°C, H: %.2f%%\n",
temperatura, humedad);
}
}
// Control de LED desde Blynk
BLYNK_WRITE(V2) {
int ledState = param.asInt();
digitalWrite(LED_PIN, ledState);
Serial.printf("LED %s desde Blynk\n", ledState ? "ENCENDIDO" : "APAGADO");
}
// Sincronización al conectar
BLYNK_CONNECTED() {
Serial.println("Conectado a Blynk");
Blynk.syncVirtual(V2); // Sincronizar estado del LED
}
Widgets Recomendados
- V0: Widget de valor (temperatura)
- V1: Widget de valor (humedad)
- V2: Widget de botón (control LED)
- Gráficas: Para historial de datos
Integración con Node-RED
Node-RED es una herramienta de programación visual que permite crear flujos de datos entre dispositivos IoT, APIs y servicios web de manera gráfica.
Instalación y Configuración
Instalación de Node-RED
# Instalar Node.js y npm
sudo apt update && sudo apt install nodejs npm
# Instalar Node-RED globalmente
sudo npm install -g node-red
# Ejecutar Node-RED
node-red
# Acceder a http://localhost:1880
Código ESP32 para MQTT
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
// Configuración WiFi
const char* ssid = "TU_WIFI";
const char* password = "TU_PASSWORD";
// Configuración MQTT (Broker local o HiveMQ)
const char* mqtt_server = "192.168.1.100"; // IP de tu servidor Node-RED
const int mqtt_port = 1883;
const char* mqtt_user = ""; // Usuario MQTT (opcional)
const char* mqtt_password = ""; // Password MQTT (opcional)
// Tópicos MQTT
const char* topic_data = "esp32/sensores";
const char* topic_control = "esp32/control";
// Configuración del sensor
#define DHT_PIN 4
#define DHT_TYPE DHT22
#define LED_PIN 2
DHT dht(DHT_PIN, DHT_TYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(LED_PIN, OUTPUT);
// Conectar WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
// Configurar MQTT
client.setServer(mqtt_server, mqtt_port);
client.setCallback(onMqttMessage);
Serial.println("Sistema iniciado");
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// Enviar datos cada 10 segundos
static unsigned long lastSend = 0;
if (millis() - lastSend > 10000) {
sendSensorData();
lastSend = millis();
}
}
void sendSensorData() {
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
if (!isnan(temperatura) && !isnan(humedad)) {
// Crear JSON
StaticJsonDocument<200> doc;
doc["dispositivo"] = "ESP32-001";
doc["temperatura"] = temperatura;
doc["humedad"] = humedad;
doc["timestamp"] = millis();
char buffer[256];
serializeJson(doc, buffer);
// Publicar datos
client.publish(topic_data, buffer);
Serial.printf("Datos enviados: %s\n", buffer);
}
}
void onMqttMessage(char* topic, byte* payload, unsigned int length) {
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.printf("Mensaje recibido [%s]: %s\n", topic, message.c_str());
// Control del LED
if (String(topic) == topic_control) {
if (message == "LED_ON") {
digitalWrite(LED_PIN, HIGH);
Serial.println("LED encendido");
} else if (message == "LED_OFF") {
digitalWrite(LED_PIN, LOW);
Serial.println("LED apagado");
}
}
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Conectando a MQTT...");
String clientId = "ESP32Client-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str(), mqtt_user, mqtt_password)) {
Serial.println("conectado");
client.subscribe(topic_control);
} else {
Serial.printf("falló, rc=%d, reintentando en 5 segundos\n", client.state());
delay(5000);
}
}
}
Flujo de Node-RED
Crea un flujo en Node-RED con los siguientes nodos:
- MQTT In: Suscribirse a
esp32/sensores
- JSON: Parsear datos del ESP32
- Function: Procesar y validar datos
- Dashboard Gauge: Mostrar temperatura y humedad
- Dashboard Chart: Gráficas históricas
- MQTT Out: Enviar comandos a
esp32/control
Ejercicios Prácticos
Objetivo: Crear un dashboard profesional en ThingsBoard que muestre datos de sensores en tiempo real.
Pasos a realizar:
- Configurar un dispositivo en ThingsBoard
- Programar ESP32 para enviar datos de temperatura y humedad
- Crear widgets de visualización (gráficas, medidores)
- Configurar alarmas para valores críticos
- Exportar datos a CSV
Objetivo: Desarrollar una aplicación móvil para controlar LEDs y monitorear sensores usando Blynk.
Funcionalidades a implementar:
- Control de LED RGB desde smartphone
- Monitoreo de temperatura en tiempo real
- Notificaciones push para alertas
- Gráficas históricas de datos
- Control por voz (opcional)
Objetivo: Crear un sistema de automatización que procese datos de múltiples sensores y tome decisiones automáticas.
Sistema a desarrollar:
- Recepción de datos MQTT de múltiples ESP32
- Procesamiento y análisis de datos
- Dashboard web en tiempo real
- Automatización basada en reglas
- Integración con servicios externos (email, Telegram)
Proyecto Integrador: Sistema de Monitoreo Ambiental
Sistema Multi-Plataforma de Monitoreo Ambiental
Desarrolla un sistema completo que integre las tres plataformas IoT estudiadas para monitorear las condiciones ambientales de un espacio de trabajo.
Especificaciones del Sistema
Hardware Requerido
- 3x ESP32 DevKit
- 3x Sensor DHT22
- 2x Sensor LDR
- 1x Sensor de ruido
- 1x Sensor MQ-135 (calidad aire)
- LEDs indicadores
- 1x Ventilador (actuador)
- Fuentes de alimentación
Funcionalidades del Sistema
- ThingsBoard: Dashboard principal con análisis histórico y alertas
- Blynk: Control móvil y notificaciones en tiempo real
- Node-RED: Lógica de automatización y procesamiento de datos
- Integración: Los tres sistemas trabajando coordinadamente
Métricas a Monitorear
- Temperatura: 18-25°C
- Humedad: 40-60%
- Luminosidad: 300-500 lux
- Ruido: < 65 dB
- Calidad aire: < 1000 ppm CO2
Comparación de Plataformas IoT
Característica | ThingsBoard | Blynk | Node-RED |
---|---|---|---|
Facilidad de uso | Intermedio | Fácil | Intermedio |
Costo | Gratuito | Freemium | Gratuito |
Escalabilidad | Excelente | Buena | Excelente |
Personalización | Alta | Media | Muy Alta |
App móvil | Limitada | Excelente | No nativa |
Programación visual | No | No | Sí |
Análisis de datos | Avanzado | Básico | Avanzado |
Recomendaciones de Uso
- ThingsBoard: Ideal para aplicaciones empresariales que requieren análisis profundo y gestión de flotas de dispositivos
- Blynk: Perfecto para prototipos rápidos y aplicaciones que priorizan la experiencia móvil
- Node-RED: Excelente para integraciones complejas y automatización de procesos empresariales
Referencias y Recursos Adicionales
Documentación Oficial
Bibliotecas para ESP32
ArduinoThingsBoard
- Cliente ThingsBoardBlynk
- Cliente Blynk IoTPubSubClient
- Cliente MQTTArduinoJson
- Manejo de JSON