Menerapkan Protokol MQTT pada ESP32

Tujuan:

  1. Memahami cara mengimplementasikan protokol MQTT pada ESP32.
  2. Membuat komunikasi data antara ESP32 dan broker MQTT.
  3. Membangun sistem IoT sederhana untuk mengirim dan menerima data.

Alat dan Bahan yang Dibutuhkan

  1. ESP32 Development Board.
  2. Kabel USB (untuk menghubungkan ESP32 ke komputer).
  3. Sensor DHT11/DHT22 (opsional, untuk contoh data lingkungan).
  4. LED dan resistor 220Ω (opsional, untuk contoh kontrol output).
  5. Komputer dengan Arduino IDE terinstal.
  6. Broker MQTT (contoh: Mosquitto di lokal atau HiveMQ Cloud).

Langkah 1: Persiapan Software

  1. Instal Arduino IDE
    • Unduh dari situs resmi Arduino.
    • Tambahkan board ESP32 ke Arduino IDE:
      • Buka File > Preferences, tambahkan URL berikut di Additional Board Manager URLs:
        https://dl.espressif.com/dl/package_esp32_index.json
      • Buka Tools > Board > Boards Manager, cari “ESP32”, lalu instal.
  2. Instal Library yang Diperlukan
    • PubSubClient (untuk MQTT):
      • Buka Sketch > Include Library > Manage Libraries, cari “PubSubClient” oleh Nick O’Leary, lalu instal.
    • DHT Sensor Library (jika menggunakan sensor DHT):
      • Cari “DHT sensor library” oleh Adafruit dan instal.

Langkah 2: Konfigurasi Broker MQTT

Gunakan Mosquitto di lokal atau broker cloud seperti HiveMQ Cloud (gratis).

A. Jika Menggunakan Mosquitto Lokal

  • Pastikan Mosquitto sudah berjalan (lihat tutorial sebelumnya).
  • Catat alamat IP komputer (broker akan diakses via alamat ini, misal: 192.168.1.5).

B. Jika Menggunakan HiveMQ Cloud

  1. Buka HiveMQ Cloud.
  2. Buat akun gratis dan dapatkan broker URL, port, username, dan password.
    • Contoh broker URL: broker.hivemq.com, port: 1883.

Langkah 3: Wiring ESP32 (Opsional)

  • Contoh 1: Menggunakan Sensor DHT11
    • Hubungkan pin DHT11 ke ESP32:
      • VCC → 3.3V ESP32
      • GND → GND
      • DATA → GPIO4
  • Contoh 2: Menggunakan LED
    • Hubungkan LED ke GPIO2 melalui resistor 220Ω:
      • Anoda LED → GPIO2
      • Katoda LED → GND via resistor.

Langkah 4: Program ESP32 sebagai MQTT Client

Contoh 1: ESP32 sebagai Publisher (Mengirim Data)

Sketch Code (Sensor DHT11 → MQTT):

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

// Konfigurasi WiFi  
const char* ssid = "NAMA_WIFI";  
const char* password = "PASSWORD_WIFI";  

// Konfigurasi MQTT  
const char* mqtt_server = "broker.hivemq.com"; // Ganti dengan IP lokal jika pakai Mosquitto  
const int mqtt_port = 1883;  

// Konfigurasi Sensor DHT  
#define DHTPIN 4  
#define DHTTYPE DHT11  
DHT dht(DHTPIN, DHTTYPE);  

WiFiClient espClient;  
PubSubClient client(espClient);  

void setup_wifi() {  
  delay(10);  
  Serial.println("Menghubungkan ke WiFi...");  
  WiFi.begin(ssid, password);  

  while (WiFi.status() != WL_CONNECTED) {  
    delay(500);  
    Serial.print(".");  
  }  
  Serial.println("\nTerhubung ke WiFi!");  
}  

void reconnect() {  
  while (!client.connected()) {  
    Serial.println("Menghubungkan ke Broker MQTT...");  
    if (client.connect("ESP32Client")) {  
      Serial.println("Terhubung ke Broker!");  
    } else {  
      Serial.print("Gagal, error: ");  
      Serial.print(client.state());  
      Serial.println(" Coba lagi dalam 5 detik...");  
      delay(5000);  
    }  
  }  
}  

void setup() {  
  Serial.begin(115200);  
  setup_wifi();  
  client.setServer(mqtt_server, mqtt_port);  
  dht.begin();  
}  

void loop() {  
  if (!client.connected()) {  
    reconnect();  
  }  
  client.loop();  

  // Baca data sensor  
  float humidity = dht.readHumidity();  
  float temperature = dht.readTemperature();  

  if (isnan(humidity) || isnan(temperature)) {  
    Serial.println("Gagal membaca sensor!");  
    return;  
  }  

  // Kirim data ke topik MQTT  
  client.publish("esp32/sensor/temperature", String(temperature).c_str());  
  client.publish("esp32/sensor/humidity", String(humidity).c_str());  
  Serial.println("Data terkirim!");  

  delay(5000); // Kirim setiap 5 detik  
}

Contoh 2: ESP32 sebagai Subscriber (Menerima Perintah)

Sketch Code (Kontrol LED via MQTT):

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

// Konfigurasi WiFi dan MQTT (sama seperti contoh 1)  

#define LED_PIN 2  

void callback(char* topic, byte* payload, unsigned int length) {  
  Serial.print("Pesan diterima di topik: ");  
  Serial.println(topic);  

  // Konversi payload ke string  
  String message;  
  for (int i = 0; i < length; i++) {  
    message += (char)payload[i];  
  }  

  // Kontrol LED  
  if (message == "ON") {  
    digitalWrite(LED_PIN, HIGH);  
  } else if (message == "OFF") {  
    digitalWrite(LED_PIN, LOW);  
  }  
}  

void setup() {  
  Serial.begin(115200);  
  pinMode(LED_PIN, OUTPUT);  
  setup_wifi();  
  client.setServer(mqtt_server, mqtt_port);  
  client.setCallback(callback);  
}  

void loop() {  
  if (!client.connected()) {  
    reconnect();  
  }  
  client.loop();  
  client.subscribe("esp32/led/control"); // Subscribe ke topik kontrol  
}

Langkah 5: Uji Coba

  1. Untuk Contoh 1 (Publisher):
    • Upload kode ke ESP32.
    • Buka Serial Monitor (Tools > Serial Monitor) untuk memantau data.
    • Gunakan MQTT Explorer atau terminal Mosquitto untuk subscribe ke topik:
      bash
      Copy
      mosquitto_sub -h broker.hivemq.com -t "esp32/sensor/temperature" -v
  2. Untuk Contoh 2 (Subscriber):
    • Upload kode ke ESP32.
    • Kirim pesan ke topik esp32/led/control via MQTT:
      bash
      Copy
      mosquitto_pub -h broker.hivemq.com -t "esp32/led/control" -m "ON"
    • LED di ESP32 akan menyala/mati sesuai pesan.

Tugas Praktikum

  1. Modifikasi contoh 1 untuk menambahkan sensor lain (misal: LDR untuk cahaya).
  2. Buat dashboard sederhana menggunakan Node-RED untuk menampilkan data dari ESP32.
  3. Implementasikan QoS 1 pada ESP32 untuk memastikan pesan terkirim.

Troubleshooting

  • ESP32 Tidak Terhubung ke WiFi:
    • Periksa SSID dan password.
    • Pastikan jaringan WiFi tersedia.
  • Data Tidak Terekam di Broker:
    • Pastikan topik yang di-publish dan di-subscribe sama.
    • Periksa koneksi internet atau broker aktif.
  • Error “PubSubClient Connection Failed”:
    • Pastikan port 1883 tidak diblokir firewall.

Kesimpulan

Dengan jobsheet ini, Anda telah belajar cara mengintegrasikan ESP32 dengan protokol MQTT untuk mengirim dan menerima data. Implementasi ini dapat dikembangkan untuk proyek IoT seperti smart home, monitoring lingkungan, atau sistem kontrol otomatis.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *