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:
- Conexion con Broker MQTT Mosca.io desde Node-RED.
- Conexion Broker MQTT Mosca.io con ESP8266 & Node-RED.
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
- Public mqtt Broker
- Información completa Node-RED
- Informacion completa MQTT
- Tutorial ESP8266 DS18B20 Temperatura Node-RED MQTT (Mosquitto) IoT
- Tutorial ESP8266 Node-RED Granafa InfluxDB MQTT
- Tutorial Amplificador Audio PAM8302A ESP8266 Node-RED MQTT