Monitoring Sensor DHT22 Dengan Platfom MQTT

            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("Publish message :  "); // mencetak data sensor ke serial monitor
    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