Panduan lengkap membangun sistem monitoring IoT dengan ESP32, DHT11, Relay 2 Channel, MQTT Broker, PHP & MySQL dari nol hingga berjalan.
⬇ Download ProjectSistem monitoring IoT real-time yang menghubungkan sensor fisik dengan dashboard web melalui protokol MQTT.
Visualisasi suhu dan kelembaban dengan gauge animasi yang diperbarui langsung dari MQTT.
Grafik historis 20 data terakhir dengan dual axis untuk suhu dan kelembaban.
Toggle relay 2 channel dengan animasi lampu dan ring berputar saat aktif.
Koneksi langsung dari browser ke broker MQTT publik tanpa server tambahan.
Setiap data sensor otomatis tersimpan ke database untuk histori jangka panjang.
Konfigurasi broker, topic, dan nama website langsung dari halaman setting.
Bagaimana data mengalir dari sensor fisik ke dashboard web secara real-time.
Catatan Penting: Browser menggunakan WSS (WebSocket Secure, port 8884) untuk koneksi MQTT, sedangkan ESP32 menggunakan TCP biasa (port 1883). Keduanya terhubung ke broker yang sama.
📤 ESP32 → Broker (Topic: iot/dht11)
{
"temperature": 29.5,
"humidity": 65.2,
"relay1": 0,
"relay2": 1
}
📥 Web → Broker (Topic: iot/relay)
{
"relay1": 1,
"relay2": 0
}
Pastikan semua komponen hardware dan software sudah tersedia sebelum memulai.
Ikuti langkah-langkah berikut secara berurutan untuk menginstal website IoT MQTT di XAMPP.
Download XAMPP dari apachefriends.org, install, lalu jalankan Apache dan MySQL dari XAMPP Control Panel.
Pastikan port 80 (Apache) dan 3306 (MySQL) tidak digunakan aplikasi lain. Jika konflik, ubah port di XAMPP Config.
Pastikan folder project sudah berada di direktori htdocs XAMPP.
C:\xampp\htdocs\sma28mqttweb\
Struktur folder yang harus ada:
Buka browser dan akses URL berikut untuk membuat database, tabel, dan data default secara otomatis:
http://localhost/sma28mqttweb/install.php
Setelah instalasi berhasil, klik tombol "Buka Dashboard" atau akses langsung http://localhost/sma28mqttweb/
Buka dashboard dan pastikan semua komponen tampil dengan benar:
http://localhost/sma28mqttweb/dashboard.php
Konfigurasi Arduino IDE, install library, rangkai hardware, dan upload kode ke ESP32.
┌─────────────────────────────────────────┐
│ ESP32 DevKit │
│ │
│ 3.3V ──────────────────── VCC [DHT11] │
│ GND ──────────────────── GND [DHT11] │
│ GPIO4 ─────────────────── DATA [DHT11] │
│ │
│ 5V ──────────────────── VCC [RELAY] │
│ GND ──────────────────── GND [RELAY] │
│ GPIO26 ────────────────── IN1 [RELAY] │
│ GPIO27 ────────────────── IN2 [RELAY] │
└─────────────────────────────────────────┘
[RELAY] ──── COM1/NO1 ──── Beban Listrik 1 (Lampu/Pompa)
[RELAY] ──── COM2/NO2 ──── Beban Listrik 2 (Lampu/Pompa)
Buka Arduino IDE → menu Sketch → Include Library → Manage Libraries, lalu cari dan install 4 library berikut:
Arduino IDE → File → Preferences (atau Ctrl+Comma)
Di field "Additional boards manager URLs", tambahkan:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Buka Tools → Board → Boards Manager, cari esp32, install package dari Espressif Systems.
Setelah install, pilih Tools → Board → ESP32 Arduino → ESP32 Dev Module
Buka file esp32/esp32_iot_mqtt.ino, ubah bagian berikut sesuai jaringan Anda:
// ── WiFi ─────────────────────────────────────────
const char* WIFI_SSID = "NAMA_WIFI_ANDA"; // ← Ganti ini
const char* WIFI_PASSWORD = "PASSWORD_WIFI"; // ← Ganti ini
// ── MQTT Broker ──────────────────────────────────
const char* MQTT_BROKER = "broker.hivemq.com"; // Broker publik
const int MQTT_PORT = 1883; // TCP port ESP32
const char* CLIENT_ID = "esp32_iot_001"; // ID unik
// ── Topics ───────────────────────────────────────
const char* TOPIC_SENSOR = "iot/dht11"; // Publish sensor
const char* TOPIC_RELAY = "iot/relay"; // Subscribe relay
// ── Interval Kirim Data ──────────────────────────
const unsigned long PUBLISH_INTERVAL = 5000; // 5 detik
Penting: Topic di ESP32 harus sama persis dengan topic yang diset di halaman Setting website. Default: iot/dht11 dan iot/relay.
Gunakan kabel USB. Pastikan driver CH340/CP2102 sudah terinstall agar port COM terdeteksi.
Arduino IDE → Tools → Port → pilih port COM yang muncul (misal COM3, COM5).
Klik tombol Upload (→) atau tekan Ctrl+U. Tunggu hingga muncul "Done uploading".
Buka Tools → Serial Monitor, set baud rate 115200. Lihat log koneksi WiFi dan MQTT.
📟 Output Serial Monitor (Normal)
=== IoT MQTT ESP32 ===
Connecting to WiFi: MyWiFi.....
WiFi OK! IP: 192.168.1.105
Connecting MQTT: broker.hivemq.com:1883
MQTT Connected!
Subscribed: iot/relay
Publish → iot/dht11 : {"temperature":29.5,"humidity":65.2,"relay1":0,"relay2":0}
Publish → iot/dht11 : {"temperature":29.8,"humidity":64.9,"relay1":0,"relay2":0}
Pesan masuk [iot/relay]: {"relay1":1,"relay2":0}
Relay1 → ON
Atur broker MQTT melalui halaman Setting website. Mendukung broker publik gratis tanpa registrasi.
| Broker | Host | Port TCP (ESP32) | Port WSS (Browser) | Auth | Status |
|---|---|---|---|---|---|
| HiveMQ | broker.hivemq.com |
1883 |
8884 |
Tidak | ✓ Recommended |
| EMQX | broker.emqx.io |
1883 |
8084 |
Tidak | ✓ Aktif |
| Mosquitto | test.mosquitto.org |
1883 |
8081 |
Tidak | ✓ Aktif |
| HiveMQ Cloud | *.hivemq.cloud |
8883 |
8884 |
Ya (TLS) | Free Tier |
wss://broker:port/mqttMQTT_PORTPerhatian Topic: Topic di website Setting dan di kode ESP32 harus identik (case-sensitive). Contoh: iot/dht11 ≠ IoT/DHT11.
Panduan lengkap menggunakan setiap fitur di halaman Dashboard dan Setting.
Dua gauge animasi menampilkan nilai real-time. Jarum bergerak otomatis setiap ada data baru dari MQTT. Warna berubah sesuai zona: biru (normal) → kuning (sedang) → merah (tinggi).
Menampilkan 20 data terakhir dengan dua garis: merah untuk suhu (axis kiri) dan biru untuk kelembaban (axis kanan). Data baru ditambahkan real-time dari MQTT, data lama otomatis digeser.
Klik toggle switch untuk ON/OFF relay. Saat ON: ikon lampu menyala dengan efek glow, ring berputar, badge berubah hijau. Perintah dikirim ke ESP32 via MQTT dan disimpan ke database.
Indikator di pojok kanan navbar menunjukkan status koneksi: ● Connected (hijau berkedip), ● Error (merah), atau "Connecting..." (abu-abu).
Ubah nama yang tampil di navbar dan tab browser. Setelah simpan, halaman akan reload otomatis untuk menerapkan nama baru.
Isi host broker MQTT dan port WSS. Untuk broker publik tanpa auth, kosongkan field Username dan Password.
Sesuaikan topic sensor dan relay dengan yang digunakan di kode ESP32. Perubahan langsung aktif setelah halaman di-reload.
Klik tombol "Simpan Pengaturan". Muncul notifikasi hijau jika berhasil. Halaman otomatis reload setelah 1.5 detik.
/sma28mqttweb/api/sensor_data.php
GET — Ambil data chart (20 terakhir)
GET /api/sensor_data.php?limit=20
GET /api/sensor_data.php?latest=1
POST — Simpan data baru
{"temperature": 29.5, "humidity": 65.2}
/sma28mqttweb/api/relay.php
GET — Status relay saat ini
{"relay1": 1, "relay2": 0}
POST — Update status relay
{"relay1": 1, "relay2": 0}
Solusi untuk masalah yang paling sering ditemui saat instalasi dan penggunaan.
Tiga tabel MySQL yang digunakan untuk menyimpan data sensor, status relay, dan pengaturan.
| Kolom | Tipe | Keterangan |
|---|---|---|
id | INT AUTO_INCREMENT | Primary key |
temperature | FLOAT | Suhu dalam °C dari DHT11 |
humidity | FLOAT | Kelembaban dalam % dari DHT11 |
created_at | TIMESTAMP | Waktu data diterima (auto) |
| Kolom | Tipe | Keterangan |
|---|---|---|
id | INT AUTO_INCREMENT | Primary key |
relay1 | TINYINT(1) | Status relay 1: 0=OFF, 1=ON |
relay2 | TINYINT(1) | Status relay 2: 0=OFF, 1=ON |
updated_at | TIMESTAMP | Waktu update terakhir (auto) |
| setting_key | Default Value | Keterangan |
|---|---|---|
site_name | IoT MQTT | Nama website di navbar |
mqtt_broker | broker.hivemq.com | Host broker MQTT |
mqtt_port | 8884 | Port WSS untuk browser |
mqtt_username | (kosong) | Username broker (opsional) |
mqtt_password | (kosong) | Password broker (opsional) |
mqtt_topic_sensor | iot/dht11 | Topic data sensor |
mqtt_topic_relay | iot/relay | Topic kontrol relay |
mqtt_client_id | iot_web_client | Client ID MQTT web |
Centang semua item ini untuk memastikan sistem berjalan sempurna.
Jika semua checklist sudah tercentang, sistem IoT MQTT Anda sudah berjalan sempurna! Data sensor akan tampil real-time di dashboard dan relay bisa dikontrol dari browser.