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:
- Arduino MKR1000 development board @ 1 unit
- Arduino IDE
- PC @ 1 unit
- 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.
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.
Lalu, tambahkan subscription dengan mengklik add new topic Subcription. Maka akan muncul seperti pada gambar dibawah.
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.
Leave A Comment?