Halo Sobat Maker! Pernahkah kamu ingin menyalakan atau mematikan lampu, kipas angin, atau perangkat elektronik lainnya dari jarak jauh menggunakan internet? Dalam tutorial ini, kita akan membuat proyek Internet of Things (IoT) sederhana namun sangat berguna: mengontrol sebuah relay menggunakan board ESP32 atau ESP8266 melalui protokol MQTT.
Proyek ini memungkinkan kita mengirim perintah “on” dan “off” dari aplikasi mana pun yang mendukung MQTT (misalnya dari laptop atau smartphone) untuk mengendalikan relay yang terhubung ke ESP. Yuk, kita mulai! ๐
Apa Saja yang Dibutuhkan?
Sebelum masuk ke kode, pastikan kamu sudah menyiapkan semua komponen yang diperlukan.
Hardware ๐
- Board ESP32 atau ESP8266: Otak dari proyek kita. Keduanya bisa digunakan.
- Modul Relay 1 Channel: Saklar elektronik yang akan kita kontrol. Pastikan tegangannya sesuai (biasanya 5V atau 3.3V).
- Kabel Jumper: Untuk menghubungkan semuanya.
- Kabel USB: Untuk memprogram board dan sebagai sumber daya.
Software ๐ป
- Arduino IDE: Pastikan sudah ter-install dan board ESP32/ESP8266 sudah ditambahkan melalui Board Manager.
- Library
MQTT
: Kita akan menggunakan library dari Joel Gaehwiler. Install melalui Arduino IDE di Sketch > Include Library > Manage Libraries… lalu cari “MQTT”.
Rangkaian (Wiring)
Menghubungkan komponennya sangat mudah. Ikuti diagram koneksi di bawah ini. Kita akan menggunakan pin GPIO2 (seringkali ditandai sebagai D2) pada board ESP untuk mengontrol pin input (IN
) pada modul relay.
VCC
pada relay โ5V
atau3.3V
pada board ESP (sesuaikan dengan relay-mu).GND
pada relay โGND
pada board ESP.IN
pada relay โGPIO2
pada board ESP.
Penjelasan Kode Program
Sekarang mari kita bedah kode yang akan kita unggah ke board ESP. Salin kode di bawah ini ke Arduino IDE Anda.
#include <WiFi.h> #include <MQTT.h> // --- KONFIGURASI --- const char ssid[] = "HUAWEI"; // Ganti dengan SSID WiFi Anda const char pass[] = "sokpakeaja"; // Ganti dengan password WiFi Anda const char* mqtt_server = "broker.emqx.io"; // Alamat MQTT Broker publik const char* client_id = "esp-relay-unik-123"; // ID client, harus unik untuk setiap perangkat // --- PINOUT --- const int relayPin = 2; // GPIO2 // --- INISIALISASI OBJEK --- WiFiClient net; MQTTClient client; // Fungsi yang dijalankan saat ada pesan masuk dari MQTT void messageReceived(String &topic, String &payload) { Serial.println("Topik: {" + topic + "} | Isi Pesan: [" + payload + "]"); // Cek apakah pesan datang di topik yang benar if (topic == "svssefsev/relay1") { if (payload == "ON") { digitalWrite(relayPin, LOW); // Nyalakan relay (kebanyakan relay aktif saat LOW) Serial.println("RELAY MENYALA"); } else if (payload == "OFF") { digitalWrite(relayPin, HIGH); // Matikan relay Serial.println("RELAY PADAM"); } } } // Fungsi untuk koneksi ke WiFi dan MQTT Broker void connect() { Serial.print("Menghubungkan ke WiFi..."); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(1000); } Serial.println("\nTerhubung ke WiFi!"); Serial.print("Menghubungkan ke MQTT Broker..."); while (!client.connect(client_id, "public", "public")) { Serial.print("."); delay(1000); } Serial.println("\nTerhubung ke MQTT Broker!"); // Subscribe (berlangganan) ke topik untuk menerima perintah client.subscribe("svssefsev/relay1"); } void setup() { Serial.begin(9600); // Atur pin relay sebagai OUTPUT pinMode(relayPin, OUTPUT); // Atur kondisi awal relay mati (HIGH untuk relay active-low) digitalWrite(relayPin, HIGH); // Inisialisasi koneksi WiFi WiFi.begin(ssid, pass); // Inisialisasi client MQTT client.begin(mqtt_server, net); client.onMessage(messageReceived); // Tentukan fungsi mana yang akan dijalankan saat ada pesan masuk // Mulai koneksi connect(); } void loop() { // Fungsi ini harus dipanggil berulang kali untuk menjaga koneksi MQTT client.loop(); delay(10); // Memberi jeda singkat agar WiFi lebih stabil // Jika koneksi terputus, coba sambungkan kembali if (!client.connected()) { connect(); } }
Breakdown Kode
- Konfigurasi: Di bagian paling atas, kamu wajib mengubah
ssid
danpass
sesuai dengan jaringan WiFi-mu.mqtt_server
adalah alamat server perantara pesan kita, kita gunakanbroker.emqx.io
yang gratis dan publik.client_id
harus unik agar tidak bentrok dengan perangkat lain di broker yang sama. messageReceived()
: Ini adalah fungsi callback. Fungsi ini akan otomatis berjalan setiap kali ESP menerima pesan dari topik yang di-subscribe. Di dalamnya, kita memeriksa apakah topiknya adalah"svssefsev/relay1"
. Jika ya, kita cek isi pesannya (payload
). Jika isinya"on"
, relay dinyalakan (digitalWrite(relayPin, LOW)
). Jika isinya"off"
, relay dimatikan (digitalWrite(relayPin, HIGH)
).๐ก Info: Banyak modul relay bersifat active-low, artinya relay akan aktif (menyala) saat diberi sinyalLOW
dan mati saat diberi sinyalHIGH
.connect()
: Fungsi ini melakukan dua hal: menyambungkan ESP ke jaringan WiFi, lalu menyambungkannya ke MQTT broker. Setelah terhubung ke broker, ia akan subscribe atau “berlangganan” ke topik"svssefsev/relay1"
. Artinya, perangkat ini akan “mendengarkan” semua pesan yang dikirim ke topik tersebut.setup()
: Fungsi ini hanya berjalan sekali saat perangkat pertama kali dinyalakan. Ia menginisialisasi Serial Monitor untuk debugging, mengaturrelayPin
sebagaiOUTPUT
, memulai koneksi WiFi dan MQTT, serta mendaftarkan fungsimessageReceived()
sebagai handler pesan masuk.loop()
: Fungsi ini berjalan terus-menerus.client.loop()
adalah perintah krusial untuk menjaga koneksi MQTT tetap hidup dan memeriksa pesan baru. Ada juga pengecekan jika koneksi terputus, maka perangkat akan otomatis mencoba menyambung kembali.
Saatnya Uji Coba!
Setelah mengunggah kode ke board ESP, buka Serial Monitor (set baud rate ke 9600) untuk melihat status koneksi. Jika semua lancar, kamu akan melihat pesan bahwa perangkat telah terhubung ke WiFi dan MQTT Broker.
Sekarang, bagaimana cara mengirim perintah? Kita butuh aplikasi MQTT Client.
- Download MQTT Client: Kamu bisa menggunakan MQTT X untuk desktop atau aplikasi seperti MQTT Client di Android/iOS.
- Konfigurasi Client:
- Host/Broker:
broker.emqx.io
- Port:
1883
- Biarkan username dan password kosong (untuk broker publik ini).
- Hubungkan client ke broker.
- Host/Broker:
- Kirim Perintah (Publish):
- Cari bagian untuk Publish atau mengirim pesan.
- Topic:
svssefsev/relay1
(harus sama persis dengan yang di kode). - Payload (Pesan):
- Ketik
on
lalu tekan kirim. Relay-mu seharusnya berbunyi “klik” dan menyala! Di Serial Monitor akan muncul log “RELAY MENYALA”. - Ketik
off
lalu tekan kirim. Relay akan mati. Di Serial Monitor akan muncul log “RELAY PADAM”.
- Ketik
Integrasi Dengan UnIoT
Untuk bisa mengontrol relay dengan UnIoT hanya dengan memasukkan broker, port dan juga topik pada halaman button settings.

Tinggalkan Balasan