Simulasi LED dan Push Button ESP32 dan MicroPython 2

Simulasi LED dan Push Button ESP32 dan MicroPython 2

Assalamualaikum, pada tutorial kali ini kita akan mencoba untuk mengeksplor microPython lebih dalam lagi. Kali ini kita akan mencoba untuk mengendalikan 5 buah LED dengan menggunakan 1 tombol saja. 5 LED akan kita hidupkan satu persatu dengan cara menekan tombol. Jika tombol ditekan 1 kali lampu 1 on, jika tombol ditekan lagi lampu 2 on dst. Untuk yang baru berkunjung, kamu bisa buka kembali post sebelumnya tentang Simulasi LED dan Push Button ESP32 dan MicroPython 1

Baiklah, tanpa panjang lebar lagi, langsung saja kita mulai

Persiapan Awal

Arahkan browser kamu ke https://wokwi.com/, cari microPython, lalu klik tombol new project dan pilih Micropython on ESP32.

Gambar Rangkaian 1 LED

Kita akan menggunakan 5 buah LED dan 1 buah tombol push button. Rangkaian push button juga membutuhkan sebuah resistor 10K ohm agar penekanan tombol tidak mengambang. Buatlah rangkaian seperti gambar dibawah ini:

Menulis Program / Coding

Setelah rangkaian selesai dibuat, kita arahkan fokus kita ke panel sebelah kiri untuk menulis program. Program kali ini agak sedikit panjang, namun saya akan coba untuk menjelaskannya satu persatu secara detail.

Langkah pertama kita panggil 2 modul machine dan time supaya kita bisa mengendalikan pin pada ESP32 dan membuat delay /sleep dengan mengetikkan:

from machine import Pin
from time import sleep

Berikutnya kita buat sebuah variabel dalam bentuk list untuk mendaftarkan semua pin LED yang akan kita gunakan dengan cara:

from machine import Pin
from time import sleep

led_pins = [16, 17, 18, 19, 21]

Karena kita menggunakan pin 16,17,18, 19 dan 21 maka list harus berisi angka-angka tersebut. Jika kalian menggunakan pin lain, silahkan sesuaikan dengan nomor pin yang digunakan.

Selanjutnya kita buat variabel dengan list comprehension yang berupa list baru berdasarkan list yang sudah ada sebelumnya. Sebelumnya kita sudah membuat list bernama “led_pins” yang menentukan pin mana saja yang akan digunakan, namun kita belum menugaskan pin-pin tersebut sebagai output. nah, list comprehension ini akan membuat list baru berdasarkan list “led_pins” dengan tambahan fungsi output. Cara ini jauh lebih gampang jiika dibandingkan harus membuat variabel untuk masing-masing pin. caranya:

from machine import Pin
from time import sleep

led_pins = [16, 17, 18, 19, 21]
leds = [Pin(pin, Pin.OUT) for pin in led_pins]

Sampai disini kita sudah memberi tugas kepada 5 buah pin sebagai output untuk menghidupkan LED. Berikutnya kita buat variabel “button” dan menugaskan pin 15 sebagai input.

led_pins = [16, 17, 18, 19, 21]
leds = [Pin(pin, Pin.OUT) for pin in led_pins]
button = Pin(15, Pin.IN)

Buat lagi dua buah variabel yang berfungsi untuk melacak status tekanan tombol. Variabel pertama bernama current_led dan diberi nilai awal 0. Variabel ini berfungsi untuk melacak jumlah tekanan tombol. Variabel yang kedua diberi nama button_pressed dengan nilai awal false. Variabel ini akan melacak status tekanan tombol sedang ditekan atau tidak. Jika sedang ditekan, maka button_pressed akan bernilai true dan sebaliknya.

led_pins = [16, 17, 18, 19, 21]  # GPIO untuk LED
leds = [Pin(pin, Pin.OUT) for pin in led_pins]
button = Pin(15, Pin.IN)  # Tombol dengan pull-down resistor

current_led = 0
button_pressed = False

Saat mesin pertama kali hidup, saya ingin secara default semua LED tidak menyala. Untuk itu maka kita perlu mendefinisikan sebuah fungsi yang bernama clear_leds(). Fungsi ini akan dibaca pertama kali sebelum loop terjadi untuk memastikan semua LED mati saat start.

current_led = 0
button_pressed = False

def clear_leds():
    for led in leds:
        led.value(0)

Setelah itu, panggil fungsi clear_leds dan tambahkan perintah print untuk monitoring lewat console

def clear_leds():
    for led in leds:
        led.value(0)

clear_leds()
print("Program dimulai. Semua LED dimatikan.")

Berikutnya kita masuk ke loop utama. Semua logika untuk membaca tombol, memodifikasi status LED, dan mengatur debounce tombol berada di dalam loop ini. Sama seperti sebelumnya, kita mulai dengan while True:

while True:

Dibawah nya, kita tambahkan logika if untuk mengendalikan LED dengan tekanan push button.

while True:
    if button.value() == 0 and not button_pressed:
        button_pressed = True
        current_led += 1

Logika if diatas mempunyai 2 kondisi yang harus terpenuhi, yaitu nilai button.value() bernilai 0 yang artinya tombol sedang ditekan dan not button_pressed yang artinya variabel button_pressed sedang bernilai false. Jika diterjemahkan, “jika tombol sedang ditekan dan variabel button_pressed bernilai false maka……”

dibawah baris logika if kita tambahkan tugas yang harus dilakukan jika kedua kondisi diatas terpenuhi yaitu merubah variabel button_pressed menjadi True dan menambahkan nilai current_led menjadi 1.

Variabel current_led saat program pertama kali dijalankan adalah 0, dengan perintah current_led +=1 maka current_led berubah nilainya menjadi 0 + 1 = 1. Nilai ini nantinya akan menentukan LED mana yang akan hidup. jika nilai current_led = 1 maka lampu 1 akan hidup, jika bernilai 3 maka lampu ke 3 akan hidup.

Berikutnya saya ingin membuat semua LED mati saat tekanan ke 6 (karena hanya ada 5 LED). Untuk itu kita perlu mengembalikan nilai current_led menjadi 0 saat current_led bernilai 6 atau lebih dari 5. caranya, kita tambahkan logika if baru dibawah logika if sebelumnya (perlu diingat bahwa indentasi sangat penting) :

while True:
    if button.value() == 0 and not button_pressed:
        button_pressed = True
        current_led += 1

        if current_led > 5:
            current_led = 0

Sampai disini kita sudah berhasil membuat status tekan tombol dan pendeteksi tekanan. Langkah berikutnya, kita akan menghidupkan lampu LED berdasarkan nilai current_led.

Pertama-tama, kita matikan semua lampu LED dengan fungsi clear_leds()

        if current_led > 5:
            current_led = 0

        clear_leds()

Berikutnya kita hidupkan lampu LED satu persatu secara bergantian dengan memanfaatkan nilai current_led. Jika nilai current_led lebih besar dari 0, maka program akan memerintahkan lampu untuk hidup berdasarkan list yang dibuat sebelumnya dan jika nilai lebih dari 5 dan kembali ke 0 maka semua lampu akan mati. Tambahkan juga fungsi print untuk monitoring lampu.

        clear_leds()  
        if current_led > 0:
            leds[current_led - 1].value(1)  #nyalakan LED sesuai nilai current_led
            print(f"Tombol ditekan. LED {current_led} menyala.")
        else:
            print("Tombol ditekan. Semua LED mati.")

        sleep(0.2)  # Debouncing tombol, supaya pembacaan tidak melayang antara HIGH / LOW

Terakhir, kita tambahkan deteksi pelepasan tombol dan merubah variabel button_pressed menjadi false kembali saat tombol dilepas. Untuk menjalankan logika ini, kita tambahkan logika if dengan kondisi “jika tombol dilepas (bernilai 1), maka variabel button_pressed menjadi false”

    if button.value() == 1:
        button_pressed = False

Tanpa logika ini, tombol tidak akan berfungsi sebagaimana mestinya.

Keseluruhan program dapat kita lihat dibawah ini:

from machine import Pin
from time import sleep

# Inisialisasi LED dan tombol
led_pins = [16, 17, 18, 19, 21]  # GPIO untuk LED
leds = [Pin(pin, Pin.OUT) for pin in led_pins]
button = Pin(15, Pin.IN)  # Tombol dengan pull-down resistor

# Variabel untuk melacak status
current_led = 0
button_pressed = False

# Fungsi untuk mematikan semua LED
def clear_leds():
    for led in leds:
        led.value(0)

# Matikan semua LED saat awal
clear_leds()
print("Program dimulai. Semua LED dimatikan.")

while True:
    # Periksa apakah tombol ditekan
    if button.value() == 0 and not button_pressed:
        button_pressed = True
        current_led += 1

        # Reset saat tekanan ke-6
        if current_led > 5:
            current_led = 0

        # Update LED berdasarkan tekanan
        clear_leds()  # Matikan semua LED
        if current_led > 0:
            leds[current_led - 1].value(1)  # Nyalakan LED yang sesuai
            print(f"Tombol ditekan. LED {current_led} menyala.")
        else:
            print("Tombol ditekan. Semua LED mati.")

        sleep(0.2)  # Debouncing tombol

    # Deteksi pelepasan tombol
    if button.value() == 1:
        button_pressed = False

Saya juga sudah menambahkan beberapa komentar untuk mempermudah pembacaan program.

Hasil

Akhirnya selesai sudah seluruh rangkaian proses simulasi dan kita bisa langsung coba simulasikan hasil rangkaian dan program yang telah buat dengan cara klik tombol start simulation pada panel bagian kanan. Hasilnya akan terlihat seperti video dibawah ini:

Demikian untuk tutorial kali ini, sampai jumpa di tutorial berikutnya.

Simulasi Input Push Button dengan ESP32 dan MicroPython

Simulasi Input Push Button dengan ESP32 dan MicroPython

Assalamualaikum, Tutorial inii adalah lanjutan dari rangkaian tutorial simulasi ESP32 dan MicroPython dengan menggunakan simulator Wokwi. Pada tutorial ini kita akan memperagakan cara menerima input dari sebuah push button. Input dari push button ini nantinya akan kita manfaatkan untuk mengendalikan beberapa buah LED. Selain itu kita akan mempelajari beberapa fungsi dasar yang biasa digunakan. Langsung saja, yuk kita mulai

Seperti biasa, arahkan browser kamu ke wokwi.com, cari menu MicroPython, klik tombol new project dan pilih MicroPython on ESP32

Membuat Rangkaian

Langkah pertama dalam project ini adalah membuat rangkaian. Buatlah rangkaian pada panel sebelah kanan seperti gambar dibawah ini

Menulis Program / Coding

Supaya pin pada ESP32 bisa di program dan digunakan, maka kita perlu mengimpor class Pin yang terdapat pada modul machine. Class Pin ini berfungsi untuk mengatur fungsi input dan output untuk pin yang akan kita gunakan. Selain itu, kita juga perlu menggunakan modul time untuk mengatur delay waktu. Supaya kita bisa menggunakan ke dua modul tersebut, ketikkan dua baris dibawah ini pada panel sebelah kiri wokwi.

from machine import Pin
from time import sleep

Berikutnya, kita konfigurasikan pin yang akan kita gunakan sebagai input. Buatlah sebuah object bernama “button” yang merujuk pada penggunaan Pin 15 sebagai input (Pin.IN).

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN) 

Sekarang kita masuk ke program utama. ketikkan while True: agar perintah-perintah yang berada dalam indentasi fungsi ini berjalan berulang-ulang (loop) selama mesin hidup.

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN) 

while True:

Ketika kita menekan tombol, ESP32 akan membaca nilai 0 dari rangkaian dan untuk membuktikan bahwa tombol sedang ditekan, kita akan membuat console menampilkan pesan “tombol ditekan”.

Kondisi ini bisa kita tuliskan dalam bentuk perintah ini:

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN, Pin.PULL_UP)

while True:
    if button.value() == 0:
        print("Tombol ditekan")
    if button.value() == 0:
        print("Tombol ditekan")

Dua baris program diatas bermakna jika nilai pada rangkaian button terbaca bernilai 0, maka console akan mencetak tulisan “tombol ditekan”.

untuk membuat kondisi sebaliknya dimana nilai tombol terbaca bernilai 1, maka kita tambahkan else setelah logika if seperti ini:

    else:  
        print("Tombol dilepas")

lalu berikan delay waktu sebesar 0.1 detik dengan perintah sleep

   sleep(0.1)

Sampai disini program telah selesai dibuat. Keseluruhan program yang kia buat akan telihat seperti ini:

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN)

while True:
    if button.value() == 0:  
        print("tombol ditekan")
    else:  
        print("tombol dilepas")
    sleep(0.1)

Hasil

Sampai disini kita sudah bisa mencoba program dan rangkaian yang kita buat dengan menekan tombol start simulation (tombol hijau panel kanan). Jika rangkaian dan coding yang kita buat sudah benar maka console pada bagian bawah panel sebelah kanan akan terlihat seperti ini

Tombol dilepas
Tombol ditekan

Rangkaian ini bisa kita gunakan untuk berbagai keperluan seperti untuk mengaktifkan atau menonaktifkan sensor, menjadikan push button sebagai sensor, dan mengganti nilai dari suatu variabel dan lain sebagainya. Kita kan membahas beberapa penggunaan push button ini pada tulisan berikutnya.