Tutorial ini adalah panduan langkah demi langkah untuk membangun Web Server mandiri pada ESP32 atau ESP8266 NodeMCU yang mengontrol modul relay apa pun menggunakan firmware MicroPython. Kami akan membuat Web Server di ESP32/ESP8266 yang responsif di perangkat seluler dan dapat diakses oleh perangkat apa pun yang memiliki browser dalam jaringan lokal Anda.
Mengenal Relay
Relay adalah sakelar yang dioperasikan secara elektrik. Seperti sakelar pada umumnya, ia dapat dihidupkan (ON) atau dimatikan (OFF), mengizinkan arus mengalir atau tidak. Relay dapat dikontrol dengan tegangan rendah (seperti 3.3V dari GPIO ESP32/ESP8266) dan memungkinkan kita untuk mengontrol tegangan tinggi seperti 12V, 24V, atau tegangan listrik rumah (230V di Eropa dan 120V di AS).
Terdapat berbagai modul relay dengan jumlah saluran (channel) yang berbeda. Anda dapat menemukan modul relay dengan satu, dua, empat, delapan, hingga enam belas saluran. Jumlah saluran menentukan berapa banyak output yang dapat Anda kontrol.
Menghubungkan Modul Relay ke ESP32/ESP8266
Peringatan: Dalam contoh ini, kita berurusan dengan tegangan listrik rumah (AC). Penggunaan yang salah dapat menyebabkan cedera serius. Jika Anda tidak familiar dengan tegangan AC, mintalah bantuan seseorang yang berpengalaman. Saat memprogram ESP atau merangkai sirkuit, pastikan semuanya terputus dari sumber tegangan AC. Sebagai alternatif, Anda dapat menggunakan sumber daya 12V untuk mengontrol perangkat bertegangan 12V.
Diagram Skematik ESP32
Hubungkan modul relay ke ESP32 seperti yang ditunjukkan pada diagram berikut. Diagram menunjukkan rangkaian untuk modul relay 2-channel, namun prinsipnya serupa untuk jumlah channel yang berbeda.
Dalam contoh ini, kita mengontrol sebuah lampu. Karena kita hanya ingin menyalakan lampu sesekali, konfigurasi normally open (terbuka saat tidak aktif) lebih cocok.
Kami menghubungkan pin IN1 ke GPIO 26, namun Anda dapat menggunakan GPIO lain yang sesuai.
Diagram Skematik ESP8266 NodeMCU
Ikuti diagram skematik berikut jika Anda menggunakan ESP8266 NodeMCU.
Kami menghubungkan pin IN1 ke GPIO 5, tetapi Anda dapat menggunakan GPIO lain yang sesuai.
GPIO ESP8266 terbaik untuk digunakan dengan relay adalah: GPIO 5, GPIO 4, GPIO 14, GPIO 12, dan GPIO 13.
Kode Web Server Relay MicroPython (Skrip)
Kode untuk mengontrol relay dengan ESP32 atau ESP8266 sesederhana mengontrol LED atau output lainnya. Dalam contoh ini, karena kita menggunakan konfigurasi normally open, kita perlu mengirimkan 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)
Cara Kerja Kode
Impor kelas `Pin` dari modul `machine` untuk berinteraksi dengan GPIO. Kami juga mengimpor metode `sleep()` dari modul `time` untuk memberikan jeda waktu (delay).
from machine import Pin
from time import sleep
Kemudian, kami mendefinisikan objek `Pin` bernama `relay` pada pin 26 (jika Anda menggunakan ESP32) dan mengaturnya sebagai output.
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
Jika Anda menggunakan ESP8266, gunakan GPIO 5. Komentari baris sebelumnya dan hapus komentar pada baris berikut.
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
Di dalam perulangan `while`, kirimkan sinyal LOW untuk menyalakan lampu selama 10 detik.
# RELAY ON
relay.value(0)
sleep(10)
Jika Anda menggunakan konfigurasi normally closed (tertutup saat tidak aktif), kirimkan sinyal HIGH untuk menyalakan lampu.
Hentikan aliran arus dengan mengirimkan sinyal HIGH ke pin relay. Jika menggunakan konfigurasi normally closed, kirimkan sinyal LOW untuk menghentikan aliran arus.
# RELAY OFF
relay.value(1)
sleep(10)
Mengontrol Modul Relay dengan Web Server MicroPython
boot.py
Salin kode berikut ke 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 (SSID dan password Wi-Fi) 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 GPIO ESP32.
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
main.py
Salin kode berikut ke 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 perubahan 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.
Kemudian, buka browser di jaringan lokal Anda dan ketikkan alamat IP ESP untuk mengakses web server.
Anda akan mendapatkan halaman web dengan tombol toggle yang memungkinkan Anda mengontrol relay dari jarak jauh menggunakan smartphone atau komputer.
Enclosure untuk Keamanan
Untuk proyek akhir, pastikan Anda menempatkan modul relay dan ESP di dalam sebuah enclosure (kotak pelindung) untuk menghindari paparan langsung pin-pin tegangan AC.
Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?
Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami!



.png)







0 on: "Tutorial MicroPython ESP32/ESP8266 - Mengontrol Perangkat AC dengan Modul Relay via Web Server"