Pengenalan MQTT

1. Apa itu MQTT?

MQTT adalah singkatan dari MQ Telemetry Transport yaitu sebuah protokol jaringan publish-subscribe yang dapat mengirimkan pesan antar perangkat, bersifat terbuka (open), berstandar ISO (ISO/IEC PRF 20922) dan berbobot ringan dan biasanya beroperasi pada TCP/IP.

https://en.wikipedia.org/wiki/MQTT

MQTT pada data telemetri berfungsi sebagai pengumpul data (broker) dari berbagai perangkat yang terhubung padanya.

2. Aplikasi MQTT pada Arduino IoT

Penerapan MQTT juga bisa diterapkan pada platform mikrokontroler mainstream contohnya Arduino. Terdapat banyak penyedia layanan MQTT gratis contohnya HiveMQ ( http://www.hivemq.com/demos/websocket-client) namun seperti pepatah mengatakan “ada harga ada barang” layanan MQTT gratis biasanya tidak aman (secure) karena data yang dikirim dan diterima tidak di-encrypt sama sekali sehingga orang lain dapat dengan mudah mengakses data kita dengan mudah. Berikut dibawah ini merupakan contoh pengaplikasian MQTT pada Arduino MKR1000.

Alat dan bahan yang dibutuhkan:

  1. Arduino MKR1000 development board @ 1 unit
  2. Arduino IDE
  3. PC @ 1 unit
  4. Koneksi WiFi

Upload program dibawah ini.

#include <WiFi101.h>
#include <PubSubClient.h>

// Update these with values suitable for your network.

const char* ssid = "SSID";
 // wifi name
const char* password = "PASSWORD";
 //wifi password
const char* mqtt_server = "broker.mqttdashboard.com";


WiFiClient MKRClient;
PubSubClient client(MKRClient);
//IPAddress IP(192,168,1,23);
IPAddress ReadIP;
long lastMsg = 0;
char msg[50];
int value = 0;

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(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  ReadIP = WiFi.localIP();
  Serial.println(ReadIP);
}

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();

  // Switch on the LED if an 1 was received as first character
  if ((char)payload[0] == '1') {
    digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
    // but actually the LED is on; this is because
    // it is active low on the ESP-01)
  } else {
    digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  }

}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "MKR1000Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    if (client.connect(clientId.c_str(),"mqtt_user","mqtt_password")) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish("outTopic", "hello world");
      // ... and resubscribe
      client.subscribe("RDD/inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setup() {
  //WiFi.config(IP);
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {

  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  long now = millis();
  if (now - lastMsg > 2000) {
    lastMsg = now;
    ++value;
    snprintf (msg, 50, "hello world #%ld", value);
    Serial.print("Publish message: ");
    Serial.println(msg);
    client.publish("RDD/outTopic", msg);
  }
}

Selanjutnya adalah akseslah http://www.hivemq.com/demos/websocket-client/ pada web browser. Maka akan muncul tampilan sebagai berikut.

HiveMQ MQTT dasboard

Lalu tekan Connect, maka bulatan merah akan berubah menjadi hijau yang menandakan HiveMQ telah tersambung.

Klik tanda panah kebawah (vv) pada subscriptions maka akan muncul seperti dibawah.

HiveMQ subscription

Lalu, tambahkan subscription dengan mengklik add new topic Subcription. Maka akan muncul seperti pada gambar dibawah.

Form topik subscription

Isilah test topic dengan “RDD/outTopic” dan QoS nya disetting 0. Lalu klik tombol Subscribe. Setelah diklik maka data akan muncul pada kolom messages seperti pada gambar dibawah. Jika tidak muncul coba klik tanda panah kebawah disamping kolom messages.

Was this article helpful?

Related Articles

Leave A Comment?