Praktik Pengiriman dan Pengambilan Data antara ESP32 dan Mosquitto menggunakan MQTT
Protokol MQTT (Message Queuing Telemetry Transport) adalah protokol pesan ringan yang sering digunakan dalam aplikasi Internet of Things (IoT) untuk komunikasi data antara perangkat. Salah satu platform yang sering digunakan untuk mengimplementasikan MQTT adalah Mosquitto, sebuah broker MQTT yang bertanggung jawab untuk menerima, menyimpan, dan mengirimkan pesan antara client.
Dalam artikel ini, kita akan mempelajari bagaimana cara mengirim dan mengambil data dari ESP32 ke Mosquitto, kemudian kembali lagi ke ESP32, menggunakan MQTT.
Apa itu MQTT?
MQTT adalah protokol komunikasi berbasis publish-subscribe yang digunakan dalam berbagai aplikasi IoT. Dalam sistem MQTT, terdapat tiga komponen utama:
- Publisher: Perangkat yang mengirimkan pesan ke topik tertentu.
- Subscriber: Perangkat yang berlangganan untuk menerima pesan dari topik tertentu.
- Broker: Komponen yang menerima pesan dari publisher dan mengirimkannya ke subscriber yang relevan.
Dalam konteks ini, kita akan menggunakan ESP32 sebagai publisher dan subscriber, dan Mosquitto sebagai broker MQTT.
Langkah 1: Persiapan dan Instalasi Mosquitto Broker
Untuk memulai, Anda perlu memiliki Mosquitto broker yang terinstal di jaringan lokal atau server Anda. Berikut adalah cara menginstalnya pada sistem operasi yang umum digunakan:
Ubuntu:
sudo apt-get install mosquitto mosquitto-clients sudo systemctl enable mosquitto sudo systemctl start mosquitto
Setelah instalasi selesai, Mosquitto broker akan berjalan di port default 1883.
Windows dan macOS: Anda dapat mengunduh instalasi Mosquitto dari situs resmi Mosquitto dan mengikuti instruksi yang disediakan.
Langkah 2: Persiapkan ESP32 dan Install Library
Pada ESP32, kita akan menggunakan library PubSubClient yang berfungsi untuk menghubungkan ESP32 ke broker MQTT.
- Buka Arduino IDE dan pergi ke Sketch -> Include Library -> Manage Libraries.
- Cari PubSubClient dan install library tersebut.
Selain itu, Anda juga memerlukan library untuk menghubungkan ESP32 ke WiFi, yaitu WiFi.h yang sudah tersedia secara default di Arduino IDE.
Langkah 3: Kode Program untuk Mengirim dan Mengambil Data dari Mosquitto
Berikut adalah kode yang akan kita gunakan pada ESP32. Program ini akan melakukan dua tugas utama: mengirim data (publish) ke Mosquitto dan menerima data (subscribe) dari Mosquitto.
Kode untuk ESP32:
#include <WiFi.h> #include <PubSubClient.h> // Ganti dengan kredensial WiFi Anda const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // Alamat IP atau hostname dari Mosquitto Broker const char* mqtt_server = "192.168.x.x"; // Ganti dengan alamat IP Mosquitto Anda WiFiClient espClient; PubSubClient client(espClient); // Fungsi untuk menghubungkan ke WiFi void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to WiFi..."); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("Connected to WiFi"); } // Callback ketika menerima pesan void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); // Menerima pesan String message = ""; for (int i = 0; i < length; i++) { message += (char)payload[i]; } Serial.println(message); } // Fungsi untuk menghubungkan ESP32 ke Broker MQTT void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Membuat ID client unik String clientId = "ESP32Client-"; clientId += String(WiFi.macAddress()); // Mencoba koneksi if (client.connect(clientId.c_str())) { Serial.println("connected"); client.subscribe("esp32/data"); // Subscribe ke topik 'esp32/data' } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void setup() { Serial.begin(115200); // Menghubungkan ESP32 ke WiFi setup_wifi(); // Menyiapkan MQTT client.setServer(mqtt_server, 1883); // Default port MQTT adalah 1883 client.setCallback(callback); } void loop() { // Mengecek koneksi MQTT if (!client.connected()) { reconnect(); } client.loop(); // Mengirimkan data setiap 5 detik static unsigned long lastMsg = 0; unsigned long now = millis(); if (now - lastMsg > 5000) { lastMsg = now; // Mengirimkan pesan ke broker MQTT pada topik 'esp32/data' String msg = "Data dari ESP32"; Serial.print("Publish message: "); Serial.println(msg); client.publish("esp32/data", msg.c_str()); } }
Penjelasan Kode:
Koneksi WiFi:
- Fungsi
setup_wifi()
menghubungkan ESP32 ke jaringan WiFi menggunakan SSID dan password yang telah ditentukan.
- Fungsi
Koneksi ke Mosquitto (Broker MQTT):
- Fungsi
reconnect()
digunakan untuk memastikan bahwa ESP32 selalu terhubung dengan broker MQTT. Jika koneksi terputus, ESP32 akan mencoba menyambung ulang. - Koneksi dilakukan dengan menggunakan alamat IP broker (dalam hal ini adalah
192.168.x.x
), pastikan alamat tersebut sesuai dengan alamat IP Mosquitto di jaringan lokal Anda.
- Fungsi
Pengiriman Data (Publish):
- Pada bagian
loop()
, ESP32 akan mengirimkan pesan ke topikesp32/data
setiap 5 detik. Pesan yang dikirimkan adalah string "Data dari ESP32".
- Pada bagian
Penerimaan Data (Subscribe):
- Setelah koneksi berhasil, ESP32 akan menyubscribe topik
esp32/data
. Saat ada pesan baru yang diterima, fungsicallback()
akan dipanggil dan pesan tersebut akan ditampilkan pada Serial Monitor.
- Setelah koneksi berhasil, ESP32 akan menyubscribe topik