Tutorial Mengintegrasikan Mikrokontroler ESP32 ke Broker MQTT sebagai Publisher dan Subscriber

 

Implementasi MQTT pada mikrokontroler ESP32 akan melibatkan beberapa langkah. Berikut adalah langkah-langkahnya:

Instalasi Library pada Arduino IDE

Buka Arduino IDE dan pilih "Sketch" > "Include Library" > "Manage Libraries" Cari library "PubSubClient," dan instal library tersebut. 

Pengaturan Koneksi Wi-Fi dan Konfigurasi Broker MQTT

Buat atau buka proyek Arduino IDE untuk ESP32. Sisipkan kode untuk mengonfigurasi koneksi Wi-Fi. Anda perlu menyediakan SSID dan kata sandi Wi-Fi Anda. Berikut kode nya:

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

Kemudian untuk konfigurasi Broker, Anda perlu menyediakan alamat IP broker dan port (biasanya 1883 untuk MQTT). Berikut merupakan contoh kode nya:

// MQTT Broker (Anda dapat menggunakan broker ini jika hanya ingin mencoba komunikasi anatar MQTT dan ESP32
// Broker ini public
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;

Inisialisasi Klien MQTT dan Koneksi ke Broker MQTT, Publish & Subscribe Pesan, Penanganan Pesan Serta Disconnect dan Reconnect

Pertama anda dapat Inisialisasikan klien MQTT dengan mengatur nama klien dan menghubungkannya ke broker. Caranya seperti berikut:

WiFiClient espClient;
PubSubClient client(espClient);

Selanjutnya di dalam fungsi setup(), tambahkan kode untuk menghubungkan ESP32 ke broker MQTT, Publish dan Subscribe Pesan, Penanganan Pesan dan Disconnect dan Reconnect. Berikut merupakan contoh kode yang mungkin dapat anda terapkan:

void setup() {
    // Mengatur kecepatan baud rate untuk koneksi serial ke 115200
    Serial.begin(115200);
    
    // Menghubungkan ke jaringan WiFi dengan nama SSID (ssid) dan kata sandi (password)
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Menghubungkan ke WiFi..");
    }
    Serial.println("Terhubung ke jaringan Wi-Fi");
    
    // Menghubungkan ke broker MQTT dengan alamat dan port yang ditentukan
    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
        String client_id = "esp32-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("Klien %s terhubung ke broker MQTT publik\n", client_id.c_str());
        
        // Mencoba menghubungkan ke broker MQTT dengan ID klien, nama pengguna, dan kata sandi yang ditentukan
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
            Serial.println("Terhubung ke broker MQTT publik EMQX");
        } else {
            Serial.print("Gagal dengan status ");
            Serial.print(client.state());
            delay(2000);
        }
    }
    
    // Publish pesan dan berlangganan ke topik tertentu
    client.publish(topic, "Halo, saya ESP32 dari nauval^^");
    client.subscribe(topic);
}

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

Output hasil pada Arduino IDE dan MQTT

Arduino IDE:


MQTT:



Full Code

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

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

// MQTT Broker (Anda dapat menggunakan broker ini jika hanya ingin mencoba komunikasi anatar MQTT dan ESP32
// Broker ini public
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() {
    // Mengatur kecepatan baud rate untuk koneksi serial ke 115200
    Serial.begin(115200);
    
    // Menghubungkan ke jaringan WiFi dengan nama SSID (ssid) dan kata sandi (password)
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Menghubungkan ke WiFi..");
    }
    Serial.println("Terhubung ke jaringan Wi-Fi");
    
    // Menghubungkan ke broker MQTT dengan alamat dan port yang ditentukan
    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
        String client_id = "esp32-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("Klien %s terhubung ke broker MQTT publik\n", client_id.c_str());
        
        // Mencoba menghubungkan ke broker MQTT dengan ID klien, nama pengguna, dan kata sandi yang ditentukan
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
            Serial.println("Terhubung ke broker MQTT publik EMQX");
        } else {
            Serial.print("Gagal dengan status ");
            Serial.print(client.state());
            delay(2000);
        }
    }
    
    // Publish pesan dan berlangganan ke topik tertentu
    client.publish(topic, "Halo, saya ESP32 dari nauval^^");
    client.subscribe(topic);
}

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

void loop() {
    // Memproses pesan MQTT dan menjaga koneksi
    client.loop();
}


Komentar

Postingan populer dari blog ini

Mengenal Metode Komunikasi Long Range (LoRa)

Tutorial Instalasi MicroPython di Mikrokontroler ESP32

Tutorial Mengirim Data Ke Server Client (ChirpStack) Via LoRa