MQTT merupakan akronim dari Message Queueing Telemetry Transport. MQTT diciptakan
pada tahun 1999 oleh Dr. Andy Stanford-Clark dari IBM dan Arlen Nipper dari Arcom.
MQTT adalah salah satu protokol yang sering digunakan untuk keperluan Internet of Things
yang berjalan di atas TCP/IP dan bersifat Open Source. Sistem kerja MQTT menerapkan
konsep Publish dan Subscribe data, sehingga pada MQTT terdapat 4 komponen utama, yaitu
Publisher, Subscriber, Broker, dan Topic.
Publisher
Publisher mengirimkan pesan atau perintah dengan topik tertentu ke Broker
Subscriber
Subscriber menerima pesan dari Broker sesuai dengan topik yang di-subscribe
Broker
Broker menerima pesan dari Publisher dan meneruskannya ke Subscriber yang men-
subscriber topik sesuai dengan pesan tersebut
Topic
Setiap pesan yang ada pada konsep Publish dan Subscribe memiliki kategori yang
dinamakan dengan Topic
Protokol MQTT ini lebih sering digunakan untuk Internet of Things daripada HTTP, karena
pesan yang dikirim dan diterima sangat ringan, sehingga sangat cepat, bandwidth yang
dibutuhkan kecil, dan tidak membutuhkan daya yang besar. Selain itu, MQTT juga
memastikan pengiriman pesan dengan 3 Quality of Service, yaitu at most once, at least once,
dan exatcly once.
2. Setlah Aplikasi Terinstall tambahkan broker dengan data sebagai berikut, setlah itu klik icon save
7. Selamat anda telah berhasil mengirimkan text “coba” dari publiser NamaSatu ke subscriber
NamaSatu melalui broker broker.mqtt-dashboard.com
Aktifitas 1.2 : Membuat Subscriber dan Publisher pada kompenen yang berbeda
1. Edit komponen NamaSatu pada bagian Subscribe topic dari fromNamaSatu menjadi
fromNamaDua.
2. Coba kirimkan Text : “coba2” pada NamaSatu. Apa yang terlihat ?
3. Buat (tambahkan) komponen baru Text dengan data sebagai berikut:
5. Kirim text “coba3” pada NamaSatu, jika semuanya benar akan terlihat text “coba3” akan
muncul pada komponen NamaDua.
6. Kirim text “coba4” pada NamaDua , jika semuanya benar akan terlihat text “coba4” akan muncul
pada komponen NamaSatu.
7. Selamat anda telah membuat dua komponen(device) pada aplikasi berkomunikasi text melalu
broker.
MATERI 2: MQTT pada Komputer
Download dan install mqtt sesuai dengan OS: https://mosquitto.org/download/
1. Buka jendela cmd (subsriber) , dan masuk ke direktori tempat Install mosquitto
2. Tuliskan perintah sbb
mosquitto_sub.exe -h broker.mqtt-dashboard.com -t testNama1
1. Buka jendela cmd baru (publisher), dan masuk ke direktori tempat Install mosquitto
2. Tuliskan perintah sbb
mosquitto_pub.exe -h broker.mqtt-dashboard.com -t testzay -m tes
3. Lihat apa yang terjadi pada jendela cmd yang pertama. Jika semuanya benar maka akan terlihat
text coba 1 akan muncul di jendela cmd tersebut.
4. Selamat anda telah melakukan proses kirim data menggunakan MQTT pada komputer anda.
MATERI 3: MQTT pada Nodemcu esp8266
Aktifitas 3.1 : Instalasi Arduino dan Library esp8266
3. Untuk menginstall Library esp8266. Klik Preferences dan isi pada bagian
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Catatan : Perlu koneksi internet yang bagus untuk menambahkan library esp8266
5. Jika semuanya benar maka pada Tools Board akan terlihat lebih dari satu board sbb:
6. Install driver ch340 untuk komunikasi nodemcu dengan komputer
https://www.arduined.eu/ch340-windows-10-driver-download/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
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.mode(WIFI_STA);
WiFi.begin(ssid, password);
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("nama2", "hello world");
// ... and resubscribe
client.subscribe("nama1");
} 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() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED 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();
}
}
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
bool toggle;
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("nama2", "hello world");
// ... and resubscribe
client.subscribe("nama1");
} 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() {
pinMode(BUILTIN_LED, OUTPUT);
pinMode(0, INPUT_PULLUP);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
if (!client.connected()) { reconnect();
}
client.loop();
if(!digitalRead(0)) toggle=!toggle;
if(toggle) snprintf (msg, MSG_BUFFER_SIZE, "on");
else snprintf (msg, MSG_BUFFER_SIZE, "off");
client.publish("nama2", msg);
}
Pinout Nodemcu 12E (esp 8266)