Menjelajahi Konektivitas IoT: Menerapkan MQTT dengan Wemos D1 untuk Komunikasi yang Mulus

Implementasi MQTT dengan Wemos D1


        Dalam era Internet of Things (IoT), koneksi perangkat yang handal dan efisien sangat penting untuk keberhasilan proyek pintar. MQTT (Message Queuing Telemetry Transport) adalah protokol komunikasi yang sangat populer dan dapat diandalkan untuk proyek Internet of Things yang memungkinkan perangkat Internet of Things berkomunikasi secara real-time, mengirim dan menerima data dengan kecepatan dan efisiensi yang tinggi sambil menggunakan jumlah daya yang relatif rendah.
        Dalam artikel ini, kami akan melakukan implementasi MQTT dengan menggunakan Wemos D1, sebuah mikrokontroler yang berbasis ESP8266. Wemos D1 adalah pilihan yang populer di komunitas IoT berkat kemampuannya untuk terhubung ke jaringan Wi-Fi dan kontrol yang mudah dengan Arduino IDE. Dalam tutorial ini, kami akan membahas konfigurasi dan penggunaan MQTT dengan Wemos D1. Ini akan memungkinkan berbagai aplikasi pintar, seperti pengontrolan rumah cerdas dan monitoring lingkungan. Mari kita lihat bagaimana mengintegrasikan protokol MQTT dengan Wemos D1 untuk meningkatkan konektivitas dan efisiensi proyek IoT Anda.

Pengenalan MQTT (Message Queuing Telemetry Transport)

        MQTT (Message Queuing Telemetry Transport) adalah protokol komunikasi ringan dan berbasis pesan yang dirancang khusus untuk proyek-proyek Internet of Things (IoT). Protokol ini memungkinkan perangkat IoT untuk saling berkomunikasi secara efisien dan andal melalui jaringan yang tidak stabil.

Publish-Subscribe Model

        MQTT menggunakan model publish-subscribe di mana perangkat IoT berperan sebagai penerbit (publisher) dan/atau pelanggan (subscriber). Penerbit mengirimkan pesan ke topik (topic), dan pelanggan yang berlangganan pada topik tersebut menerima pesan tersebut. Model ini memungkinkan komunikasi yang bersifat one-to-many, memungkinkan perangkat untuk berkomunikasi dengan sejumlah besar perangkat lainnya secara simultan.

Quality of Service (QoS) Levels

MQTT mendukung tiga tingkat kualitas Layanan:
  • QoS 0: Pengiriman pesan sekali tanpa konfirmasi.
  • QoS 1: Pengiriman pesan setidaknya sekali dengan konfirmasi penerimaan.
  • QoS 2: Pengiriman pesan tepat sekali dengan konfirmasi penerimaan dan penghindaran duplikasi.

Wemos D1

        Wemos D1 adalah salah satu varian dari papan pengembangan mikrokontroler yang sangat populer, terutama dalam proyek-proyek IoT (Internet of Things).

Spesifikasi Wemos D1

Wemos D1 R32

Berikut adalah detail spesifikasinya :
  • Wifi Protocol : 802.11 b/g/n (802.11n up to 150 Mbps)
  • Frekuensi : 2.4 GHz~2.5 GHz
  • Bluetooth : v4.2 BR/EDR and BLE with 97 dBm sensitivity
  • SPI Flash : 4MBit
  • Internal Clock : 40Mhz
  • Chip Op Voltage : 2.7~3.6V DC
  • Module Op Voltage: 5V DC via MicroUSB port
  • Op Current: 80mA
  • Minimum USB Current: 500mA
  • On-chip Sensor: Hall Sensor
  • Audio: CVSD and SBC

Memulai Implementasi MQTT dengan Wemos D1 R32

Konfigurasi Arduino IDE untuk Wemos D1

    Untuk menggunakan Arduino IDE untuk memprogram Wemos D1 R32 ada beberapa hal yang perlu dilakukan, berikut diantaranya;
  1. Download dan install Arduino IDE Download Disini (Sesuaikan dengan OS device)
  2. Setelah terinstal, buka software Arduino IDE.
  3. Pilih dan klik File -> preferences.

  4. Pada bagian “Additional Boards Manager URL’s” masukan link dibawah berikut ini , lalu klik ok.
     http://arduino.esp8266.com/stable/package_esp8266com_index.json 


  5. Setelah itu, klik “Boards Manager” pada menu Tools -> board -> boards manager.


  6. Ketikan pada bar search "esp32" -> esp32 by Espressif Systems


  7. Kemudian klik install, dan tunggu beberapa detik sampai proses selesai lalu close.

  8. Setelah instalasi selesai,kembali ke pilihan board pilih "ESP32 Dev Module".
    Pilih menu Tools -> board -> ESP32 Arduino -> ESP32 Dev Module.

    Karena Wemos D1 Mini ini mengunakan Chip CH340, maka kamu harus menginstall driver chip CH340 di devicemu agar bisa kamu pakai, download dan install drivernya disini .

Install Library PubSubClient

     Kita akan melanjutkan dengan menginstal perpustakaan klien MQTT PubSubClient. Dikembangkan oleh Nick O'Leary, PubSubClient adalah pustaka klien MQTT kecil yang dirancang untuk proyek berbasis Arduino dan memungkinkan klien untuk mengirimkan pesan publikasi atau berlangganan dengan server MQTT. Ini membuat komunikasi MQTT lebih mudah dan memungkinkan pertukaran data yang efektif dalam aplikasi IoT berbasis Arduino.

Untuk menginstal perpustakaan PubSubClient, ikuti prosedur ini:
  1. Buka Arduino IDE, lalu pilih "Sketch" di pilihan menu.
  2. Pilih "Manage Libraries" pada menu Include Libary -> Manage Libraries.
  3. Pada Library Manager, ketik "PubSubClient" ke dalam bar pencarian.
  4. Lihat hasil dan pilih library "PubSubClient" oleh Nick O'Leary dan klik "Install".

        Anda akan berhasil menginstal perpustakaan PubSubClient ke dalam IDE Arduino Anda jika Anda mengikuti langkah-langkah ini.

Menghubungkan Koneksi MQTT Di Wemos D1 R32 (ESP32 based Board)

  1. Buka Arduino IDE, pastikan select board "ESP32 Dev Module" pada menu Tools -> Board.
  2. Import library WiFi dan PubSubClient, library WiFi digunakan untuk membuat koneksi dengan jaringan WiFi, sedangkan library PubSubClient memungkinkan Wemos terhubung ke broker MQTT.
    #include <WiFi.h> // Import library WiFi
    #include <PubSubClient.h> // Import library PubSubClient
  3. Masukkan SSID WiFi Name dan Password WiFi  kamu serta MQTT broker yang akan di sambungkan.
    Untuk postingan blog ini, saya menggunakan broker MQTT publik gratis di  broker.emqx.io 

    MQTT Broker Info
    Server: broker.emqx.io
    TCP Port: 1883
    WebSocket Port: 8083
    SSL/TLS Port: 8883
    Secure WebSocket Port: 8084

    Parameter berikut harus dikonfigurasi: kata sandi dan nama jaringan Wi-Fi, alamat dan port broker MQTT, dan topik ke emqx/esp32.

    // WiFi
    const char *ssid = "xxxxx"; // Masukan nama WiFi kamu
    const char *password = "xxxxx";  // Masukan Password WiFi kamu
    
    // MQTT Broker
    const char *mqtt_broker = "broker.emqx.io";
    const char *topic = "emqx/esp32";
    const char *mqtt_username = "emqx";
    const char *mqtt_password = "public";
    const int mqtt_port = 1883;
  4. Buat Serial.println untuk memberikan feedback menampilkan hasil program dan membuat koneksi ke WiFi.
    // Set software serial baud to 115200;
    Serial.begin(115200);
    // Connecting to a Wi-Fi network
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Connecting to WiFi..");
    }
    serial baud 115200 merupakan baud rate yang umum pada perangkat ESP32

  5. Untuk menghubungi broker MQTT, gunakan PubSubClient.

    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
        String client_id = "esp32-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
            Serial.println("Public EMQX MQTT broker connected");
        } else {
            Serial.print("failed with state ");
            Serial.print(client.state());
            delay(2000);
        }
    }

  6. Publish Messages & Subscribe
    Setelah koneksi ke broker MQTT berhasil dibuat, ESP32 akan menerbitkan pesan ke topik emqx/esp32 dan kemudian berlangganan topik emqx/esp32.
    // publish and subscribe
    client.publish(topic, "Hi, I'm Wemos D1 R32 ^^");
    client.subscribe(topic);
  7. Terima Pesan MQTT
    Konfigurasikan fungsi callback untuk mencetak nama topik ke port serial dan mencetak pesan yang diterima dari topik emqx/esp32.

    void callback(char *topic, byte *payload, unsigned int length) {
        Serial.print("Message arrived in topic: ");
        Serial.println(topic);
        Serial.print("Message:");
        for (int i = 0; i < length; i++) {
            Serial.print((char) payload[i]);
        }
        Serial.println();
        Serial.println("-----------------------");
    }

Full Code

Berikut adalah full code dari langkah-langkah yang sudah dijelaskan :

#include <WiFi.h>
#include <PubSubClient.h>

// WiFi
const char *ssid = "xxxxx"; // Enter your Wi-Fi name
const char *password = "xxxxx";  // Enter Wi-Fi password

// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "emqx/esp32";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    // Set software serial baud to 115200;
    Serial.begin(115200);
    // Connecting to a WiFi network
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Connecting to WiFi..");
    }
    Serial.println("Connected to the Wi-Fi network");
    //connecting to a mqtt broker
    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
        String client_id = "esp32-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
            Serial.println("Public EMQX MQTT broker connected");
        } else {
            Serial.print("failed with state ");
            Serial.print(client.state());
            delay(2000);
        }
    }
    // Publish and subscribe
    client.publish(topic, "Hi, I'm ESP32 ^^");
    client.subscribe(topic);
}

void callback(char *topic, byte *payload, unsigned int length) {
    Serial.print("Message arrived in topic: ");
    Serial.println(topic);
    Serial.print("Message:");
    for (int i = 0; i < length; i++) {
        Serial.print((char) payload[i]);
    }
    Serial.println();
    Serial.println("-----------------------");
}

void loop() {
    client.loop();
}


Running and Testing on Arduino IDE

  1. Upload kode ke mikrokontroler Wemos D1
    Untuk mengunggah kode lengkap menggunakan Arduino dan daya pada Wemos D1 R32, silakan ikuti langkah-langkah berikut:
    1. Koneksikan Wemos D1 ke komputer menggunakan kabel USB
    2. Buka Arduino IDE dan pilih board "Esp32 Dev Module" serta port yang sesuai dari menu "Tools".
    3. Copy dan paste full code ke Arduino IDE.
    4. Tekan tombol "Upload" untuk mengcompile dan upload kode ke mikrokontroler wemos D1.
    5. Setelah kode telah ter-upload, putuskan sambungan sumber power dari Wemos D1
    6. Sambungkan kembali sumber power Wemos D1.

  2.  Untuk memeriksa status koneksi ESP32, buka monitor serial dan atur laju baud ke 115200.



  3. Untuk berkoneksi dengan broker MQTT, gunakan klien MQTTX dan kirim pesan seperti HI, saya MQTTX ke Wemos D1.


  4. Anda akan melihat pesan yang diterbitkan oleh MQTTX di serial monitor.




Referensi

Komentar

Postingan populer dari blog ini

Memahami Langkah Demi Langkah: Tutorial Stepper Motor NEMA 23 dengan Wemos D1 untuk Proyek Elektronik Anda!