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:
-
Hardware:
-
Board ESP32 (DevKit V1 / sejenisnya).
-
Kabel Data Micro-USB.
-
(Opsional) Sensor fisik seperti DHT11/DHT22 (Dalam tutorial ini kita juga menyertakan variabel simulasi).
-
-
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:
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
-
Hubungkan ESP32 ke PC melalui kabel USB.
-
Pilih Board ESP32 Dev Module dan Port COM yang sesuai pada Arduino IDE.
-
Klik tombol Upload.
-
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:
-
Buka Terminal/CMD.
-
Jalankan perintah subscribe berikut untuk mendengarkan semua topik sensor dari ESP32:
mosquitto_sub -h test.mosquitto.org -t "esp32/sensor/#" -v
(Ganti test.mosquitto.org dengan IP lokal Anda jika menggunakan broker lokal).
-
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
-
rc=-2(Connection Refused / Failed): Biasanya terjadi karena kesalahan memasukkan IP/Domain Broker atau port ditutup oleh firewall. -
rc=-4(Bad Credentials): Terjadi jika broker membutuhkan Username & Password, namun kode program belum menyediakannya. -
ESP32 Restart Berulang (Reset Loop): Pastikan ketersediaan daya USB mencukupi. Pemancar Wi-Fi ESP32 membutuhkan lonjakan arus pendek (current spike) saat inisialisasi koneksi.