Langsung ke konten
BerandaTutorial MicroPython ESP32/ESP8266 - Mengontrol Perangkat AC dengan Modul Relay via Web Server

Tutorial MicroPython ESP32/ESP8266 - Mengontrol Perangkat AC dengan Modul Relay via Web Server

Pada artikel ini, Arduino Indonesia akan membahas tentang 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 Belajar & Bangun Proyek IoT?

KLIK GAMBAR DI BAWAH INI UNTUK BELI TRAINER KIT ESP32

 

Klik gambar untuk pembelian

Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.




Bagikan tutorial iniWhatsApp ↗

Terima kasih sudah belajar bersama Arduino Indonesia.

← Kembali ke beranda

Komentar (0)