MQTT awalnya dikembangkan oleh IBM pada tahun 1999 untuk melakukan monitoring terhadap sebuah pipa minyak yang ada di suatu tempat yang jauh dan sulit dijangkau. Tujuan dari proyek ini adalah untuk mempunyai sebuah protocol, yang sangat bandwidth-efficient dan mengonsumsi tenaga batere se-sedikit mungkin, hal ini karena perangkat terkoneksi melalui jaringan satelit yang sangat mahal pada jaman itu.
MQTT (Message Queuing Telemetry Transport) protokol merupakan sebuah protokol yang berjalan diatas stack TCP/IP dan dirancang khusus untuk machine to machine yang tidak memiliki alamat khusus. Maksud dari kata tidak memiliki alamat khusus ini seperti halnya sebuah arduino, raspi atau device lain yang tidak memiliki alamat khusus.
Sistem kerja MQTT menerapkan Publish dan Subscribe data. Berbeda dengan HTTP yang menggunakan konsep
request/response.
Dan pada penerapannya, device akan terhubung pada sebuah Broker dan mempunyai suatu Topic tertentu.
Broker pada MQTT berfungsi untuk menghandle data publish dan subscribe dari
berbagai device, bisa diibaratkan sebagai server yang memiliki alamat IP
khusus. Beberapa contoh dari Broker yang ada seperti Mosquitto, HiveMQ dan
Mosca.
Publish merupakan cara suatu device untuk mengirimkan datanya ke subscribers.
Biasanya pada publisher ini adalah sebuah device yang terhubung dengan
sensor tertentu.
Subscribe merupakan cara suatu device untuk menerima berbagai macam data dari
publisher. Subscriber dapat berupa aplikasi monitoring sensor dan
sebagainya, subscriber ini yang nantinya akan meminta data dari
publisher.
Topic seperti halnya pengelompokan data disuatu kategori tertentu. Pada sistem
kerja MQTT protokol ini, topic bersifat wajib hukumnya. Pada setiap
transaksi data antara Publisher dan Subscriber harus memiliki suatu topic
tertentu.
Oke setelah kita sudah mengetahui konsep dasar MQTT. Pada kali ini kita akan membuat monitoring data sensor DHT22 dengan IOT melalui platfom MQTT.
Langsung saja kita rangkai projek seperti di bawah ini.
Lalu masukan program di bawah ini lalu upload :
#include "DHT.h" // include library dht
#define DHTPIN D2 // pin
dht
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <ESP8266WiFi.h> // library esp8266
#include
<PubSubClient.h> //library mqtt
// koneksi wifi
const char* ssid = "z";
const char* password =
"a1b2c3d4e5";
const char* mqtt_server =
"broker.mqtt-dashboard.com";
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);
//
menghubungkan ke jaringan WiFi
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
dht.begin();
while (WiFi.status() !=
WL_CONNECTED) { // ketika wifi tidak terkoneksi maka Ulangi sampai
terhubung kembali
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address:
");
Serial.println(WiFi.localIP());
}
void
callback(char* topic, byte* payload, unsigned int length) { // broker
penghubung publish and subribe
Serial.print("Message arrived
[");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// jika data sudah di send or recevie
maka led akan menyala
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, HIGH);
} else {
digitalWrite(BUILTIN_LED, LOW);
}
}
void reconnect() {
// jika belum terkoneksi, Ulangi sampai
terhubung kembali
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
//
mengambil client ID secara acak
String clientId =
"ESP8266Client-";
clientId +=
String(random(0xffff), HEX);
// Attempt to
connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
//
Setelah terhubung, publikasikan pengumuman
client.publish("testtopic/2","CEK");
// ... and resubscribe
client.subscribe("testtopic/1");
} 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);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
int t = dht.readTemperature();
if
(!client.connected()) {
reconnect();
}
client.loop();
unsigned long now =
millis();
if (now - lastMsg > 2000) {
lastMsg = now;
value++;
snprintf (msg, MSG_BUFFER_SIZE, "Temperature = %ld°C", t);
client.publish("testtopic/2", msg); // mem-publish data sensor ke mqtt
broker web socket
Serial.print(t);
Serial.println("*C");
delay(5000);
}
}
Setelah itu buka mqtt web socket client
http://www.hivemq.com/demos/websocket-client/
Lalu koneksikan dan add new topic subscription dengan nama testtopic/2 untuk me-monitoring data sensor. Jika ingin mengirim pesan ke user add new topic subscription dengan nama testtopic/1 lalu publish kemudian Hasilnya dapat di lihat pada serial monitor.
Hasil akhir dapat di lihat pada vidio di bawah ini.
Sekian terima kasih dan Selamat mencoba😁
0 Comments