Mosquitto (MQTT broker) Demo

MQTT stands for Message Queuing Telemetry Transport which is an ISO standard (ISO/IEC PRF 20922) publish-subscribe-based "lightweight" messaging protocol for use on top of the TCP/IP protocol. It is designed for connections to remote locations where a "small code footprint" is required or the network bandwidth is limited. The publish-subscribe messaging pattern requires a message broker. The broker is responsible for distributing messages to interested clients based on the topic of a message. Andy Stanford-Clark and Arlen Nipper of Cirrus Link Solutions authored the first version of the protocol in 1999 [1].

In this demo, I work on Mosquitto platform (An Open source MQTT v3.1/v3.1.1 Broker)

The picture shows the basic MQTT protocol. MQTT broker - Mosquitto is installed into a Gateway - Kura based (Hardware: Raspberry Pi 2; OS: Raspbian). The clients - Publisher/Subscriber connect to MQTT broker via WiFi which is established by the PC. The Subscriber is an Arduino board with WiFi module that subscribes a Topic (for example "Node01") to receive a message. The Publisher is a smartphone running MQTT client software that will publish a message to a topic (for example "Node01").


  • Hardwares: Raspberry Pi 2 (WiFi dongle); Arduino with WiFi module (Adafruit Huzzah Esp8266); Smartphone (Android, IOS)

* Step 1: Setup Kura into Raspberry Pi

The picture shows the Gateway hardware which consists of Raspberry Pi and WiFi dongle.

Follow this link for installing Kura into Raspberry Pi:

We setup the Raspbery Pi in the Access Point mode for providing WiFi connection:

* Step 2: Install Mosquitto broker on Raspberry Pi

We use Mosquitto platform as a MQTT broker running on Rapsberry Pi. It provides MQTT protocol for our sensor network system. For more information about MQTT protocol; please visit this page: what is MQTT and how does it work

To install Mosquitto, follow these steps:


sudo apt-key add mosquitto-repo.gpg.key

Then make the repository available to apt:

cd /etc/apt/sources.list.d/

Then one of the following, depending on which version of debian you are using:

sudo wget

Then update apt information:

sudo apt-get update

And discover what mosquitto packages are available:

apt-cache search mosquitto

Or just install mosquitto broker and clients tool:

sudo apt-get install mosquitto mosquitto-clients python-mosquitto

Stop the Server

sudo /etc/init.d/mosquitto stop

Configuring and Starting the Mosquitto Server

sudo nano /etc/mosquitto/mosquitto.conf

The File Should Look as follows

# Place your local configuration in /etc/mosquitto/conf.d/
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/

persistence true
persistence_location /var/lib/mosquitto/

log_dest topic

log_type error
log_type warning
log_type notice
log_type information

connection_messages true
log_timestamp true

include_dir /etc/mosquitto/conf.d

Starting the Server

sudo /etc/init.d/mosquitto start

For more information, please follow this link:

* Test mosquitto broker

Open up two more terminal windows.

In Terminal window (subscriber) 1 type:

mosquitto_sub -d -t hello/world

In Terminal window 2 (publisher) type:

mosquitto_pub -d -t hello/world -m "Hello from Terminal window 2!"


* Step 3: Install MQTT demo code for Arduino

The Huzzah esp8266 board will receive the message from the phone in order to control a LED (connected to pin #0). The LED will be turned off if Huzzah receives message "a" and turn on with others messages.

There are many MQTT libraries for Arduino platform. For this demo, I use MQTT library created by Joel Gahwiler (available in Github)

It is installed into Ardafruit Huzzah Esp8266 board.

In the sketch, we need to define these parameters:

"firstly, we need to connect Arduino Huzzah to the Gateway via WiFi connection which is established by the Gateway"

ssid = "YOUR_WIFI_NAME" //WiFi connection established from the Gateway


Then replace "" by for MQTT broker

Finally, define subscribe topic client.subscribe("node01"); for receiving message payload from the publisher.

Full code here:

#include <ESP8266WiFi.h>

#include <MQTTClient.h>

const char *ssid = "agrinode";

const char *pass = "12345678";

WiFiClient net;

MQTTClient client;

unsigned long lastMillis = 0;

void connect(); // <- predefine connect() for setup()

void setup() {


  WiFi.begin(ssid, pass);

  client.begin("", net);




void connect() {

 ` Serial.print("checking wifi...");

` while (WiFi.status() != WL_CONNECTED) {`

 `   Serial.print(".");`

  `  delay(1000);`

 ` }`

 ` Serial.print("\nconnecting...");`

  `while (!client.connect("arduino", "try", "try")) {`

  `  Serial.print(".");`

   ` delay(1000);`

 ` }`


 ` client.subscribe("node01");`

  `// client.unsubscribe("/example");`


void loop() {


  delay(10); // <- fixes some issues with WiFi stability

  if(!client.connected()) {



  // publish a message roughly every second.

  if(millis() - lastMillis > 1000) {

   lastMillis = millis();

    client.publish("/hello", "world");



void messageReceived(String topic, String payload, char * bytes, unsigned int length) {

  Serial.print("incoming: ");


  Serial.print(" - ");



  if (payload=="a"){digitalWrite(0,HIGH);}

  else digitalWrite(0,LOW);


* Step 4: Install MQTT client software for Android phone

There are many softwares available for MQTT protocol testing. I use MyMQTT for my Android phone.

For "Setting": we need MQTT broker host (it is the Gateway IP: and "Topic" for publishing message (it is: Node01).

For publishing a message: navigate to "Publish" button -> then fill in the Topic (Node01) and message.

* Demo Video