ESP8266 & Broker Publico MQTT mosca.io & 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, estan disponibles apara conectar desde cualquier cliente MQTT en este caso utilizaremos Mosca.io, el cual tiene dashboard para visualizar conexiones MQTT y web sockets, dado que es publico se deben tener unas consideraciones que veremos mas abajo.

Fuente: Public MQTT Brokers

Hemos encontrado informacion muy poca sobre el broker publico y hemos asumido que hace parte del proyecto mosca.io creado por mcollina, este broker MQTT descargable basado en nodejs

Pagina Oficial: mosca.io

Dashboard MQTT: Suponemos que al parecer no tiene,

Configuraciones Broker MQTT

Broker: test.mosca.io
TCP Port: 1883

Otros Broker publicos





Pruebas

Acontinuacion realizaremos 2 pruebas detalladas:

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

Node-RED

Instalacion de Plataforma Node-Red

Conexion con Broker MQTT Mosca.io desde Node-RED

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

 

Conexion Broker MQTT Mosca.io 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 Mosca.io y Node-RED instalado en la red local solicita el valor de temperatura y grafica en Node-RED Dashboard.





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 = "test.mosca.io"; /// 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 técnicamente el broker es publico no realizamos aplicaciones que esten constantemente conectada a este broker, y dado que es publico gratuito desconocemos los aspectos legales de uso.

Solo realizamos pruebas rapidas y dado que no tiene dashboard desconocemos detalles especificaos sobre el broker, asumimos que pertenece al proyecto mosca.io de antemano gracias por la colaboracion a la comunidad.

Otros Broker publicos

Referencias

 





 

 

Deja una respuesta