En el mundo de la tecnología y la Internet de las cosas, la comunicación entre dispositivos se ha vuelto fundamental. En este artículo, exploraremos cómo utilizar el módulo ESP8266, junto con Node-RED y MQTT, para publicar y suscribirse a datos de manera eficiente y práctica. ¡Descubre cómo aprovechar al máximo estas herramientas para tus proyectos de IoT!
Aprenda a publicar y suscribirse a temas MQTT utilizando la placa ESP8266 NodeMCU. En este tutorial, usaremos el tablero de Node-RED para controlar las salidas del ESP8266 y mostrar los datos del sensor del ESP8266 en su interfaz. El software Node-RED se ejecuta en una Raspberry Pi y la comunicación entre ESP8266 y el software Node-RED se produce a través del protocolo de comunicación MQTT. Programamos el ESP8266 con Arduino IDE.
Actualizado el 21 de marzo de 2023
Descripción del proyecto
La siguiente imagen muestra una descripción general de lo que haremos en este tutorial.
Primero, mire el vídeo de demostración a continuación.
Panel de Node-RED y Node-RED
Para seguir este tutorial necesitarás tener Node-RED y Node-RED Dashboard en tu Frambuesa Pi. Siga los siguientes tutoriales para instalar y comenzar con Node-RED y el panel de Node-RED:
- Comenzando con Node-RED en Raspberry Pi
- Comenzando con el panel de Node-RED
protocolo MQTT
En este tutorial establecemos comunicación entre una Raspberry Pi que ejecuta el software Node RED y un ESP8266 usando MQTT.
MQTT significa MQ-TElemetría transport es un sistema de publicación y suscripción agradable y liviano que le permite a usted, como cliente, publicar y recibir mensajes. Es un protocolo de mensajería liviano diseñado para dispositivos con restricciones y poco ancho de banda. Por tanto, es la solución perfecta para las aplicaciones de Internet de las cosas.
Si desea obtener más información sobre MQTT, mire el siguiente vídeo.
Para obtener una versión escrita de este video y recursos adicionales, consulte esta publicación de blog: ¿Qué es MQTT y cómo funciona?
Instalar el corredor Mosquitto
El broker MQTT es responsable de recibir todos los mensajes, filtrarlos, decidir quién está interesado en ellos y luego Publicar los mensajes a todos los clientes suscritos.
Hay varios corredores que puede utilizar. En este tutorial usaremos el corredor de mosquitos.
Puede instalar el corredor Mosquitto MQTT localmente en una Raspberry Pi, en su computadora o en la nube. seguir uno de los próximos tutoriales sobre la instalación del broker Mosquitto:
- Instale Mosquitto MQTT Broker en una Raspberry Pi
- Instale Mosquitto MQTT Broker en la nube (Digital Ocean)
Para ver si el agente Mosquitto se instaló correctamente, ejecute el siguiente comando:
pi@raspberry:~ $ mosquitto -v
Esto devuelve la versión de Mosquitto que se ejecuta actualmente en su Raspberry Pi. Debería ser 2.0.11 o posterior.
Nota: El comando Mosquitto devuelve la versión de Mosquitto actualmente instalada, pero también intenta reinicializar Mosquitto. Como Mosquitto ya se está ejecutando, aparece un mensaje de error. No se preocupe, Mosquitto está instalado y ejecutándose correctamente si ve un mensaje similar.
Estableciendo comunicación MQTT con Node-RED
En esta sección, estableceremos la comunicación MQTT con Node-RED utilizando los nodos MQTT.
Diseño del tablero
El primer paso es crear el diseño del panel. En este ejemplo tenemos un botón para controlar una salida ESP8266, una gráfica y un indicador para mostrar los valores de temperatura y humedad del sensor DHT11.
Haga clic en el pequeño icono de flecha en la parte superior derecha y luego haga clic en panel.
Sobre el disposición crear una pestaña llamada Habitación, y crea dos grupos en la pestaña Sala: lámpara Y sensor como se muestra en la siguiente figura.
Creando el flujo
Arrastre desde el área del tablero en la barra lateral izquierda cambiarA Diagrama, y un dispositivo de medición Nodos al flujo. Luego dibuja dos MQTT en y un salida MQTT Nodos del flujo (están ubicados en la sección «Red»): vea la imagen a continuación.
- cambiar – controla la salida ESP8266
- Nodo de salida MQTT – Se envía un mensaje al ESP8266 según el estado del interruptor.
- 2x Nodo de entrada MQTT – estos nodos se suscriben a los temas de temperatura y humedad para recibir datos de sensores del ESP
- diagrama – muestra los valores medidos del sensor de temperatura
- dispositivo de medición – muestra las lecturas del sensor de humedad
Node-RED y el broker MQTT deben estar conectados. Para conectar el broker MQTT a Node-RED, haga doble clic en el salida MQTT Nodo. Aparecerá una nueva ventana (ver imagen a continuación).
1) presione eso Agregar nuevo corredor MQTT Posibilidad.
2) Tipo servidor local en el servidor Campo. Todas las demás configuraciones están configuradas correctamente de forma predeterminada.
Si no está ejecutando Node-RED en la misma computadora que Node-RED (Raspberry Pi), ingrese la dirección IP MQTT en lugar de servidor local.
3) Haga clic en la pestaña «Seguridad» e ingrese su nombre de usuario y contraseña del corredor MQTT si es necesario.
4) Prensa Actualizar y luego Agregar. El nodo de salida MQTT se conecta automáticamente a su corredor después de implementar el flujo Node-RED.
Edite todas las propiedades de otros nodos como se muestra en las siguientes instrucciones.
Cambiar de nodo
El interruptor envía un En Mensaje de cadena cuando está activado; y envía uno fuera de Mensaje de cadena cuando está apagado. Este nodo publica en el Lampara de cuarto Tema. Su ESP8266 luego se suscribirá a ese tema para recibir sus mensajes. Edite las propiedades del nodo como se muestra en la imagen siguiente.
Nodo de salida MQTT
Este nodo está conectado al broker Mosquitto MQTT y publicado en Lampara de cuarto Tema. Complete los detalles como se muestra a continuación. Ingrese el tema al que desea suscribirse, establezca el valor de QoS y si desea conservar los mensajes o no.
¿Qué son los mensajes retenidos en MQTT? mantener (verdadero o falso), ¿qué significa eso?
Un mensaje retenido es un mensaje MQTT normal con el indicador retenido establecido en verdadero. El intermediario almacena el último mensaje persistente y la QoS correspondiente para este tema. Cualquier cliente que se suscriba a un patrón de tema que coincida con el tema del mensaje retenido recibirá el mensaje retenido inmediatamente después de suscribirse. El intermediario sólo almacena un mensaje persistente por tema.
¿Por qué es útil? Los mensajes retenidos ayudan a los clientes recién suscritos a recibir una actualización de estado inmediatamente después de suscribirse a un tema. Esto es particularmente útil para obtener el estado de un dispositivo. Por ejemplo, GPIO 2 está actualmente en ALTO y el ESP32 se reinicia repentinamente. No sabe cuál fue el último estado de GPIO 2. Sin embargo, si el estado es un mensaje retenido, lo recibirá inmediatamente después de suscribirse al tema y podrá actualizar el estado de GPIO 2 inmediatamente.
Nodo de entrada MQTT
Este nodo está suscrito a temperatura ambiente Tema sobre la recepción de datos del sensor de temperatura de ESP8266. El ESP8266 publica los valores de temperatura sobre este tema.
Nodos gráficos
El gráfico muestra las lecturas recibidas en el rTemperatura ambiente Tema.
Nodo de entrada MQTT
Este nodo está suscrito a Habitación/humedad Tema sobre la recepción de datos del sensor de humedad de ESP8266. El ESP8266 publicará los valores de humedad exactamente sobre este tema.
Nodo de medición
El medidor muestra las lecturas que están en el Habitación/humedad Tema. Edite las propiedades de medición como se muestra a continuación. Puedes ajustar el degradado como desees.
Conecte sus nodos como se muestra en la imagen a continuación.
Su aplicación Node-RED está lista. Haga clic en eso Insertar botón en la esquina superior derecha.
La aplicación Node-RED está lista. Para ver cómo se ve su panel, vaya a http://Su dirección IP Pi:1880/Interfaz de usuario.
Ahora siga las siguientes secciones para preparar su ESP8266.
Estructura del circuito
Las siguientes secciones le mostrarán las piezas y los esquemas necesarios para construir el circuito de este proyecto.
Piezas requeridas
Estas son las piezas necesarias para construir el circuito (haga clic en los enlaces a continuación para encontrar el mejor precio en Asesor de creadores):
- Frambuesa Pi – lea los mejores kits de inicio de Raspberry Pi 3
- ESP8266 (dispositivo de nodo ESP-12E) – leer Las mejores placas de desarrollo Wi-Fi ESP8266
- Sensor de temperatura y humedad DHT11
- tablero de circuitos
- Resistencia de 330Ω
- CONDUJO
- Resistencia de 4700Ω
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Esquema
Aquí están los esquemas del circuito de este proyecto.
Preparando tu IDE de Arduino
Programamos el ESP8266 con el IDE de Arduino. Para cargar código a su ESP8266 usando el IDE de Arduino, necesita instalar el complemento ESP8266 (Cómo instalar la placa ESP8266 en el IDE de Arduino). También necesitarás instalar dos bibliotecas adicionales para tener todo listo para tu ESP8266.
Instalación de la biblioteca PubSubClient
El PubSubCliente La biblioteca proporciona un cliente para mensajes simples de publicación/suscripción con un servidor que admite MQTT (básicamente permite que su ESP8266 se comunique con Node-RED).
1) Haga clic aquí para descargar la biblioteca PubSubClientdeberías tener uno .Cremallera Carpeta en su carpeta de Descargas
2) En el IDE de Arduino, vaya a Sketch > Incluir biblioteca > Agregar biblioteca .ZIP y seleccione la biblioteca .Cremallera Carpeta que acaba de descargar.
3) Reinicie su IDE de Arduino.
La biblioteca contiene numerosos ejemplos. Consulte Archivo > Ejemplos > PubSubClient en el software Arduino IDE.
Instalación de la biblioteca de sensores DHT
Usamos el para leer el sensor DHT. Biblioteca DHT de AdafruitPara utilizar esta biblioteca también debes tener la Biblioteca de sensores unificada de AdafruitSiga los siguientes pasos para instalar estas bibliotecas.
1) Abra su IDE de Arduino y vaya a Bosquejo > incluir biblioteca > Administrar bibliotecas. El administrador de la biblioteca debería abrirse.
2) Buscar «DHT”en el cuadro de búsqueda e instale la biblioteca DHT de Adafruit.
3) Después de instalar la biblioteca DHT de Adafruit, escriba «Sensor unificado de Adafruit”en el campo de búsqueda. Desplácese hacia abajo para buscar e instalar la biblioteca.
4) Después de instalar las bibliotecas, reinicie su IDE de Arduino.
Para obtener más información sobre el sensor DHT11 y ESP8266, consulte Servidor web de temperatura y humedad ESP8266 DHT11/DHT22 con Arduino IDE.
Elegir la placa adecuada en Arduino IDE
También debes seleccionar la placa correcta en el IDE de Arduino:
1) Ir a Herramientas > tablón y seleccione la placa ESP8266 que está utilizando.
2) Seleccione el puerto COM correcto en Herramientas > Puerto.
Subir código
Ahora puede cargar el siguiente código en su ESP8266. Este código publica mensajes con la temperatura y humedad del sensor DHT11 en el temperatura ambiente Y Habitación/humedad Temas sobre el protocolo MQTT.
El ESP8266 está suscrito al Lampara de cuarto Tema para recibir los mensajes que publica la aplicación Node-RED sobre ese tema y encender o apagar la lámpara.
El código está bien comentado y señala dónde es necesario realizar cambios. Debe editar el código con sus credenciales de red (SSID y contraseña) y los detalles del corredor (dirección IP de Raspberry Pi, nombre de usuario y contraseña del corredor MQTT).
Este código también es compatible con otros sensores DHT: todo lo que necesita hacer es descomentar y descomentar las líneas correctas de código para seleccionar su sensor.
/*****
All the resources for this project:
Home
*****/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
// Uncomment one of the lines bellow for whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// Change the credentials below, so your ESP8266 connects to your router
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// MQTT broker credentials (set to NULL if not required)
const char* MQTT_username = "REPLACE_WITH_MQTT_USERNAME";
const char* MQTT_password = "REPLACE_WITH_MQTT_PASSWORD";
// Change the variable to your Raspberry Pi IP address, so it connects to your MQTT broker
const char* mqtt_server = "YOUR_BROKER_IP_ADDRESS";
//For example
//const char* mqtt_server = "192.168.1.106";
// Initializes the espClient. You should change the espClient name if you have multiple ESPs running in your home automation system
WiFiClient espClient;
PubSubClient client(espClient);
// DHT Sensor - GPIO 5 = D1 on ESP-12E NodeMCU board
const int DHTPin = 5;
// Lamp - LED - GPIO 4 = D2 on ESP-12E NodeMCU board
const int lamp = 4;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
// Timers auxiliar variables
long now = millis();
long lastMeasure = 0;
// This functions connects your ESP8266 to your router
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected - ESP IP address: ");
Serial.println(WiFi.localIP());
}
// This function is executed when some device publishes a message to a topic that your ESP8266 is subscribed to
// Change the function below to add logic to your program, so when a device publishes a message to a topic that
// your ESP8266 is subscribed you can actually do something
void callback(String topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
// Feel free to add more if statements to control more GPIOs with MQTT
// If a message is received on the topic room/lamp, you check if the message is either on or off. Turns the lamp GPIO according to the message
if(topic=="room/lamp"){
Serial.print("Changing Room lamp to ");
if(messageTemp == "on"){
digitalWrite(lamp, HIGH);
Serial.print("On");
}
else if(messageTemp == "off"){
digitalWrite(lamp, LOW);
Serial.print("Off");
}
}
Serial.println();
}
// This functions reconnects your ESP8266 to your MQTT broker
// Change the function below if you want to subscribe to more topics with your ESP8266
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
/*
YOU MIGHT NEED TO CHANGE THIS LINE, IF YOU'RE HAVING PROBLEMS WITH MQTT MULTIPLE CONNECTIONS
To change the ESP device ID, you will have to give a new name to the ESP8266.
Here's how it looks:
if (client.connect("ESP8266Client")) {
You can do it like this:
if (client.connect("ESP1_Office")) {
Then, for the other ESP:
if (client.connect("ESP2_Garage")) {
That should solve your MQTT multiple connections problem
*/
if (client.connect("ESP8266Client", MQTT_username, MQTT_password)) {
Serial.println("connected");
// Subscribe or resubscribe to a topic
// You can subscribe to more topics (to control more LEDs in this example)
client.subscribe("room/lamp");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
// The setup function sets your ESP GPIOs to Outputs, starts the serial communication at a baud rate of 115200
// Sets your mqtt broker and sets the callback function
// The callback function is what receives messages and actually controls the LEDs
void setup() {
pinMode(lamp, OUTPUT);
dht.begin();
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
// For this project, you don't need to change anything in the loop function. Basically it ensures that you ESP is connected to your broker
void loop() {
if (!client.connected()) {
reconnect();
}
if(!client.loop())
client.connect("ESP8266Client", MQTT_username, MQTT_password);
now = millis();
// Publishes new temperature and humidity every 30 seconds
if (now - lastMeasure > 30000) {
lastMeasure = now;
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperatureC = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float temperatureF = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperatureC) || isnan(temperatureF)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Publishes Temperature and Humidity values
client.publish("room/temperature", String(temperatureC).c_str());
client.publish("room/humidity", String(humidity).c_str());
//Uncomment to publish temperature in F degrees
//client.publish("room/temperature", String(temperatureF).c_str());
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.println(" ºC");
Serial.print(temperatureF);
Serial.println(" ºF");
}
}
Después de cargar el código y tener la Raspberry Pi ejecutando su aplicación Node-RED y el broker Mosquitto, puede abrir el monitor serie Arduino IDE con una velocidad de baudios de 115200 y ver lo que sucede en tiempo real.
Esto es útil para comprobar si el ESP8266 se ha conectado correctamente a su enrutador y al corredor Mosquitto. También puede ver los mensajes que recibe y publica el ESP8266.
demostración
¡Felicidades! Su proyecto ya está completo.
Ir a http://Su dirección IP Pi/interfaz de usuario para controlar el ESP con la aplicación Node-RED. Puede acceder a su aplicación en cualquier navegador en la misma red que su Pi (vea la demostración en video a continuación).
La aplicación debería parecerse a la siguiente imagen.
Envolver
En este tutorial, le mostramos los conceptos básicos para encender luces y monitorear sensores en su ESP8266 usando el protocolo de comunicación Node-RED y MQTT. Puede seguir estos pasos básicos para crear proyectos más avanzados.
Tenemos más tutoriales de MQTT con otros sensores que pueden resultarle útiles:
- ESP8266 NodeMCU MQTT – Publicar BME280 Valores de los sensores (Arduino IDE)
- ESP8266 NodeMCU MQTT – Publicar DS18B20 Valores de temperatura (Arduino IDE)
- ESP8266 NodeMCU MQTT – Publicar BME680 Valores de temperatura, humedad, presión y gas (Arduino IDE)
Esperamos que este tutorial te haya resultado útil.
Si te gusta este proyecto y la domótica, no dejes de consultar nuestro libro electrónico: SMART HOME con Raspberry Pi, ESP32 y ESP8266.
ESP8266 y Node-RED con MQTT (Publicar y Suscribirse)
Aprende cómo publicar y suscribirte a temas MQTT con la placa ESP8266 NodeMCU. En este tutorial, utilizaremos el tablero Node-RED para controlar las salidas del ESP8266 y mostrar datos del sensor desde el ESP8266 en su interfaz. El software Node-RED se ejecuta en una Raspberry Pi, y la comunicación entre el ESP8266 y el software Node-RED se realiza mediante el protocolo de comunicación MQTT. Programaremos el ESP8266 utilizando Arduino IDE.
Visión general del proyecto
La figura siguiente muestra una visión general de lo que vamos a hacer en este tutorial.
Node-RED y Node-RED Dashboard
Para seguir este tutorial, necesitas tener Node-RED y Node-RED Dashboard instalados en tu Raspberry Pi. Sigue los siguientes tutoriales para instalar y comenzar a usar Node-RED y Node-RED Dashboard:
Protocolo MQTT
En este tutorial, estableceremos una comunicación entre una Raspberry Pi ejecutando el software Node-RED y un ESP8266 utilizando MQTT.
MQTT significa Telemetría MQTT y es un sistema ligero de publicación y suscripción donde puedes publicar y recibir mensajes como cliente. Es un protocolo de mensajería simple, diseñado para dispositivos limitados y con ancho de banda bajo. Por lo tanto, es la solución perfecta para aplicaciones de Internet de las cosas.
Si deseas obtener más información sobre MQTT, puedes ver el siguiente video.
Para obtener una versión escrita de este video y recursos adicionales, lee esta publicación de blog Qué es MQTT y cómo funciona.
Instalación de Mosquitto Broker
El broker MQTT es responsable de recibir todos los mensajes, filtrar los mensajes, decidir quién está interesado en ellos y luego publicar los mensajes a todos los clientes suscritos.
Existen varios brokers que puedes utilizar. En este tutorial, vamos a usar el Mosquitto Broker.
Puedes instalar el broker MQTT Mosquitto localmente en una Raspberry Pi, en tu computadora o en la nube. Sigue uno de los siguientes tutoriales para instalar el broker Mosquitto:
- Instalar Mosquitto MQTT Broker en una Raspberry Pi
- Instalar Mosquitto MQTT Broker en la Nube (Digital Ocean)
Para verificar si el broker Mosquitto se instaló correctamente, ejecuta el siguiente comando:
pi@raspberry:~ $ mosquitto -v
Esto devuelve la versión de Mosquitto que se está ejecutando en tu Raspberry Pi. Debe ser 2.0.11 o superior.
Nota: el comando de Mosquitto devuelve la versión de Mosquitto que está actualmente instalada, pero también intenta inicializar Mosquitto nuevamente. Dado que Mosquitto ya está en funcionamiento, muestra un mensaje de error. No te preocupes, Mosquitto está instalado y en funcionamiento correctamente si ves un mensaje similar.
Establecimiento de una comunicación MQTT con Node-RED
En esta sección, vamos a establecer una comunicación MQTT con Node-RED utilizando los nodos MQTT.
Disposición del panel
El primer paso es crear la disposición del panel. En este ejemplo, tendremos un botón para controlar una salida del ESP8266, un gráfico y un medidor para mostrar lecturas de temperatura y humedad del sensor DHT11.
En la esquina superior derecha, haz clic en el pequeño icono de flecha y haz clic en Dashboard.
En la pestaña Layout, crea una pestaña llamada Room, y dentro de la pestaña Room, crea dos grupos: Lamp y Sensor como se muestra en la figura.
Creación del flujo
Desde la sección de panel en la barra lateral izquierda, arrastra un nodo de interruptor, un nodo de gráfico y un nodo de medidor al flujo. Luego arrastra dos nodos MQTT in y un nodo MQTT out al flujo (se encuentran en la sección de red). Ver la figura.
- Interruptor: controlará la salida del ESP8266
- Nodo de salida de MQTT: publicará un mensaje al ESP8266 según el estado del interruptor
- 2 nodos de entrada de MQTT: estos nodos estarán suscritos a los temas de temperatura y humedad para recibir datos del sensor del ESP
- Gráfico: mostrará las lecturas del sensor de temperatura
- Medidor: mostrará las lecturas del sensor de humedad
Node-RED y el broker MQTT necesitan estar conectados. Para conectar el broker MQTT a Node-RED, haz doble clic en el nodo de salida de MQTT. A continuación, sigue las instrucciones para editar las propiedades de los nodos.
Nodo de interruptor
El interruptor envía un mensaje de cadena on cuando está encendido, y envía un mensaje de cadena off cuando está apagado. Este nodo publicará en el tema room/lamp. Edita las propiedades del nodo como se muestra en la imagen.
Nodo de salida de MQTT
Este nodo está conectado al broker MQTT de Mosquitto y publicará en el tema room/lamp. Completa los detalles como se muestra a continuación. Inserta el tema al que deseas suscribirte, establece el valor de QoS y si deseas retener los mensajes o no.
Nodo de entrada de MQTT
Este nodo está suscrito al tema room/temperature para recibir datos del sensor de temperatura del ESP8266. El ESP8266 estará publicando las lecturas de temperatura en este tema exacto.
Nodo de gráfico
El gráfico mostrará las lecturas recibidas en el tema de temperatura de la habitación.
Nodo de entrada de MQTT
Este nodo está suscrito al tema room/humidity para recibir datos del sensor de humedad del ESP8266. El ESP8266 estará publicando las lecturas de humedad en este tema exacto.
Nodo de medidor
El medidor mostrará las lecturas recibidas en el tema de humedad de la habitación. Edita las propiedades del medidor como se muestra a continuación. Puedes ajustar el degradado de color a tu gusto.
Cablea tus nodos como se muestra en la figura. Tu aplicación de Node-RED está lista. Haz clic en el botón Deploy en la esquina superior derecha.
La aplicación de Node-RED está lista. Para ver cómo se ve tu tablero, ve a http://tu-direccion-ip-de-la-pi:1880/ui.
Ahora, sigue las siguientes secciones para preparar tu ESP8266.
Construir el circuito
Las siguientes secciones muestran las partes necesarias y los esquemas para construir el circuito de este proyecto.
Partes requeridas
Estas son las partes requeridas para construir el circuito:
- Raspberry Pi – para obtener los mejores kits de inicio de Raspberry Pi 3, haz clic aquí
- ESP8266 (ESP-12E NodeMCU) – para obtener los mejores tableros de desarrollo Wi-Fi ESP8266, haz clic aquí
- Sensor de temperatura y humedad DHT11
- Protoboard
- Resistor de 330 Ω
- LED
- Resistencia de 4700 Ω
Puedes utilizar los enlaces anteriores o ir directamente a MakerAdvisor.com/tools para encontrar todas las piezas para tus proyectos al mejor precio.
Esquemáticos
Aquí tienes los esquemáticos para el circuito de este proyecto.
Preparación de tu Arduino IDE
Programaremos el ESP8266 utilizando el Arduino IDE. Para poder subir código a tu ESP8266 utilizando el Arduino IDE, necesitas instalar la extensión ESP8266 (Cómo instalar la placa ESP8266 en el Arduino IDE). También necesitarás instalar dos bibliotecas adicionales para tener todo listo para tu ESP8266.
Instalación de la librería PubSubClient
- Haz clic aquí para descargar la librería PubSubClient. Deberías tener una carpeta .zip en tu carpeta de Descargas.
- En el Arduino IDE, ve a Sketch > Include Library > Add .ZIP library y selecciona la carpeta .zip de la librería que acabas de descargar.
- Reinicia tu Arduino IDE.
La biblioteca viene con varios ejemplos. Ve a Archivo > Ejemplos > PubSubClient dentro del software Arduino IDE.
Instalación de la librería del sensor DHT
- Abre tu Arduino IDE y ve a Sketch > Include Library > Manage Libraries. El Administrador de Librerías debería abrirse.
- Busca «DHT» en el cuadro de búsqueda e instala la librería DHT de Adafruit.
- Luego de instalar la librería DHT de Adafruit, escribe «Adafruit Unified Sensor» en el cuadro de búsqueda. Desplázate hasta el final para encontrar la librería e instálala.
- Después de instalar las librerías, reinicia tu Arduino IDE.
Para obtener más información sobre el sensor DHT11 y el ESP8266, lee Temperatura y Humedad del Servidor Web ESP8266 DHT11/DHT22 con Arduino IDE.
Seleccionar la placa correcta en el Arduino IDE
- Ve a Herramientas > Placa y selecciona el ESP8266 que estás utilizando.
- Selecciona el puerto COM correcto en Herramientas > Puerto.
Subir código
Ahora, puedes cargar el siguiente código en tu ESP8266. Este código publicará mensajes con la temperatura y humedad del sensor DHT11 en los temas de temperatura y humedad de la habitación a través del protocolo MQTT.
El ESP8266 está suscrito al tema room/lamp para recibir los mensajes publicados en ese tema por la aplicación Node-RED, para encender o apagar la lámpara.
El código está bien comentado donde necesitas hacer cambios. Debes editar el código con tus credenciales de red (SSID y contraseña) y detalles del broker (dirección IP de la Raspberry Pi, nombre de usuario y contraseña del broker MQTT.
Este código también es compatible con otros sensores DHT – simplemente debes descomentar y comentar las líneas de código correctas para elegir tu sensor.
// Código en C++ incluyendo las librerías requeridas
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
// Descomenta una de las líneas a continuación para el tipo de sensor DHT que estás usando
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// Cambia las credenciales a continuación para que tu ESP8266 se conecte a tu enrutador
const char* ssid = "REEMPLAZAR_POR_TU_SSID";
const char* password = "REEMPLAZAR_POR_TU_CONTRASEÑA";
// Credenciales del broker MQTT (pon NULL si no es necesario)
const char* MQTT_username = "REEMPLAZAR_CON_NOMBRE_DE_USUARIO_MQTT";
const char* MQTT_password = "REEMPLAZAR_CON_CONTRASEÑA_MQTT";
// Cambia la variable a la dirección IP de tu Raspberry Pi, para que se conecte a tu broker MQTT
const char* mqtt_server = "DIRECCION_IP_DE_TU_BROKER";
// Por ejemplo
// const char* mqtt_server = "192.168.1.106";
// Inicializa el espClient. Debes cambiar el nombre espClient si tienes varias ESP ejecutándose en tu sistema de automatización del hogar
WiFiClient espClient;
PubSubClient client(espClient);
// Sensor DHT - GPIO 5 = D1 en la placa ESP-12E NodeMCU
const int DHTPin = 5;
// Lámpara - LED - GPIO 4 = D2 en la placa ESP-12E NodeMCU
const int lamp = 4;
// Inicializa el sensor DHT
DHT dht(DHTPin, DHTTYPE);
// Variables auxiliares de temporizadores
long now = millis();
long lastMeasure = 0;
// Esta función conecta tu ESP8266 a tu enrutador
void setup_wifi() {
delay(10);
// Empezamos conectándonos a una red WiFi
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi conectado - Dirección IP de ESP: ");
Serial.println(WiFi.localIP());
}
// Esta función se ejecuta cuando algún dispositivo publica un mensaje en un tema al que tu ESP8266 está suscrito
// Cambia la función a continuación para agregar lógica a tu programa, para que cuando un dispositivo publique un mensaje en un tema al que
// Tu ESP8266 está suscrito, puedas hacer realmente algo
void callback(String topic, byte* message, unsigned int length) {
Serial.print("Mensaje llegó en el tema: ");
Serial.print(topic);
Serial.print(". Mensaje: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char) message[i]);
messageTemp += (char) message[i];
}
Serial.println();
// Si se recibe un mensaje en el tema de room/lamp, comprueba si el mensaje es on u off. Cambia el estado de la lámpara según el mensaje
if (topic == "room/lamp") {
Serial.print("Cambiando lámpara de la habitación a ");
if (messageTemp == "on") {
digitalWrite(lamp, HIGH);
Serial.print("Encendido");
} else if (messageTemp == "off") {
digitalWrite(lamp, LOW);
Serial.print("Apagado");
}
}
Serial.println();
}
// Esta función vuelve a conectar tu ESP8266 al broker MQTT
// Cambia la función a continuación si deseas suscribirte a más temas con tu ESP8266
void reconnect() {
// Bucle hasta que nos volvamos a conectar
while (!client.connected()) {
Serial.print("Intentando conexión MQTT...");
// Intenta conectar
/*
PUEDES NECESITAR CAMBIAR ESTA LÍNEA, SI TIENES PROBLEMAS CON MÚLTIPLES CONEXIONES MQTT
Para cambiar el ID del dispositivo ESP, deberás dar un nuevo nombre al ESP8266.
Así es como luce:
if (client.connect("ESP8266Client")) {
Puedes hacerlo así:
if (client.connect("ESP1_Oficina")) {
Luego, para el otro ESP:
if(client.connect("ESP2_Garaje")) {
Eso debería resolver tu problema de múltiples conexiones MQTT
*/
if (client.connect("ESP8266Client", MQTT_username, MQTT_password)) {
Serial.println("conectado");
// Suscríbete o vuelve a suscribirte a un tema
// Puedes suscribirte a más temas (para controlar más LEDs en este ejemplo)
client.subscribe("room/lamp");
} else {
Serial.print("falló, rc=");
Serial.print(client.state());
Serial.println(" intenta de nuevo en 5 segundos");
// Espera 5 segundos antes de intentar nuevamente
delay(5000);
}
}
}
// La función de configuración configura tus GPIOs de ESP como Salidas, inicia la comunicación serial con una velocidad de baudios de 115200
// Configura tu broker MQTT y establece la función de devolución de llamada
// La función de devolución de llamada es la que recibe los mensajes y realmente controla los LEDs
void setup() {
pinMode(lamp, OUTPUT);
dht.begin();
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
// Para este proyecto, no es necesario cambiar nada en la función de bucle. Básicamente asegura que tu ESP est
¡Buena combinación de herramientas para proyectos IoT! Me ayudó a comprender mejor cómo publicar y suscribirse utilizando MQTT en Node-RED con ESP8266. ¡Gracias por la guía!
¡Qué buen tutorial! Me ha servido mucho para entender cómo funciona la comunicación entre el ESP8266 y Node-RED utilizando MQTT.¡Gracias por el aporte!
¡Excelente explicación! Me parece genial la manera en que detallas el proceso de publicar y suscribirse utilizando MQTT en Node-RED con ESP8266. ¡Gracias por compartir tus conocimientos!
¡Interesante combinación de tecnologías! Definitivamente voy a probarlo en mi próximo proyecto. ¡Gracias por compartir la información!