FLOW. CONNECT. INNOVATE.
← KEMBALI KE ARTIKEL
TUTORIAL

Mengirim Data Sensor ESP32 ke Mosquitto MQTT Broker

Header Image

Dalam tutorial ini, kita akan belajar cara mengonfigurasi ESP32 untuk membaca data sensor (simulasi sensor suhu/kelembaban) dan mengunggah data tersebut ke Mosquitto MQTT Broker menggunakan Arduino IDE.

1. Persiapan Perangkat & Software

Sebelum memulai, pastikan Anda telah menyiapkan:

  1. Hardware:

    • Board ESP32 (DevKit V1 / sejenisnya).

    • Kabel Data Micro-USB.

    • (Opsional) Sensor fisik seperti DHT11/DHT22 (Dalam tutorial ini kita juga menyertakan variabel simulasi).

  2. Software:

    • Arduino IDE (Versi 1.8.x atau versi 2.x).

    • Mosquitto MQTT Broker (Sudah terinstal di PC/Raspberry Pi atau menggunakan broker publik gratis seperti test.mosquitto.org).

2. Instalasi Library di Arduino IDE

Kita memerlukan dua library utama untuk menjalankan koneksi Wi-Fi dan MQTT pada ESP32:

1.Buka Library Manager:Buka Library Manager di Arduino IDE.

Buka Arduino IDE, lalu navigasikan ke menu Tools $\rightarrow$ Manage Libraries... (atau tekan Ctrl + Shift + I).

2.Instal Library PubSubClient:Cari dan instal PubSubClient.

Pada kolom pencarian, ketik PubSubClient (dibuat oleh Nick O'Leary). Klik Install. Library ini digunakan untuk menangani protokol MQTT.

3. Penjelasan Alur Sistem

[ ESP32 ] --(Connect Wi-Fi)--> [ Internet / Local Network ] --(Publish Data)--> [ Mosquitto Broker ]
                                                                                      |
                                                                              (Topic: esp32/sensor)

ESP32 akan terhubung ke jaringan Wi-Fi lokal, lalu membuka koneksi TCP terorganisir ke alamat IP atau Domain dari Mosquitto Broker. Setelah terhubung, ESP32 akan mengirimkan payload berupa data suhu dan kelembaban ke topik esp32/sensor/suhu dan esp32/sensor/kelembaban.

4. Kode Program Arduino C++

Salin kode di bawah ini ke dalam Arduino IDE. Sesuaikan kredensial Wi-Fi dan IP/Domain broker Mosquitto Anda:

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

// 1. Pengaturan Wi-Fi
const char* ssid     = "SSID_WIFI_ANDA";     // Ganti dengan nama Wi-Fi Anda
const char* password = "PASSWORD_WIFI_ANDA"; // Ganti dengan password Wi-Fi Anda

// 2. Pengaturan MQTT Broker
// Gunakan "test.mosquitto.org" untuk testing publik, atau isikan IP PC lokal Anda (misal: "192.168.1.100")
const char* mqtt_server = "test.mosquitto.org"; 
const int   mqtt_port   = 1883;                 // Port standar MQTT (tanpa TLS)

// Inisialisasi Klien Wi-Fi & MQTT
WiFiClient espClient;
PubSubClient client(espClient);

// Variabel Penjadwalan (Mengirim data setiap 5 detik tanpa delay)
unsigned long lastMsg = 0;

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Menghubungkan ke Wi-Fi: ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

  Serial.println("");
  Serial.println("Terhubung ke jaringan Wi-Fi!");
  Serial.print("IP Address ESP32: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  // Loop hingga terhubung kembali ke MQTT Broker
  while (!client.connected()) {
    Serial.print("Mencoba menghubungkan ke MQTT Broker...");
    
    // Buat ID Client unik
    String clientId = "ESP32Client-";
    clientId += String(random(0xffff), HEX);

    // Coba hubungkan (Jika broker butuh username/pass, gunakan client.connect(clientId, user, pass))
    if (client.connect(clientId.c_str())) {
      Serial.println(" TERHUBUNG!");
    } else {
      Serial.print(" Gagal, rc=");
      Serial.print(client.state());
      Serial.println(" Coba lagi dalam 5 detik...");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  
  // Menghubungkan ke Wi-Fi
  setup_wifi();

  // Konfigurasi Server MQTT
  client.setServer(mqtt_server, mqtt_port);
}

void loop() {
  // Pastikan koneksi MQTT tetap aktif
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // Kirim data telemetri setiap 5000 milidetik (5 detik)
  unsigned long now = millis();
  if (now - lastMsg > 5000) {
    lastMsg = now;

    // Simulasi Baca Data Sensor (Dapat diganti dengan library sensor asli seperti DHT)
    float suhu = random(250, 350) / 10.0;     // Menghasilkan angka acak 25.0 - 35.0
    float kelembaban = random(500, 800) / 10.0; // Menghasilkan angka acak 50.0 - 80.0

    // Konversi float ke String/Char Array untuk pengiriman MQTT
    char tempString[8];
    char humString[8];
    dtostrf(suhu, 1, 2, tempString);
    dtostrf(kelembaban, 1, 2, humString);

    // Cetak ke Serial Monitor
    Serial.print("Publish Suhu: ");
    Serial.println(tempString);
    Serial.print("Publish Kelembaban: ");
    Serial.println(humString);

    // Publish Data ke MQTT Topic
    client.publish("esp32/sensor/suhu", tempString);
    client.publish("esp32/sensor/kelembaban", humString);
  }
}

5. Uji Coba & Pengujian Data

Langkah 1: Upload dan Cek Serial Monitor

  1. Hubungkan ESP32 ke PC melalui kabel USB.

  2. Pilih Board ESP32 Dev Module dan Port COM yang sesuai pada Arduino IDE.

  3. Klik tombol Upload.

  4. Buka Serial Monitor (Baud rate set ke 115200). Pastikan muncul status bahwa Wi-Fi dan MQTT terhubung.

Langkah 2: Monitoring Data di Mosquitto Client

Jika Anda menggunakan server Mosquitto lokal pada Komputer/Raspberry Pi, Anda dapat mengecek data yang masuk menggunakan Terminal / Command Prompt:

  1. Buka Terminal/CMD.

  2. Jalankan perintah subscribe berikut untuk mendengarkan semua topik sensor dari ESP32:

Bash
 
mosquitto_sub -h test.mosquitto.org -t "esp32/sensor/#" -v

(Ganti test.mosquitto.org dengan IP lokal Anda jika menggunakan broker lokal).

  1. Hasil di terminal akan menampilkan data real-time yang dikirim oleh ESP32:

 
esp32/sensor/suhu 28.40
esp32/sensor/kelembaban 65.20
esp32/sensor/suhu 29.10
esp32/sensor/kelembaban 64.80

6. Tips Troubleshooting Common Issues