ESP8266 & Public Broker MQTT mosca.io & Node-RED

The MQTT protocol has taken great strength in recent years since it is simple, safe, practical and lightweight perfect for IoT and M2M applications.

Thanks to the contribution of developers and developers of MQTT applications, there are public MQTT Broker for tests, are available to connect from any MQTT client in this case will use Mosca.io, which has dashboard to view MQTT connections and web sockets, given Which is public should have some considerations that we will see below.

Source: Public MQTT Brokers

We have found very little information about the public broker and we have assumed that it is part of the project mosca.io created by mcollina, this broker MQTT downloadable based on nodejs

Oficial Website: mosca.io

Dashboard MQTT: We assume that apparently has not.

MQTT Broker Configurations

Broker: test.mosca.io
TCP Port: 1883





Other publics Broker’s

Tests

Acontinuacion will perform 2 detailed tests:

  1. Connection with Broker MQTT mosca.io from Node-RED.
  2. Connection Broker MQTT mosca.io with ESP8266 & Node-RED.

 

Connection with Broker MQTT Mosca.io from Node-RED

Using Node-RED previously installed on a local server in my network, we will make the MQTT connection with Mosca.io to validate the connection from any MQTT client.

 

Connection Broker MQTT Mosca.io with ESP8266 & Node-RED

In this case the module ESP8266 12E NodeMCU configured as client MQTT read a temperature sensor DS18B20 Protocol (Onewire) sends the temperature via MQTT to the Broker Mosca.io and Node-RED installed in the local network requests the temperature value And graph in Node-RED Dashboard.





Arduino IDE Code

The ESP8266 module is configured as an MQTT client and periodically reads the temperature of the DS18B20 sensor, connected to the D4 pin (Gpio 02), fed at 5v, with its respective recommended resistance in the maxim datasheet.

Requires libraries:

  • 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://pdacontrolen.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); 
}

Materials and where to buy

Conclusions y recommendations

We consider that although technically the broker is public we do not realize applications that are constantly connected to this broker, and since it is free public we do not know the legal aspects of use.

We only do fast tests and since it has no dashboard we do not know specific details about the broker, we assume that it belongs to the mosca.io project. I thank you in advance for the collaboration to the community.

Other publics Broker’s

References

 





 

 

Leave a Reply