📖 Panduan Lengkap Instalasi & Penggunaan

IoT MQTT
Tutorial

Panduan lengkap membangun sistem monitoring IoT dengan ESP32, DHT11, Relay 2 Channel, MQTT Broker, PHP & MySQL dari nol hingga berjalan.

⬇ Download Project
🚀 Mulai Instalasi 📋 Lihat Overview
ESP32 MQTT PHP Native MySQL DHT11 Chart.js Gauge.js WebSocket

Apa itu IoT MQTT?

Sistem monitoring IoT real-time yang menghubungkan sensor fisik dengan dashboard web melalui protokol MQTT.

📡 IoT MQTT
MQTT Connected
🌡️ Gauge Suhu
29.5
°C — Temperature
💧 Gauge Kelembaban
65.2
% — Humidity
📈 Grafik Sensor Real-time
🔌 Kontrol Relay
💡
Relay 1
ON
💡
Relay 2
OFF
📊

Gauge Real-time

Visualisasi suhu dan kelembaban dengan gauge animasi yang diperbarui langsung dari MQTT.

📈

Line Chart

Grafik historis 20 data terakhir dengan dual axis untuk suhu dan kelembaban.

🔌

Kontrol Relay

Toggle relay 2 channel dengan animasi lampu dan ring berputar saat aktif.

📡

MQTT WebSocket

Koneksi langsung dari browser ke broker MQTT publik tanpa server tambahan.

🗄️

Simpan ke MySQL

Setiap data sensor otomatis tersimpan ke database untuk histori jangka panjang.

⚙️

Setting Dinamis

Konfigurasi broker, topic, dan nama website langsung dari halaman setting.

Alur Data Sistem

Bagaimana data mengalir dari sensor fisik ke dashboard web secara real-time.

🌡️
DHT11
Sensor Suhu & Hum
GPIO 4
🔲
ESP32
Publish JSON
TCP 1883
☁️
MQTT Broker
HiveMQ / EMQX
WSS 8884
🌐
Web Browser
Dashboard PHP
HTTP POST
🗄️
MySQL
Simpan Data
ℹ️

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)

🟡 JSON
{
  "temperature": 29.5,
  "humidity": 65.2,
  "relay1": 0,
  "relay2": 1
}

📥 Web → Broker (Topic: iot/relay)

🟡 JSON
{
  "relay1": 1,
  "relay2": 0
}

Yang Dibutuhkan

Pastikan semua komponen hardware dan software sudah tersedia sebelum memulai.

🔧 Hardware

  • ESP32 (DevKit v1 atau sejenisnya)
    Mikrokontroler utama dengan WiFi built-in
  • Sensor DHT11
    Sensor suhu & kelembaban, 3 atau 4 pin
  • Relay 2 Channel (5V, aktif LOW)
    Modul relay untuk kontrol perangkat listrik
  • Kabel Jumper (Male-to-Female)
    Untuk menghubungkan komponen ke ESP32
  • Breadboard (opsional)
    Untuk prototyping yang lebih rapi
  • Kabel USB Micro/Type-C
    Untuk upload program dan power ESP32

💻 Software

  • XAMPP (Apache + MySQL + PHP)
    Download di apachefriends.org
  • Arduino IDE 2.x
    Download di arduino.cc
  • ESP32 Board Package
    Tambahkan via Board Manager di Arduino IDE
  • Library Arduino (4 library)
    PubSubClient, DHT, Adafruit Sensor, ArduinoJson
  • Browser Modern
    Chrome, Firefox, Edge (support WebSocket)
  • Koneksi Internet
    Untuk akses broker MQTT publik

Instalasi Website

Ikuti langkah-langkah berikut secara berurutan untuk menginstal website IoT MQTT di XAMPP.

1

Install & Jalankan XAMPP

Download XAMPP dari apachefriends.org, install, lalu jalankan Apache dan MySQL dari XAMPP Control Panel.

XAMPP Control Panel
● Running Apache Port: 80, 443 START ✓
● Running MySQL Port: 3306 START ✓
⚠️

Pastikan port 80 (Apache) dan 3306 (MySQL) tidak digunakan aplikasi lain. Jika konflik, ubah port di XAMPP Config.

2

Letakkan File Project

Pastikan folder project sudah berada di direktori htdocs XAMPP.

📁 Path
C:\xampp\htdocs\sma28mqttweb\

Struktur folder yang harus ada:

📁 sma28mqttweb/ ├── 📁 api/ │ ├── sensor_data.php ← API data sensor │ ├── relay.php ← API kontrol relay │ └── settings.php ← API pengaturan ├── 📁 assets/css/ │ └── style.css ← Dark theme ├── 📁 assets/js/ │ └── dashboard.js ← MQTT + Chart + Gauge ├── 📁 config/ │ ├── database.php ← Koneksi MySQL │ └── settings.php ← Helper settings ├── 📁 esp32/ │ └── esp32_iot_mqtt.ino ← Kode Arduino ├── 📁 includes/ │ ├── header.php │ └── footer.php ├── dashboard.php ← Halaman utama ├── setting.php ← Halaman setting ├── install.php ← Installer DB └── index.php ← Redirect
3

Install Database Otomatis

Buka browser dan akses URL berikut untuk membuat database, tabel, dan data default secara otomatis:

🌐 URL
http://localhost/sma28mqttweb/install.php
📡 IoT MQTT — Installer
✅ Koneksi MySQL berhasil
✅ Database iot_mqtt siap
✅ Tabel sensor_data siap
✅ Tabel relay_status siap
✅ Tabel settings siap
✅ Default settings disimpan
✅ Sample data sensor ditambahkan
🎉 Instalasi selesai!

Setelah instalasi berhasil, klik tombol "Buka Dashboard" atau akses langsung http://localhost/sma28mqttweb/

4

Verifikasi Instalasi

Buka dashboard dan pastikan semua komponen tampil dengan benar:

🌐 URL
http://localhost/sma28mqttweb/dashboard.php
  • Navbar tampil dengan status MQTT "Connecting..."
  • Gauge suhu dan kelembaban tampil (nilai 0 dulu)
  • Grafik line chart tampil dengan sample data
  • Dua relay card tampil dengan toggle switch
  • Setelah beberapa detik, status MQTT berubah jadi "Connected" (hijau)

Setup ESP32

Konfigurasi Arduino IDE, install library, rangkai hardware, dan upload kode ke ESP32.

🔌 Diagram Wiring

ESP32 Pin Connections
── DHT11 Sensor ──
GPIO 4 DHT11 DATA pin Signal data suhu & kelembaban
3.3V DHT11 VCC pin Power supply sensor
GND DHT11 GND pin Ground sensor
── Relay 2 Channel (Aktif LOW) ──
GPIO 26 Relay Module IN1 Kontrol Relay 1 (LOW=ON)
GPIO 27 Relay Module IN2 Kontrol Relay 2 (LOW=ON)
5V Relay Module VCC Power relay (butuh 5V)
GND Relay Module GND Ground relay
📐 Diagram Koneksi
        ┌─────────────────────────────────────────┐
        │              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)

📦 Install Library Arduino

💡

Buka Arduino IDE → menu Sketch → Include Library → Manage Libraries, lalu cari dan install 4 library berikut:

1
PubSubClient
by Nick O'Leary — Library MQTT untuk Arduino/ESP32
2
DHT sensor library
by Adafruit — Driver sensor DHT11/DHT22
3
Adafruit Unified Sensor
by Adafruit — Dependensi wajib untuk DHT library
4
ArduinoJson
by Benoit Blanchon — Parse & buat JSON payload

🔲 Tambah Board ESP32 ke Arduino IDE

1

Buka Preferences

Arduino IDE → File → Preferences (atau Ctrl+Comma)

2

Tambah Board Manager URL

Di field "Additional boards manager URLs", tambahkan:

🔗 URL
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
3

Install Board Package

Buka Tools → Board → Boards Manager, cari esp32, install package dari Espressif Systems.

4

Pilih Board

Setelah install, pilih Tools → Board → ESP32 Arduino → ESP32 Dev Module

📝 Konfigurasi Kode ESP32

Buka file esp32/esp32_iot_mqtt.ino, ubah bagian berikut sesuai jaringan Anda:

⚡ Arduino C++
// ── 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.

⬆️ Upload ke ESP32

Hubungkan ESP32 ke PC

Gunakan kabel USB. Pastikan driver CH340/CP2102 sudah terinstall agar port COM terdeteksi.

Pilih Port COM

Arduino IDE → Tools → Port → pilih port COM yang muncul (misal COM3, COM5).

Upload Sketch

Klik tombol Upload (→) atau tekan Ctrl+U. Tunggu hingga muncul "Done uploading".

Monitor Serial

Buka Tools → Serial Monitor, set baud rate 115200. Lihat log koneksi WiFi dan MQTT.

📟 Output Serial Monitor (Normal)

📟 Serial Monitor — 115200 baud
=== 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

Konfigurasi MQTT

Atur broker MQTT melalui halaman Setting website. Mendukung broker publik gratis tanpa registrasi.

📡 IoT MQTT
📡 Pengaturan MQTT Broker
MQTT Broker Host
broker.hivemq.com
Port (WSS)
8884
Topic Sensor
iot/dht11
Topic Relay
iot/relay
💾 Simpan Pengaturan

☁️ Daftar Broker MQTT Publik Gratis

BrokerHostPort TCP (ESP32)Port WSS (Browser)AuthStatus
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
🌐 Browser (Web Dashboard)
  • Menggunakan WebSocket Secure (WSS)
  • Port default: 8884 (HiveMQ)
  • URL format: wss://broker:port/mqtt
  • Diatur di halaman Setting → Port WSS
🔲 ESP32 (Mikrokontroler)
  • Menggunakan TCP biasa
  • Port default: 1883
  • Diatur di kode Arduino: MQTT_PORT
  • Tidak perlu SSL untuk broker publik
⚠️

Perhatian Topic: Topic di website Setting dan di kode ESP32 harus identik (case-sensitive). Contoh: iot/dht11IoT/DHT11.

Cara Menggunakan Dashboard

Panduan lengkap menggunakan setiap fitur di halaman Dashboard dan Setting.

🌡️ Gauge Suhu & Kelembaban

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).

📈 Grafik Line Chart

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.

🔌 Kontrol Relay

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.

📡 Status MQTT

Indikator di pojok kanan navbar menunjukkan status koneksi: ● Connected (hijau berkedip), ● Error (merah), atau "Connecting..." (abu-abu).

🌐 Nama Website

Ubah nama yang tampil di navbar dan tab browser. Setelah simpan, halaman akan reload otomatis untuk menerapkan nama baru.

📡 Broker & Port

Isi host broker MQTT dan port WSS. Untuk broker publik tanpa auth, kosongkan field Username dan Password.

📨 Topic MQTT

Sesuaikan topic sensor dan relay dengan yang digunakan di kode ESP32. Perubahan langsung aktif setelah halaman di-reload.

💾 Simpan

Klik tombol "Simpan Pengaturan". Muncul notifikasi hijau jika berhasil. Halaman otomatis reload setelah 1.5 detik.

GET POST /sma28mqttweb/api/sensor_data.php

GET — Ambil data chart (20 terakhir)

🌐 URL
GET /api/sensor_data.php?limit=20
GET /api/sensor_data.php?latest=1

POST — Simpan data baru

🟡 JSON Body
{"temperature": 29.5, "humidity": 65.2}
GET POST /sma28mqttweb/api/relay.php

GET — Status relay saat ini

🟡 Response
{"relay1": 1, "relay2": 0}

POST — Update status relay

🟡 JSON Body
{"relay1": 1, "relay2": 0}

Pemecahan Masalah

Solusi untuk masalah yang paling sering ditemui saat instalasi dan penggunaan.

MQTT Status tetap "Connecting..." tidak pernah Connected
install.php error: "Database connection failed"
ESP32 gagal konek WiFi / MQTT
DHT11 selalu baca "nan" atau nilai tidak valid
Relay tidak merespons perintah dari web
Halaman web tampil error 404 atau blank

Struktur Database

Tiga tabel MySQL yang digunakan untuk menyimpan data sensor, status relay, dan pengaturan.

TABLE sensor_data

KolomTipeKeterangan
idINT AUTO_INCREMENTPrimary key
temperatureFLOATSuhu dalam °C dari DHT11
humidityFLOATKelembaban dalam % dari DHT11
created_atTIMESTAMPWaktu data diterima (auto)

TABLE relay_status

KolomTipeKeterangan
idINT AUTO_INCREMENTPrimary key
relay1TINYINT(1)Status relay 1: 0=OFF, 1=ON
relay2TINYINT(1)Status relay 2: 0=OFF, 1=ON
updated_atTIMESTAMPWaktu update terakhir (auto)

TABLE settings

setting_keyDefault ValueKeterangan
site_nameIoT MQTTNama website di navbar
mqtt_brokerbroker.hivemq.comHost broker MQTT
mqtt_port8884Port WSS untuk browser
mqtt_username(kosong)Username broker (opsional)
mqtt_password(kosong)Password broker (opsional)
mqtt_topic_sensoriot/dht11Topic data sensor
mqtt_topic_relayiot/relayTopic kontrol relay
mqtt_client_idiot_web_clientClient ID MQTT web

Checklist Lengkap

Centang semua item ini untuk memastikan sistem berjalan sempurna.

💻 Setup Web Server

🔲 Setup ESP32

🎉

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.