📌 Resumen rápido (TL;DR)
- Guía completa sobre mqtt y node-red para dashboard agrícola: centraliza todos tus sensores: características, comparativa y aplicaciones en agricultura de precisión.
📅 Última actualización: 12 de abril de 2026
📋 Índice de contenidos
- 1. 1. El problema: datos dispersos en cinco apps distintas
- 2. 2. Qué es MQTT y por qué es el estándar IoT agrícola
- 3. 3. Arquitectura completa: sensores → broker → dashboard
- 4. 4. Componentes y presupuesto
- 5. 5. Instalar Mosquitto (broker MQTT) en Raspberry Pi
- 6. 6. Instalar y configurar Node-RED
- 7. 7. Código ESP32: publicar datos por MQTT
- 8. 8. Crear el dashboard visual paso a paso
- 9. 9. Añadir Grafana para gráficos históricos
- 10. 10. Alertas automáticas: Telegram, email y sirena
- 11. 11. Acceso remoto seguro desde el móvil
- 12. 12. Tres dashboards reales: horticultura, viñedo y olivar
- 13. 13. Errores frecuentes y soluciones
- 14. 14. Preguntas frecuentes
❓ Preguntas frecuentes
🏠 Inicio → Blog → MQTT y Node-RED para Dashboard Agrícola
📅 Actualizado: marzo 2026
1. El problema: datos dispersos en cinco apps distintas
Si has seguido nuestros tutoriales previos, es probable que ya tengas funcionando un sistema de riego con ESP32, una estación meteorológica DIY y quizá un enlace LoRa para las parcelas lejanas. El problema es que cada sistema tiene su propia forma de mostrar datos: uno por servidor web local, otro por Telegram, otro por ThingSpeak. Abres cinco pestañas, cinco apps, y sigues sin tener una visión global de tu explotación.
💡 Pro Tip
La agricultura de precisión puede aumentar la productividad hasta un 25%. Explora todas nuestras guías. Ver más →
MQTT y Node-RED resuelven exactamente eso. MQTT es el «idioma común» que hablan todos los dispositivos IoT, y Node-RED es la «centralita visual» que recoge todo y lo muestra en un único panel. No necesitas programar: Node-RED funciona arrastrando bloques y conectándolos con cables virtuales.
El resultado final es un dashboard accesible desde cualquier navegador (ordenador, tablet o móvil) donde ves en tiempo real temperatura, humedad del suelo, lluvia acumulada, estado del riego, nivel de batería de cada nodo y alertas activas. Todo en una pantalla.
2. Qué es MQTT y por qué es el estándar IoT agrícola
MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería diseñado en mil novecientos noventa y nueve para conectar sensores en oleoductos vía satélite. Su diseño prioriza tres cosas: mínimo consumo de ancho de banda, mínimo consumo de batería y fiabilidad en conexiones inestables. Exactamente lo que necesitas en una finca donde el WiFi va justo y los ESP32 funcionan con batería solar.
El modelo es publicación/suscripción (pub/sub). Cada sensor publica datos en un «topic» (tema), como finca/parcela1/temperatura. Cualquier dispositivo interesado se suscribe a ese topic y recibe los datos automáticamente. En medio está el broker (Mosquitto), que gestiona el tráfico. Es como un cartero que reparte mensajes a quien los ha pedido.
Comparado con HTTP (lo que usan los servidores web de ESP32), MQTT tiene ventajas claras para agricultura:
| Característica | HTTP (servidor web) | MQTT |
|---|---|---|
| Overhead por mensaje | ~300 bytes cabecera | 2 bytes cabecera |
| Consumo batería | Alto (conexión por petición) | Mínimo (conexión persistente) |
| Direccionalidad | Cliente pide → servidor responde | Bidireccional (pub/sub) |
| Desconexiones | Pierdes datos | Retained messages + QoS |
| Múltiples receptores | Cada uno pide por separado | Todos suscritos reciben |
| Ideal para | Páginas web, APIs | Sensores IoT, telemetría |
Los tres niveles de calidad de servicio (QoS) de MQTT son especialmente útiles en entornos rurales. QoS cero envía el mensaje una vez sin confirmación (ideal para lecturas frecuentes de temperatura). QoS uno garantiza al menos una entrega (perfecto para alertas de riego). QoS dos garantiza exactamente una entrega (necesario para órdenes de activar/desactivar válvulas).
3. Arquitectura completa: sensores → broker → dashboard
La arquitectura que vamos a montar sigue este flujo: los ESP32 repartidos por la finca leen sensores y publican datos por MQTT vía WiFi. Un broker Mosquitto corriendo en una Raspberry Pi recibe todo. Node-RED (en la misma Raspberry Pi) se suscribe a los topics y genera un dashboard visual en HTML. Opcionalmente, Grafana + InfluxDB almacenan datos históricos para gráficos a largo plazo.
La estructura de topics que recomendamos sigue una jerarquía lógica:
finca/
├── parcela1/
│ ├── temperatura → 24.5
│ ├── humedad_aire → 65
│ ├── humedad_suelo → 42
│ ├── lluvia_mm → 2.8
│ ├── viento_kmh → 12.3
│ ├── bateria_v → 3.82
│ └── riego/
│ ├── estado → ON / OFF
│ └── comando → ACTIVAR / DESACTIVAR
├── parcela2/
│ ├── temperatura → 23.1
│ ├── humedad_suelo → 38
│ └── bateria_v → 4.01
├── invernadero/
│ ├── temperatura → 28.7
│ ├── co2_ppm → 620
│ └── ventilacion → AUTO
└── gateway/
├── lora_rssi → -67
└── ultimo_mensaje → 2026-03-09T08:42:00
Con esta estructura, puedes suscribirte a finca/# para recibir absolutamente todo, o a finca/parcela1/temperatura para solo la temperatura de parcela uno. El comodín # captura todos los subtopics, y + captura un nivel. Por ejemplo, finca/+/temperatura te da la temperatura de todas las parcelas.
4. Componentes y presupuesto
| Componente | Función | Precio |
|---|---|---|
| Raspberry Pi 4 (2 GB) | Broker + Node-RED + Grafana | 45 € |
| MicroSD 32 GB | Sistema operativo + datos | 8 € |
| Fuente alimentación USB-C 5V/3A | Alimentación RPi | 10 € |
| Caja para Raspberry Pi | Protección | 7 € |
| Cable Ethernet (opcional) | Conexión estable al router | 5 € |
| TOTAL hardware central | 75 € | |
| Software (Mosquitto + Node-RED + Grafana + InfluxDB) | Todo el stack | 0 € (open source) |
Si ya tienes ESP32 funcionando con nuestros tutoriales de riego o estación meteo, el único coste adicional es la Raspberry Pi. Y si ya tienes una en un cajón (muchos makers la tienen), el coste extra es cero.
5. Instalar Mosquitto (broker MQTT) en Raspberry Pi
Mosquitto es el broker MQTT más usado en IoT. Es ligero, fiable y consume menos de 10 MB de RAM. La instalación en Raspberry Pi OS es directa:
# Instalar Mosquitto y clientes sudo apt update sudo apt install -y mosquitto mosquitto-clients # Habilitar inicio automático sudo systemctl enable mosquitto sudo systemctl start mosquitto # Configurar acceso en red local sudo nano /etc/mosquitto/conf.d/local.conf
En el archivo local.conf, añade:
listener 1883 allow_anonymous false password_file /etc/mosquitto/passwd
Crea un usuario y contraseña para que los ESP32 se autentiquen:
# Crear usuario (te pedirá contraseña) sudo mosquitto_passwd -c /etc/mosquitto/passwd finca # Reiniciar para aplicar cambios sudo systemctl restart mosquitto # Probar: en un terminal suscríbete mosquitto_sub -h localhost -u finca -P tucontraseña -t "test/#" # En otro terminal publica mosquitto_pub -h localhost -u finca -P tucontraseña -t "test/temp" -m "24.5"
Si en el primer terminal aparece 24.5, el broker funciona correctamente. Anota la IP de tu Raspberry Pi (hostname -I) porque la necesitarás para configurar los ESP32.
6. Instalar y configurar Node-RED
Node-RED es una herramienta de programación visual creada por IBM. En lugar de escribir código, arrastras «nodos» a un lienzo y los conectas con cables. Cada nodo hace una función: recibir MQTT, filtrar datos, formatear texto, mostrar gráficos, enviar Telegram.
# Instalar Node-RED en Raspberry Pi (script oficial) bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) # Habilitar inicio automático sudo systemctl enable nodered sudo systemctl start nodered # Instalar módulos necesarios cd ~/.node-red npm install node-red-dashboard npm install node-red-contrib-telegrambot npm install node-red-contrib-influxdb
Accede a Node-RED desde cualquier navegador en http://IP_RASPBERRY:1880. Verás el editor visual con la paleta de nodos a la izquierda, el lienzo central y el panel de configuración a la derecha.
Los nodos que más usarás en el dashboard agrícola son: mqtt in (recibir datos de sensores), function (transformar datos, por ejemplo convertir string a número), gauge (medidor circular para temperatura o humedad), chart (gráfico temporal), text (valor numérico grande), switch (botón para activar/desactivar riego) y notification (alerta en pantalla).
7. Código ESP32: publicar datos por MQTT
El cambio en el código ESP32 respecto a nuestros tutoriales anteriores es mínimo. En lugar de montar un servidor web o enviar por HTTP, usamos la librería PubSubClient para publicar en el broker Mosquitto. Este código es compatible con cualquiera de nuestros proyectos anteriores (riego, estación meteo, nodo LoRa):
#include <WiFi.h> #include <PubSubClient.h> #include <Wire.h> #include <Adafruit_BME280.h> // ── CONFIGURACIÓN ── const char* WIFI_SSID = "TU_RED_WIFI"; const char* WIFI_PASS = "TU_CONTRASEÑA_WIFI"; const char* MQTT_SERVER = "192.168.1.100"; // IP de tu Raspberry Pi const int MQTT_PORT = 1883; const char* MQTT_USER = "finca"; const char* MQTT_PASS = "tucontraseña"; const char* TOPIC_BASE = "finca/parcela1"; // Cambia por parcela const char* CLIENT_ID = "esp32-parcela1"; // ── OBJETOS ── WiFiClient espClient; PubSubClient mqtt(espClient); Adafruit_BME280 bme; // Publicar float en topic void publicar(const char* subtopic, float valor) { char topic[80], payload[10]; snprintf(topic, sizeof(topic), "%s/%s", TOPIC_BASE, subtopic); dtostrf(valor, 4, 1, payload); mqtt.publish(topic, payload, true); // retained=true } // Reconectar MQTT si se pierde void reconectar() { while (!mqtt.connected()) { Serial.print("Conectando MQTT..."); if (mqtt.connect(CLIENT_ID, MQTT_USER, MQTT_PASS)) { Serial.println("OK"); // Suscribirse a comandos de riego char cmd_topic[80]; snprintf(cmd_topic, sizeof(cmd_topic), "%s/riego/comando", TOPIC_BASE); mqtt.subscribe(cmd_topic); } else { Serial.print("Error: "); Serial.println(mqtt.state()); delay(5000); } } } // Recibir comandos (riego remoto) void callback(char* topic, byte* payload, unsigned int length) { String msg = ""; for (int i = 0; i < length; i++) msg += (char)payload[i]; if (msg == "ACTIVAR") { digitalWrite(26, HIGH); // Relé riego publicar("riego/estado", 1); Serial.println("Riego ACTIVADO por MQTT"); } else if (msg == "DESACTIVAR") { digitalWrite(26, LOW); publicar("riego/estado", 0); Serial.println("Riego DESACTIVADO por MQTT"); } } void setup() { Serial.begin(115200); pinMode(26, OUTPUT); Wire.begin(); bme.begin(0x76); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi OK: " + WiFi.localIP().toString()); mqtt.setServer(MQTT_SERVER, MQTT_PORT); mqtt.setCallback(callback); } void loop() { if (!mqtt.connected()) reconectar(); mqtt.loop(); // Leer y publicar cada 30 segundos static unsigned long ultimo = 0; if (millis() - ultimo > 30000) { ultimo = millis(); publicar("temperatura", bme.readTemperature()); publicar("humedad_aire", bme.readHumidity()); publicar("presion_hpa", bme.readPressure() / 100.0); // Sensor humedad suelo (ADC) int raw = analogRead(35); float humedad_suelo = map(raw, 3500, 1200, 0, 100); humedad_suelo = constrain(humedad_suelo, 0, 100); publicar("humedad_suelo", humedad_suelo); // Batería (divisor resistivo en GPIO 36) float vbat = analogRead(36) * (3.3 / 4095.0) * 2.0; publicar("bateria_v", vbat); Serial.printf("T:%.1f H:%.0f S:%.0f B:%.2fV\n", bme.readTemperature(), bme.readHumidity(), humedad_suelo, vbat); } }
Los puntos clave del código son: retained=true en la publicación hace que el broker guarde el último valor, así cuando abres el dashboard no ves ceros sino el dato más reciente. La función callback permite recibir comandos remotos para activar el riego desde Node-RED. Y la reconexión automática asegura que si el WiFi se corta un momento, el ESP32 reconecta solo.
8. Crear el dashboard visual paso a paso
En Node-RED, el flujo para mostrar la temperatura de parcela uno en un gauge es así: arrastras un nodo mqtt in, lo configuras con el broker (IP de tu Raspberry, usuario y contraseña) y el topic finca/parcela1/temperatura. Conectas su salida a un nodo function con una línea: msg.payload = parseFloat(msg.payload); return msg; (convierte el texto a número). Y conectas la salida del function a un nodo gauge configurado con rango cero a cincuenta grados, colores verde-amarillo-rojo y tamaño 6×6.
Repites el patrón para cada sensor. Para la humedad del suelo usas un gauge con rango cero a cien por ciento. Para la lluvia, un nodo text que muestre los milímetros acumulados. Para la batería, un gauge con rango tres a cuatro punto dos voltios y colores rojo-amarillo-verde invertidos (rojo = baja, verde = llena).
El dashboard se organiza en tabs (pestañas) y groups (grupos dentro de cada pestaña). Una organización que funciona bien para fincas medianas es: pestaña «Vista General» con indicadores clave de todas las parcelas, pestaña «Parcela 1» con detalle completo de sensores y control de riego, pestaña «Estación Meteo» con datos meteorológicos y gráficos de lluvia, y pestaña «Alertas» con histórico de notificaciones.
Para el control de riego, añades un nodo switch (botón ON/OFF) conectado a un nodo mqtt out que publica en finca/parcela1/riego/comando. Cuando pulsas el botón en el dashboard, el mensaje viaja por MQTT hasta el ESP32 que activa el relé. El ESP32 confirma publicando en finca/parcela1/riego/estado, y otro gauge en el dashboard muestra si el riego está encendido o apagado. Todo el ciclo tarda menos de un segundo.
9. Añadir Grafana para gráficos históricos
Node-RED dashboard muestra datos en tiempo real, pero no almacena históricos. Para ver la evolución de temperatura del último mes o la lluvia acumulada por semanas, necesitas una base de datos temporal (InfluxDB) y un visualizador (Grafana). Ambos son gratuitos.
# Instalar InfluxDB wget -q https://repos.influxdata.com/influxdata-archive_compat.key echo "..." | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata.gpg sudo apt install -y influxdb sudo systemctl enable influxdb && sudo systemctl start influxdb # Crear base de datos influx -execute "CREATE DATABASE finca" # Instalar Grafana sudo apt install -y grafana sudo systemctl enable grafana-server && sudo systemctl start grafana-server
En Node-RED, conectas cada dato a un nodo influxdb out que escribe en la base de datos finca con el measurement correspondiente (temperatura, humedad, lluvia). Grafana accede a InfluxDB y crea paneles con gráficos de líneas, barras, mapas de calor y tablas. Lo configuras una vez y los gráficos se actualizan solos. Accedes a Grafana en http://IP_RASPBERRY:3000.
Los gráficos más útiles para agricultura son: evolución diaria de temperatura mínima y máxima (línea doble), humedad del suelo vs umbrales de riego (área con líneas de referencia), lluvia acumulada semanal (barras), horas de sol diarias (área) y nivel de batería de cada nodo (multilinea con alerta bajo tres punto cuatro voltios).
10. Alertas automáticas: Telegram, email y sirena
En Node-RED, las alertas se configuran con un nodo switch (condicional) que filtra valores fuera de rango, conectado a un nodo telegram sender. El flujo es: mqtt in → function (parsear) → switch (¿temperatura < 2?) → function (formatear mensaje) → telegram sender.
Alertas recomendadas para explotación agrícola:
| Alerta | Condición | Prioridad |
|---|---|---|
| 🥶 Helada inminente | Temperatura < 2 °C | 🔴 Crítica |
| 🌡️ Golpe de calor | Temperatura > 40 °C | 🔴 Crítica |
| 💧 Suelo seco | Humedad suelo < 25% | 🟡 Alta |
| 🌧️ Lluvia intensa | Lluvia > 20 mm/h | 🟡 Alta |
| 💨 Viento fuerte | Viento > 50 km/h | 🟡 Alta |
| 🔋 Batería baja | Voltaje < 3.4 V | 🟠 Media |
| 📡 Nodo sin datos | Sin mensaje > 10 min | 🟠 Media |
| 🍄 Riesgo mildiu | Humedad > 90% + Temp 15-25 °C | 🟡 Alta |
El nodo trigger de Node-RED permite configurar un «cooldown» para que no te lleguen veinte mensajes seguidos de helada. Configúralo a una alerta cada treinta minutos como máximo por tipo de evento. Para la detección de «nodo sin datos», usa un nodo trigger en modo timeout: si no recibe mensaje en diez minutos, dispara la alerta de nodo caído.
11. Acceso remoto seguro desde el móvil
El dashboard Node-RED es accesible en tu red local desde cualquier navegador en http://IP_RASPBERRY:1880/ui. Pero cuando estás fuera de la finca necesitas acceso remoto. Las opciones de menor a mayor complejidad son:
Tailscale (recomendada): VPN gratuita que se instala en la Raspberry Pi y en tu móvil. Crea una red privada entre ambos sin abrir puertos ni configurar router. Instalación en un minuto: curl -fsSL https://tailscale.com/install.sh | sh y luego sudo tailscale up. Accedes al dashboard por la IP de Tailscale igual que si estuvieras en local.
Cloudflare Tunnel: si quieres acceso desde un dominio propio (tipo dashboard.tufinca.com) sin exponer la IP pública. Es gratuito y Cloudflare gestiona el certificado HTTPS. Requiere algo más de configuración pero es más profesional.
Abrir puertos + HTTPS: la opción clásica de redirigir puerto en el router. No la recomendamos sin certificado SSL y usuario/contraseña, porque expones el dashboard a internet abierto.
12. Tres dashboards reales: horticultura, viñedo y olivar
Caso 1 — Horticultura intensiva en Almería (2 ha bajo plástico): seis ESP32 dentro de los invernaderos midiendo temperatura, humedad, CO2 y humedad del suelo. Un séptimo ESP32 fuera con estación meteo completa. Dashboard con ocho gauges principales, control de cuatro zonas de riego independientes y alertas de temperatura alta (ventilación) y CO2 bajo (apertura lateral). Grafana almacena datos para cumplir con el CUE digital: los registros de riego, fertilización y condiciones climáticas se exportan a CSV directamente desde InfluxDB.
Caso 2 — Viñedo en Ribera del Duero (20 ha): cuatro nodos LoRa en las parcelas más alejadas (hasta tres kilómetros) con gateway central conectado por WiFi a la Raspberry Pi del cortijo. El dashboard muestra un mapa esquemático de las cuatro parcelas con semáforo verde/amarillo/rojo según humedad del suelo. La alerta de mildiu (humedad aire mayor a noventa por ciento + temperatura entre quince y veinticinco grados durante seis horas) se programa con un nodo function que acumula tiempo y dispara cuando se cumple la regla de los tres dieces.
Caso 3 — Olivar ecológico en Jaén (40 ha): sistema integrado con el enlace LoRa de cuatro nodos ya montados. El dashboard añade seguimiento de ecorregímenes PAC: registra automáticamente las actuaciones de riego y su volumen para justificar la reducción de agua exigida por el ecorrégimen de agricultura de precisión. Informe mensual automático generado por Node-RED que compara consumo real vs cuota máxima.
13. Errores frecuentes y soluciones
El ESP32 conecta al WiFi pero no al broker: verifica que la IP del broker es correcta y que Mosquitto está escuchando en el puerto mil ochocientos ochenta y tres. Comprueba con mosquitto_sub desde la propia Raspberry Pi primero. Si usas contraseña, asegúrate de que el archivo /etc/mosquitto/passwd existe y que reiniciaste Mosquitto después de crearlo.
El dashboard muestra NaN o valores raros: el problema casi siempre es que MQTT envía texto y el gauge espera un número. Añade siempre un nodo function con msg.payload = parseFloat(msg.payload) entre el mqtt in y el gauge. También asegúrate de que el ESP32 usa dtostrf() y no String() para convertir floats.
Grafana no muestra datos: verifica que el nodo influxdb out de Node-RED está configurado con la base de datos correcta (finca) y que InfluxDB está corriendo (sudo systemctl status influxdb). En Grafana, al configurar el data source, usa http://localhost:8086 y la base de datos finca.
Las alertas llegan duplicadas: configura el nodo trigger con rate limiting. Por ejemplo, un mensaje cada mil ochocientos mil milisegundos (treinta minutos) para la misma alerta. También asegúrate de que no tienes dos flujos paralelos procesando el mismo topic.
El dashboard va lento con muchos datos: limita los gráficos de Node-RED a las últimas cien muestras. Para históricos largos, usa Grafana que está optimizado para consultas temporales. También puedes bajar la frecuencia de publicación a cada sesenta segundos en lugar de treinta para sensores que no cambian rápido (presión atmosférica, batería).




14. Preguntas frecuentes
¿Necesito saber programar para usar Node-RED?
No. Node-RED funciona con bloques visuales que se conectan arrastrando cables. Si has seguido nuestros tutoriales de ESP32, Node-RED te resultará mucho más fácil porque no escribes código, sino que conectas nodos prediseñados. El único «código» es una línea en los nodos function para convertir texto a número.
¿Puedo instalar Node-RED en una Raspberry Pi?
Sí, es la opción más habitual y la que recomendamos. Una Raspberry Pi cuatro con dos GB de RAM ejecuta Node-RED, Mosquitto y Grafana simultáneamente sin problema. El consumo es de unos cinco vatios, ideal para alimentación solar si la colocas junto al router de la finca.
¿MQTT funciona sin internet?
Sí. MQTT funciona en red local (LAN). El broker Mosquitto corre en tu Raspberry Pi y los ESP32 se conectan por WiFi local. Solo necesitas internet si quieres acceso remoto (Tailscale) o enviar alertas por Telegram. Todo el dashboard y la recopilación de datos funcionan offline.
¿Cuántos sensores puedo conectar a un solo broker MQTT?
Mosquitto soporta miles de conexiones simultáneas. En una explotación agrícola típica con diez a cincuenta nodos sensores no tendrás ningún problema de capacidad. El cuello de botella suele ser el WiFi del router, no MQTT. Si necesitas más nodos, simplemente añade un punto de acceso WiFi adicional.


Deja una respuesta