IoT en la nube
Es el módulo final, donde todas las piezas se unen. Tenemos sensores que leen, una Raspberry Pi que procesa y un ESP32 que envía por WiFi. Ahora cerramos el círculo: que esos datos lleguen a la nube, se distribuyan con MQTT y se vean en un dashboard en tiempo real. Con esto, la «Estación inteligente del salón» queda completa y de verdad inteligente.
¿Qué es?
«IoT en la nube» significa que tus dispositivos no guardan los datos solo localmente, sino que los publican en un servidor accesible desde internet. El protocolo estándar para esto es MQTT: un sistema de mensajería ligero, ideal para placas pequeñas, donde los dispositivos publican mensajes en temas (topics) y otros se suscriben para recibirlos.
¿Cómo funciona?
MQTT tiene tres roles:
- Broker: el servidor central que recibe y reparte mensajes (usaremos uno gratuito como
broker.hivemq.com, o Mosquitto local). - Publisher: quien envía. Nuestro ESP32 publica en el tema
salon/ambiente. - Subscriber: quien escucha. El dashboard se suscribe a
salon/ambientey recibe cada lectura al instante.
El broker desacopla: el ESP32 no necesita saber quién lee. Solo publica, y cualquiera suscrito recibe.
¿Para qué sirve?
Sirve para ver y reaccionar a distancia. Desde el celular, en otra ciudad, podrías ver la temperatura del salón en vivo. Es lo que convierte sensores sueltos en un sistema monitorizable.
La pieza que construye: del ESP32 al dashboard, vía MQTT
Lado dispositivo: el ESP32 publica por MQTT
Cambiamos el envío HTTP del módulo anterior por MQTT, más eficiente. En MicroPython, con la librería umqtt.simple:
import time
import dht
from machine import Pin
from umqtt.simple import MQTTClient
from wifi import conectar_wifi # del módulo anterior
BROKER = "broker.hivemq.com"
CLIENTE_ID = "estacion-salon-101"
TOPIC = b"salon/ambiente"
sensor = dht.DHT22(Pin(15))
conectar_wifi()
cliente = MQTTClient(CLIENTE_ID, BROKER)
cliente.connect()
print("Conectado al broker MQTT")
while True:
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
# Publicamos un JSON simple como texto
mensaje = '{{"temp": {:.1f}, "hum": {:.1f}}}'.format(temp, hum)
cliente.publish(TOPIC, mensaje)
print("Publicado en", TOPIC, ":", mensaje)
except Exception as e:
print("Error:", e)
time.sleep(10)
Lado nube: un suscriptor en Python (en la Raspberry Pi)
En la Pi, dentro del venv del proyecto, instala el cliente MQTT y escribe un suscriptor que reciba y muestre todo:
source .venv/bin/activate
pip install paho-mqtt
import json
import paho.mqtt.client as mqtt
BROKER = "broker.hivemq.com"
TOPIC = "salon/ambiente"
# Se llama automáticamente cuando llega un mensaje
def al_recibir(cliente, userdata, mensaje):
datos = json.loads(mensaje.payload.decode())
temp = datos["temp"]
hum = datos["hum"]
estado = "ALERTA" if temp >= 28.0 else "ok"
print(f"Salon -> {temp:.1f}C {hum:.1f}% [{estado}]")
cliente = mqtt.Client()
cliente.on_message = al_recibir
cliente.connect(BROKER, 1883)
cliente.subscribe(TOPIC)
print(f"Suscrito a {TOPIC}. Esperando lecturas...")
cliente.loop_forever() # bucle bloqueante que escucha siempre
Enciende el ESP32 (publica) y ejecuta el suscriptor en la Pi: verás cada lectura aparecer en tiempo real, viajando del salón a la nube y de vuelta a tu pantalla.
Para un dashboard visual sin programar, conecta el mismo broker a Node-RED o Grafana y suscríbete a salon/ambiente. Tendrás gráficas en vivo.
Un broker público como HiveMQ es abierto: cualquiera podría leer tu tema. Para algo real, usa un broker con usuario, contraseña y TLS, o monta Mosquitto propio en la Pi.
Tech English: broker (intermediario), publish/subscribe (publicar/suscribir), topic (tema/canal), payload (contenido del mensaje), retained message (mensaje retenido).
El proyecto, completo
Recorre el camino de un dato: el sensor mide → el ESP32 lo lee y publica por WiFi/MQTT → el broker lo reparte → la Raspberry Pi (en su venv) lo recibe, procesa y podría guardarlo o accionar algo → el dashboard lo muestra. Esa es, de punta a punta, la «Estación inteligente del salón».
Ejercicios
- Amplía el
payloadcon"sala"y haz que el suscriptor imprima de qué sala viene cada lectura, simulando dos estaciones publicando ensalon/ambiente. - En el suscriptor de la Pi, guarda cada lectura recibida en un archivo CSV (
hora,sala,temp,hum) para poder graficarla después. Explica por qué MQTT es mejor que HTTP para esto.