MQTT Library

Community guides and tutorials
Post Reply
User avatar
Jasin
Posts: 1
Joined: Wed Jan 30, 2019 8:35 am

MQTT Library

Post by Jasin » Wed Jan 30, 2019 10:49 am

There is an MQTT library compatible with Controllino MAXI and MEGA (Must provide a network implementation).
It can be installed via Library Manager in Arduino IDE see:
Image

After installing the library it is possible to use MQTTClient class:

Code: Select all

MQTTClient client;
MQTT client has to be initialized ie:

Code: Select all

client.begin("broker.shiftr.io", net);
broker.shiftr.io is a free service which provides a rich publish & subscribe communication infrastructure.
net is initialized EthernetClient connection.

Then it is possible to Register a handler for incoming messages

Code: Select all

client.onMessage(messageReceived);
messageReceived is a function, that will be called whenever a message is received from the topic. The function must have two string parameters topic and message ie:

Code: Select all

void messageReceived(String &topic, String &payload) 
{
  Serial.println("incoming: " + topic + " - " + payload);
}
Method for connecting the client with a username and password specified:

Code: Select all

client.connect("Controllino", "try", "try")
Methods for Publish/Subscribe to broker are:

Code: Select all

client.publish("/controllino.biz", "Hello Controllino");
client.subscribe("/controllino.biz");
When Example sketch is used, the communication can be seen on web pages of Shiftr.io:
Image

And on Controllino terminal:
Image

Example sketch:

Code: Select all

#include <SPI.h>
#include <Controllino.h>  /* Usage of CONTROLLINO library allows you to use CONTROLLINO_xx aliases in your sketch. */
#include <Ethernet.h>
#include <MQTT.h> /* by Joël Gähwiler. Have to be installed via Library Manager. See https://github.com/256dpi/arduino-mqtt */

/*
  CONTROLLINO - Demonstration of MQTT protocol usage, Version 01

  Based on example code by Joël Gähwiler. See https://github.com/256dpi/arduino-mqtt .

 You can check on your device after a successful
 connection here: https://shiftr.io/try .
  
  Compatible with CONTROLLINO MAXI, MAXI Automation and MEGA.
  IMPORTANT INFORMATION!
  Please, select proper target board in Tools->Board->Controllino MAXI/MEGA before Upload to your CONTROLLINO.
  
  (Refer to https://github.com/CONTROLLINO-PLC/CONTROLLINO_Library if you do not see the CONTROLLINOs in the Arduino IDE menu Tools->Board.)
  
  Created 29 Jan 2019
  by Jasin
  https://controllino.biz/
  
  Check https://github.com/CONTROLLINO-PLC/CONTROLLINO_Library for the latest CONTROLLINO related software stuff.
  Visit our forum here: https://forum.controllino.biz/ 
*/



byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip[] = {192, 168, 16, 177};  // <- change to match your network

EthernetClient net;
MQTTClient client;

unsigned long lastMillis = 0;

void connect() {
  Serial.print("connecting...");
  while (!client.connect("Controllino", "try", "try")) {
    Serial.print(".");
    delay(1000);
  }

  Serial.println("\nconnected!");

  client.subscribe("/controllino.biz");
  // client.unsubscribe("/hello");
}

void messageReceived(String &topic, String &payload) {
  Serial.println("incoming: " + topic + " - " + payload);
}

void setup() {
  Serial.begin(9600);
  Ethernet.begin(mac, ip);

  // Note: Local domain names (e.g. "Computer.local" on OSX) are not supported by Arduino.
  // You need to set the IP address directly.
  client.begin("broker.shiftr.io", net);
  client.onMessage(messageReceived);

  connect();
}

void loop() {
  client.loop();

  if (!client.connected()) {
    connect();
  }

  // publish a message roughly every second.
  if (millis() - lastMillis > 1000) {
    lastMillis = millis();
    client.publish("/controllino.biz", "Hello Controllino");
  }
}

/* 2019-01-29: The sketch was successfully tested with Arduino 1.8.5, Controllino Library 3.0.4 and CONTROLLINO MAXI. */

User avatar
ivan
Site Admin
Posts: 3
Joined: Thu Dec 13, 2018 12:41 pm

Re: MQTT Library

Post by ivan » Thu Jan 31, 2019 11:52 am

Hi Jasin, thanks a lot for your great tutorial! Well-written and easily understandable with all the pictures you provided.

Post Reply