Pada artikel ini, Arduino Indonesia akan membahas tentang penggunaan relay bersama ESP32 atau ESP8266 sebagai cara efektif untuk mengontrol peralatan rumah tangga AC secara nirkabel. Tutorial ini menjelaskan cara mengontrol modul relay dengan ESP32 atau ESP8266 menggunakan firmware MicroPython.
Pengenalan Relay
Relay adalah saklar yang dioperasikan secara elektrik. Seperti saklar pada umumnya, relay dapat dihidupkan atau dimatikan untuk mengalirkan atau memutus arus listrik. Relay dapat dikendalikan dengan tegangan rendah (seperti 3.3V dari pin GPIO ESP32/ESP8266), sekaligus memungkinkan kita untuk mengontrol tegangan tinggi seperti 12V, 24V, atau bahkan tegangan bolak-balik (230V di Eropa dan 120V di Amerika).
Modul Relay 1, 2, 4, 8, dan 16 Channel
Tersedia modul relay dengan jumlah channel yang bervariasi. Anda dapat menemukan modul relay dengan satu, dua, empat, delapan, hingga enam belas channel. Jumlah channel menentukan banyaknya output yang dapat dikendalikan.
Terdapat modul relay yang elektromagnetnya dapat diberi daya dengan 5V maupun 3.3V. Keduanya kompatibel dengan ESP32 atau ESP8266 - Anda dapat menggunakan pin VIN (yang menyediakan 5V) atau pin 3.3V.
Selain itu, beberapa modul dilengkapi dengan optocoupler internal yang menambah "lapisan" proteksi ekstra dengan mengisolasi secara optik antara papan ESP dan rangkaian relay.
Rekomendasi modul relay:
- 5V 2-channel relay module (dengan optocoupler)
- 5V 1-channel relay module (dengan optocoupler)
- 5V 8-channel relay module (dengan optocoupler)
- 5V 16-channel relay module (dengan optocoupler)
- 3.3V 1-channel relay module (dengan optocoupler)
Baca juga: Tutorial MicroPython MQTT - Cara Publish Data Sensor DHT11/DHT22 di ESP32 & ESP8266
Pinout Relay
Sebagai contoh, lihat pinout dari modul relay 2-channel di bawah ini. Penggunaan modul relay dengan jumlah channel yang berbeda pada dasarnya serupa.
Di sisi kiri modul, terdapat dua set terminal untuk menghubungkan tegangan tinggi, sedangkan pin di sisi kanan (tegangan rendah) terhubung ke pin GPIO ESP.
Koneksi Tegangan AC
Modul relay yang terlihat pada foto sebelumnya memiliki dua konektor, masing-masing terdiri dari tiga terminal: COM (Common), NC (Normally Closed), dan NO (Normally Open).
- COM: Hubungkan ke sumber arus yang ingin dikontrol (tegangan AC/bolak-balik).
- NC (Normally Closed): Konfigurasi normally closed digunakan ketika Anda menginginkan relay tertutup secara default. Terminal NC dan COM terhubung, artinya arus akan mengalir kecuali Anda mengirim sinyal dari ESP ke modul relay untuk membuka sirkuit dan menghentikan aliran arus.
- NO (Normally Open): Konfigurasi normally open bekerja sebaliknya: tidak ada koneksi antara terminal NO dan COM, sehingga sirkuit terbuka kecuali Anda mengirim sinyal dari ESP untuk menutup sirkuit.
Pin Kontrol
Di sisi tegangan rendah, terdapat satu set dengan empat pin dan satu set dengan tiga pin. Set pertama terdiri dari VCC dan GND untuk catu daya modul, serta input 1 (IN1) dan input 2 (IN2) untuk mengontrol relay bawah dan relay atas secara berturut-turut.
Jika modul relay Anda hanya memiliki satu channel, Anda akan memiliki satu pin IN saja. Untuk empat channel, akan ada empat pin IN, dan seterusnya.
Sinyal yang dikirim ke pin IN menentukan apakah relay aktif atau tidak. Relay akan terpicu (ON) ketika input menerima sinyal LOW (tegangan di bawah ~2V). Artinya:
Konfigurasi Normally Closed (NC):
- Sinyal HIGH – arus MENGALIR (relay default tertutup)
- Sinyal LOW – arus TERPUTUS (relay terbuka)
Konfigurasi Normally Open (NO):
- Sinyal HIGH – arus TERPUTUS (relay default terbuka)
- Sinyal LOW – arus MENGALIR (relay tertutup)
Gunakan konfigurasi Normally Closed ketika arus seharusnya mengalir sebagian besar waktu, dan Anda hanya ingin menghentikannya sesekali.
Gunakan konfigurasi Normally Open ketika Anda ingin arus mengalir hanya sesekali (misalnya, untuk menyalakan lampu sesekali).
Pemilihan Catu Daya
Set kedua pin terdiri dari GND, VCC, dan JD-VCC. Pin JD-VCC khusus memberikan daya untuk elektromagnet relay. Perhatikan bahwa modul ini memiliki jumper cap yang menghubungkan pin VCC dan JD-VCC; pada gambar berwarna kuning, namun warna pada modul Anda mungkin berbeda.
Dengan jumper cap terpasang, pin VCC dan JD-VCC tersambung. Artinya, elektromagnet relay dialiri daya langsung dari pin catu daya ESP, sehingga modul relay dan rangkaian ESP tidak terisolasi secara fisik.
Tanpa jumper cap, Anda perlu menyediakan sumber daya terpisah untuk menyalakan elektromagnet relay melalui pin JD-VCC. Konfigurasi ini mengisolasi fisik relay dari ESP dengan optocoupler bawaan modul, yang melindungi ESP dari kerusakan akibat lonjakan listrik.
Menghubungkan Modul Relay ke ESP32/ESP8266
Peringatan: Pada contoh ini, kita berurusan dengan tegangan bolak-balik (AC). Kesalahan penggunaan dapat menyebabkan cedera serius. Jika Anda tidak terbiasa dengan tegangan AC, mintalah bantuan orang yang berpengalaman. Pastikan semuanya terputus dari sumber tegangan AC saat memprogram ESP atau merangkai sirkuit.
Sebagai alternatif yang lebih aman, Anda dapat menggunakan sumber daya 12V DC untuk mengontrol peralatan bertegangan 12V.
Skematik Diagram ESP32
Hubungkan modul relay ke ESP32 seperti yang ditunjukkan pada diagram berikut. Diagram ini menunjukkan rangkaian untuk modul relay 2-channel, prinsip yang sama berlaku untuk modul dengan jumlah channel berbeda.
Dalam contoh ini, kita mengontrol sebuah lampu. Karena kita hanya ingin menyalakan lampu sesekali, konfigurasi normally open (NO) lebih sesuai untuk digunakan.
Skematik Diagram ESP8266
Gunakan diagram skematik berikut sebagai panduan jika Anda menggunakan papan ESP8266.
Mengontrol Modul Relay – Kode MicroPython (Skrip)
Kode untuk mengontrol relay dengan ESP32 atau ESP8266 sederhananya sama seperti mengontrol LED atau output lainnya. Dalam contoh ini, karena kita menggunakan konfigurasi normally open (NO), kita perlu mengirim sinyal LOW untuk mengalirkan arus (relay ON), dan sinyal HIGH untuk menghentikan aliran arus (relay OFF).
Salin kode berikut ke file main.py dan unggah ke papan Anda. Kode ini akan menyalakan lampu Anda selama 10 detik, lalu mematikannya selama 10 detik berikutnya.
from machine import Pin
from time import sleep
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
while True:
# RELAY ON
relay.value(0)
sleep(10)
# RELAY OFF
relay.value(1)
sleep(10)
Penjelasan Kode
Pertama, impor kelas Pin dari modul machine untuk berinteraksi dengan GPIO. Kita juga mengimpor metode sleep() dari modul time untuk memberikan jeda waktu.
from machine import Pin
from time import sleep
Selanjutnya, kita membuat objek Pin bernama relay pada pin 26 (jika menggunakan ESP32) dan mengaturnya sebagai output.
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
Jika Anda menggunakan ESP8266, gunakan GPIO 5 sebagai gantinya. Berikan komentar pada baris sebelumnya dan hapus komentar pada baris berikut.
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
Di dalam perulangan while, kirim sinyal LOW untuk menyalakan lampu selama 10 detik.
# RELAY ON
relay.value(0)
sleep(10)
Jika Anda menggunakan konfigurasi normally closed (NC), kirim sinyal HIGH untuk menyalakan lampu.
Hentikan aliran arus dengan mengirim sinyal HIGH ke pin relay. Jika Anda menggunakan konfigurasi normally closed (NC), kirim sinyal LOW untuk menghentikan aliran arus.
# RELAY OFF
relay.value(1)
sleep(10)
Mengontrol Modul Relay dengan Web Server MicroPython
Pada bagian ini, kami telah membuat contoh web server yang memungkinkan Anda mengontrol relay secara nirkabel melalui antarmuka web.
boot.py
Salin kode berikut ke dalam file boot.py Anda.
try:
import usocket as socket
except:
import socket
from machine import Pin
import network
import esp
esp.osdebug(None)
import gc
gc.collect()
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
while station.isconnected() == False:
pass
print('Connection successful')
print(station.ifconfig())
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
Masukkan kredensial jaringan Anda ke dalam variabel berikut:
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
Hapus komentar pada salah satu baris berikut sesuai dengan papan yang Anda gunakan. Secara default, kode diatur untuk menggunakan pin GPIO ESP32.
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
main.py
Salin kode berikut ke dalam file main.py Anda.
def web_page():
if relay.value() == 1:
relay_state = ''
else:
relay_state = 'checked'
html = """<html><head><meta name="viewport" content="width=device-width, initial-scale=1"><style>
body{font-family:Arial; text-align: center; margin: 0px auto; padding-top:30px;}
.switch{position:relative;display:inline-block;width:120px;height:68px}.switch input{display:none}
.slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#ccc;border-radius:34px}
.slider:before{position:absolute;content:"";height:52px;width:52px;left:8px;bottom:8px;background-color:#fff;-webkit-transition:.4s;transition:.4s;border-radius:68px}
input:checked+.slider{background-color:#2196F3}
input:checked+.slider:before{-webkit-transform:translateX(52px);-ms-transform:translateX(52px);transform:translateX(52px)}
</style><script>function toggleCheckbox(element) { var xhr = new XMLHttpRequest(); if(element.checked){ xhr.open("GET", "/?relay=on", true); }
else { xhr.open("GET", "/?relay=off", true); } xhr.send(); }</script></head><body>
<h1>ESP Relay Web Server</h1><label class="switch"><input type="checkbox" onchange="toggleCheckbox(this)" %s><span class="slider">
</span></label></body></html>""" % (relay_state)
return html
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
while True:
try:
if gc.mem_free() < 102000:
gc.collect()
conn, addr = s.accept()
conn.settimeout(3.0)
print('Got a connection from %s' % str(addr))
request = conn.recv(1024)
conn.settimeout(None)
request = str(request)
print('Content = %s' % request)
relay_on = request.find('/?relay=on')
relay_off = request.find('/?relay=off')
if relay_on == 6:
print('RELAY ON')
relay.value(0)
if relay_off == 6:
print('RELAY OFF')
relay.value(1)
response = web_page()
conn.send('HTTP/1.1 200 OK\n')
conn.send('Content-Type: text/html\n')
conn.send('Connection: close\n\n')
conn.sendall(response)
conn.close()
except OSError as e:
conn.close()
print('Connection closed')
Demonstrasi
Setelah melakukan penyesuaian yang diperlukan, unggah file boot.py dan main.py ke papan Anda. Tekan tombol EN/RST, dan di Shell Anda akan mendapatkan alamat IP ESP.
Selanjutnya, buka browser dalam jaringan lokal Anda dan ketikkan alamat IP ESP untuk mengakses web server.
Anda akan melihat halaman web dengan tombol toggle yang memungkinkan Anda mengontrol relay dari jarak jauh menggunakan smartphone atau komputer.
Kotak Enklosur untuk Keamanan
Untuk proyek akhir, pastikan Anda menempatkan modul relay dan ESP di dalam kotak enklosur agar terminal AC tidak terbuka dan terhindar dari sentuhan langsung.
Baca juga: Tutorial MicroPython ESP32 - WiFi Manager (Kompatibel ESP8266)
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino







.png)






0 on: "MicroPython ESP32/ESP8266 - Cara Mengontrol Modul Relay Menggunakan Web Server"