Menerapkan Protokol MQTT pada ESP32

Tujuan:
- Memahami cara mengimplementasikan protokol MQTT pada ESP32.
- Membuat komunikasi data antara ESP32 dan broker MQTT.
- Membangun sistem IoT sederhana untuk mengirim dan menerima data.
Alat dan Bahan yang Dibutuhkan
- ESP32 Development Board.
- Kabel USB (untuk menghubungkan ESP32 ke komputer).
- Sensor DHT11/DHT22 (opsional, untuk contoh data lingkungan).
- LED dan resistor 220Ω (opsional, untuk contoh kontrol output).
- Komputer dengan Arduino IDE terinstal.
- Broker MQTT (contoh: Mosquitto di lokal atau HiveMQ Cloud).
Langkah 1: Persiapan Software
- 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.
- Buka File > Preferences, tambahkan URL berikut di Additional Board Manager URLs:
- 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.
- PubSubClient (untuk MQTT):
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
- Buka HiveMQ Cloud.
- Buat akun gratis dan dapatkan broker URL, port, username, dan password.
- Contoh broker URL:Â
broker.hivemq.com
, port:Â1883
.
- Contoh broker URL:Â
Langkah 3: Wiring ESP32 (Opsional)
- Contoh 1: Menggunakan Sensor DHT11
- Hubungkan pin DHT11 ke ESP32:
- VCC → 3.3V ESP32
- GND → GND
- DATA → GPIO4
- Hubungkan pin DHT11 ke ESP32:
- Contoh 2: Menggunakan LED
- Hubungkan LED ke GPIO2 melalui resistor 220Ω:
- Anoda LED → GPIO2
- Katoda LED → GND via resistor.
- Hubungkan LED ke GPIO2 melalui resistor 220Ω:
Langkah 4: Program ESP32 sebagai MQTT Client
Contoh 1: ESP32 sebagai Publisher (Mengirim Data)
Sketch Code (Sensor DHT11 → MQTT):
#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 <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
- 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:
mosquitto_sub -h broker.hivemq.com -t "esp32/sensor/temperature" -v
- Untuk Contoh 2 (Subscriber):
- Upload kode ke ESP32.
- Kirim pesan ke topikÂ
esp32/led/control
 via MQTT:mosquitto_pub -h broker.hivemq.com -t "esp32/led/control" -m "ON"
- LED di ESP32 akan menyala/mati sesuai pesan.
Tugas Praktikum
- Modifikasi contoh 1 untuk menambahkan sensor lain (misal: LDR untuk cahaya).
- Buat dashboard sederhana menggunakan Node-RED untuk menampilkan data dari ESP32.
- 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.