Tutorial IoT: Mengontrol Relay dengan ESP32/ESP8266 dan MQTT

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 atau 3.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

  1. Konfigurasi: Di bagian paling atas, kamu wajib mengubah ssid dan pass sesuai dengan jaringan WiFi-mu. mqtt_server adalah alamat server perantara pesan kita, kita gunakan broker.emqx.io yang gratis dan publik. client_id harus unik agar tidak bentrok dengan perangkat lain di broker yang sama.
  2. 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 sinyal LOW dan mati saat diberi sinyal HIGH.
  3. 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.
  4. setup(): Fungsi ini hanya berjalan sekali saat perangkat pertama kali dinyalakan. Ia menginisialisasi Serial Monitor untuk debugging, mengatur relayPin sebagai OUTPUT, memulai koneksi WiFi dan MQTT, serta mendaftarkan fungsi messageReceived() sebagai handler pesan masuk.
  5. 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.

  1. Download MQTT Client: Kamu bisa menggunakan MQTT X untuk desktop atau aplikasi seperti MQTT Client di Android/iOS.
  2. Konfigurasi Client:
    • Host/Broker: broker.emqx.io
    • Port: 1883
    • Biarkan username dan password kosong (untuk broker publik ini).
    • Hubungkan client ke broker.
  3. 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”.

Integrasi Dengan UnIoT

Untuk bisa mengontrol relay dengan UnIoT hanya dengan memasukkan broker, port dan juga topik pada halaman button settings.


Diterbitkan

dalam

oleh

Tags:

Comments

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *