ESP8266 & Broker Publico MQTT HiveMQ & Node-RED

El protocolo MQTT ha tomado gran fuerza los ultimos años dado que es sencillo, seguro, practico y ligero perfecto para aplicaciones IoT y M2M.

Gracias a la contribucion de creadores y desarrolladores de aplicaciones MQTT, existen en internet Broker MQTT  publicos para pruebas de control y monitoreo desde internet, estan disponibles para conectar desde cualquier cliente MQTT en este caso utilizaremos HIVEMQ, el cual  tiene dashboard para visualizar conexiones MQTT y web sockets, dado que es publico se deben tener unas consideraciones que veremos mas abajo.

Pagina Oficial: HiveMQ

Dashboard MQTT: HiveMQ

Configuraciones Broker MQTT

Broker: broker.hivemq.com
TCP Port: 1883
Websocket Port: 8000

Otros Broker publicos





Pruebas

Acontinuacion realizaremos 2 pruebas:

  1. Conexion con Broker MQTT HIVEMQ desde Node-RED.
  2. Conexion Broker MQTT HIVEMQ con ESP8266 & Node-RED.

 Conexion con Broker MQTT HIVEMQ desde Node-RED

Parametros Node-RED

Utilizando Node-RED instalado previamente en un servidor local en mi red, realizaremos la conexion MQTT con HIVEMQ para validar la conexion desde cualquier cliente MQTT.

Node-RED

Instalacion de Plataforma Node-Red

 

Prueba





Conexión Broker MQTT HIVEMQ con ESP8266 & Node-RED

En este caso el Modulo ESP8266 12E NodeMCU configurado como cliente MQTT realiza la lectura un sensor de temperatura DS18B20 Protocolo (Onewire) realiza el envio la temperatura via MQTT al Broker HIVEMQ y Node-RED instalado en la red local solicita el valor de temperatura y gráfica en Node-RED Dashboard.

Topico MQTT 

«temperature/PDAControl/sensor»

Mensaje

valor temperatura ejemplos «28.9»

Arquitectura MQTT 

Video Completo Explicado ESP8266 HiveMQ & Node-RED

Pruebas similares

  1. Tutorial ESP8266 DS18B20 Temperatura Node-RED MQTT (Mosquitto) IoT
  2. Tutorial ESP8266 Node-RED Granafa InfluxDB MQTT
  3. Tutorial Amplificador Audio PAM8302A ESP8266 Node-RED MQTT
  4. Plataforma Node-RED

Codigo Arduino IDE

El Modulo ESP8266 se configura como cliente MQTT y realiza la lectura periodica de la temperatura del sensor DS18B20, conectada al pin D4 (Gpio 02), alimentado a 5v, con su respectiva resistencia recomendada en el datasheet de maxim.

Requiere las librerias :

  • PubSubClient.h
  • OneWire.h
  • DallasTemperature.h
/* MQTT Client Temperature Onewire
* More information about projects PDAControl 
* PDAControl English http://pdacontrolen.com 
* Mas informacion sobre proyectos PDAControl
* PDAControl Espanol http://pdacontroles.com 
* Channel Youtube https://www.youtube.com/c/JhonValenciaPDAcontrol/videos 
*/


#include < ESP8266WiFi.h > 
#include < PubSubClient.h > 
 
#include < OneWire.h > 
#include < DallasTemperature.h >

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2 // pin 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);


// Update these with values suitable for your network.

const char* ssid = "************";
const char* password = "************";
const char* mqtt_server = "broker.hivemq.com"; /// MQTT Broker
int mqtt_port = 1883;

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup() { 
 Serial.begin(115200);
 // Start up the library
 sensors.begin();
 
 setup_wifi();
 client.setServer(mqtt_server, mqtt_port);
 client.setCallback(callback);

 Serial.println("Connected ");
 Serial.print("MQTT Server ");
 Serial.print(mqtt_server);
 Serial.print(":");
 Serial.println(String(mqtt_port)); 
 Serial.print("ESP8266 IP ");
 Serial.println(WiFi.localIP()); 
 Serial.println("Modbus RTU Master Online");


 
}

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.println("WiFi connected");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
 Serial.print("Message arrived [");
 Serial.print(topic);
 Serial.print("] ");
 for (int i = 0; i < length; i++) {
 Serial.print((char)payload[i]);
 }
 Serial.println();
 
}
void reconnect() {
 // Loop until we're reconnected
 while (!client.connected()) {
 Serial.print("Attempting MQTT connection...");
 // Attempt to connect
 if (client.connect("ESP8266Client")) {

 Serial.println("connected");
 // client.subscribe("event");
 } else {
 Serial.print("failed, rc=");
 Serial.print(client.state());
 Serial.println(" try again in 5 seconds");
 // Wait 5 seconds before retrying
 delay(5000);
 }
 }
}
void loop() {
 
 sensors.requestTemperatures();
 float celsius = sensors.getTempCByIndex(0);
 Serial.println(sensors.getTempCByIndex(0));
 
 char temperaturenow [15];
 dtostrf(celsius,7, 3, temperaturenow); //// convert float to char 
 client.publish("temperature/PDAControl/sensor", temperaturenow); /// send char 
 
 if (!client.connected()) {
 reconnect();

 }
 client.loop();

 delay(10000); 
}

Materiales y donde comprar

Conclusiones y Recomendaciones

Consideramos que aunque tecnicamente el broker es publico no realizamos aplicaciones que esten constantemente conectada a este broker, y dado que es publico gratuito HIVE tiene varios aspectos legales que se deben tener en cuenta.

Solo realizamos pruebas rapidas, aunque cabe notar que han montados sus aplicaciones IoT con este broker sin ningun inconveniente aparente el servicio esta activo y es publico.

Con un broker en la Nube (intenet) desde cualquier parte podríamos conectar nuestros dispositivos y aplicaciones sin limites de direcciones IP y demas restricciones, actualmente investigo planes y servicios de servidores MQTT.

En proximos tutoriales probaremos otros servidores MQTT publicos e interaciones con FRED (Node-RED) .

Otros Broker publicos

Referencias





 

 

Deja una respuesta