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 LED dan Push Button ESP32 dan MicroPython 1

Simulasi LED dan Push Button ESP32 dan MicroPython 1

Assalamualaikum, kembali lagi ke tutorial ESP32, MicroPython dan Wokwi. Pada tutorial ini kita kan menggabungkan project pengendalian LED dengan Project Input Push Button. Di akhir tutorial ini, kita akan menggunakan push button untuk mengendalikan beberapa LED dengan 1 push button dimana tiap LED akan on dan off saat tombol ditekan. Yuk ikuti projectnya

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 mulai dari pengendalian 1 LED on/off dengan push button. Buatlah rangkaian seperti gambar dibawah ini:

Menulis Program / coding

Sebelum menulis program ini, sebaiknya kita lihat kembali 2 program dari tutorial sebelumnya yaitu simulasi pengendalian LED dan simulasi input tombol supaya kita bisa mengintegrasikan input dan output pada tutorial ini dengan benar. ke dua program sebelumnya saya lampirkan dibawah ini:

Program on/off LED

from machine import Pin
from time import sleep

led = Pin(18, Pin.OUT)

while True:
  led.value(1)
  sleep(1)
  led.value(0)
  sleep(1)

Program input tombol

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)

Perhatikan kedua program diatas dengan seksama, kita akan mengintegrasikan atau menggabungkan baris-baris perintah yang ada di masing-masing program untuk mengendalikan LED dengan tekanan tombol.

Pertama, kita tambahkan 2 modul yang sama-sama digunakan oleh dua program sebelumnya yaitu

from machine import Pin
from time import sleep

Terdapat masing-masing 1 objek yaitu “led” pada program pengendalian LED dan “button” pada input tombol. “led” menjadikan Pin sebagai output dan “button” menjadikan pin sebagai input. Kita tambahkan kedua object ini kedalam program kita dan kita sesuaikan parameter pin sesuai nomor pin yang kita gunakan pada rangkaian. Kali ini saya juga akan menambahkan komentar sebagai catatan. Komentar ini bukan bagian dari program, hanya berfungsi sebagai note saja. Untuk menambahkan komentar, kita mulai dengan memberikan tanda #

from machine import Pin
from time import sleep

led = Pin(16, Pin.OUT) #object pin sebagai output
button = Pin(15, Pin.IN) #object pin sebagai input

Penulisan komentar pada program sebenarnya tidak wajib dilakukan, hanya saja untuk mempermudah pembacaan program maka penulisan komentar ini direkomendasikan untuk sering dikerjakan.

Berikutnya, kita akan membuat lampu LED menjadi on jika tombol ditekan dan off jika tombol dilepas.Dibawah ini adalah gabungan dari 2 program diatas juga. Ketiklah program dibawah ini dan perhatikan hasilnya dengan seksama.

from machine import Pin
from time import sleep

led = Pin(16, Pin.OUT) #object pin sebagai output
button = Pin(15, Pin.IN) #object pin sebagai input

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

JIka rangkaian dan program telah dibuat dengan benar, maka langkah berikutnya adalah memulai simulasi dengan cara menekan tombol start simulation pada panel sebelah kanan. Jika tombol ditekan, LED akan hidup dan sebaliknya jika tombol dilepas LED akan mati

LED ON

LED OFF

Untuk tutorial berikutnya, kita akan mengendalikan 5 buah led dengan 1 buah tombol dimana tiap lampu LED akan hidup satu persatu saat tombol ditekan. Sampai disini dulu, jangan mampir ke 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.

Simulasi Pengendalian LED dengan ESP32 dan MicroPython

Simulasi Pengendalian LED dengan ESP32 dan MicroPython

Tutorial ini adalah tutorial pertama dari seri simulator wokwi yang bisa kalian akses di helmydx.my.id. Dalam tutorial ini, kalian tidak membutuhkan perangkat keras ESP32 maupun komponen lainnya. Yang perlu dipersiapkan pada tutorial ini adalah sebuah komputer PC atau laptop yang terkoneksi dengan internet untuk mengakses simulator wokwi.

Baiklah tanpa panjang basa basi, kita masuki tutorial simulasi pengendalian LED dengan ESP32 dan MicroPython.

Langkah pertama, Bukalah browser di laptop kamu misalnya google chrome atau mozilla firefox, lalu buka laman https://wokwi.com/. Selanjutnya kalian akan melihat tampilan laman web seperti gambar dibawah ini. lakukan proses sign up / sign in dengan menggunakan akun google kalian masing-masing.

karena kita akan menggunakan ESP32 sebagai pengendali dan Micropython, maka kita scroll kebawah sampai kita temukan icon Micropython. Selain ESP32, Wokwi juga mendukung beberapa mikrokontroler lain seperti Arduino, STM32 dan Raspberry pi pico.

Setelah kalian klik MicroPython, kalian akan diarahkan ke halaman khusus berisi contoh project dan template simulasi yang menggunakan ESP32. Scroll sedikit kebawah, menuju bagian “Stater Templates”, lalu “NEW PROJECT” pilih jenis ESP32 yang kalian inginkan. Untuk tutorial ini saya akan menggunakan MicroPython on ESP32 sebagai template.

Setelah itu, kita akan melihat halaman simulator ESP32. Simulator ini terdiri dari dua panel utama yaitu panel rangkaian dan panel program. Di sebelah kanan layar kita adalah panel rangkaian, dan di sebelah kiri adalah panel program.

Membuat Rangkaian

Kita mulai dari membuat rangkaian elektronik sesuai yang kita inginkan. Pada tutorial ini kita akan mengontrol sebuah LED nyala dan mati secara bergantian dengan jeda waktu tertentu. Ikutilah gambar dibawah ini.

Untuk menambahkan LED, klik icon + yang ada dibagian kiri atas panel rangkaian dan pilih LED lalu Atur posisi LED sesuai keinginan. Setelah itu, langkah berikutnya adalah menghubungkan lampu LED ke terminal/pin yang terdapat pada ESP32. Kaki LED yang panjang (kaki A) selalu dihubungkan ke salah satu pin dengan notasi angka dan kaki LED yang pendek (kaki C) selalu dihubungkan ke pin GND. pola rangkaian ini berlaku untuk setiap LED yang akan digunakan. Untuk itu pola ini perlu diingat dan dipahami dengan baik.

Menulis Program.

Disini kita akan menggunakan MicroPython sebagai bahasa pemrograman utama, untuk itu kita perlu menghapus semua program yang terlihat pada panel sebelah kiri. lalu ketikkan code dibawah ini:

from machine import Pin
from time import sleep

led = Pin(18, Pin.OUT)
while True:
  led.value(1)
  sleep(1)
  led.value(0)
  sleep(1)

Penjelasan Program

from machine import Pin

Perintah ini dipergunakan untuk memanggil fungsi Pin pada modul machine. Modul machine ini digunakan untuk berinteraksi langsung dengan perangkat keras (hardware) pada ESP32. Dengan perintah ini, kita bisa mengendalikan pin-pin pada mikrokontroler tersebut.

from time import sleep

Dipergunakan memanggil perintah sleep untuk menunda eksekusi program dari modul time. Perintah sleep() digunakan untuk membuat program berhenti sejenak selama waktu tertentu (dalam satuan detik). perintah ini berguna untuk membuat jeda atau delay dalam program.

led = Pin(18, Pin.OUT)

membuat sebuah objek bernama “led” yang merepresentasikan pin nomor 18 dan diatur sebagai output (Pin.OUT). Jika kalian menggunakan lebih dari 1 LED, maka kalian harus membuat objek masing-masing led dengan pola seperti ini. Misalnya, jika kalian menggunakan 2 buah LED maka kalian harus membuat 2 objek untuk mempermudah pengendalian LED. untuk penamaan objek yang lebih dari 1 boleh saja diberi nama led1, led2, led3 dsb. Pastikan juga tiap nomor pin dalam parameter Pin sesuai dengan pin yang terhubung ke kaki LED.

while True:

Fungsi ini bermakna berulang terus menerus. semua baris perintah yang berada dibawah fungsi ini dan berindentasi (agak sedikit masuk kedalam) adalah program yang akan terus menerus di eksekusi sampai akhirnya mesin dihentikan.

led.value(1)

Memberikan nilai 1 pada objek led (pin 18). Memberikan nilai (value) 1 pada pin output akan membuat LED menyala. Nilai 1 umumnya mewakili tegangan positif (misalnya 3.3V atau 5V) yang diperlukan untuk menyalakan LED. sebaliknya memberikan nilai (value) 0 akan membuat LED mati.

sleep(1)

Menunda pembacaan program selama 1 detik. Setelah LED menyala, program akan berhenti sejenak selama 1 detik sebelum melanjutkan ke perintah berikutnya, yaitu led.value(0).

Dengan demikian, jika program dituliskan secara berurutan seperti dibawah ini:

while True:
  led.value(1)
  sleep(1)
  led.value(0)
  sleep(1)

Maka lampu LED akan menyala (led.value(1)) selama 1 detik (sleep(1)) lalu LED akan mati (led.value(0)) selama satu detik lalu mengulang kembali dari awal karena looping/perulangan terus menerus oleh while True.

Langkah selanjutnya, klik tombol play berwarna hijau untuk memulai pada panel rangkaian dan perhatikan apa yang terjadi. Jika rangkaian dan program dibuat dengan benar, maka pada saat simulasi dijalankan lampu LED akan hidup dan mati secara teratur.

Sekian tutorial pertama saya tentang simulasi pengendalian LED dengan ESP32 dan MicroPython ini. Semoga tutorialnya mudah dipahami dan bermanfaat bagi pembaca.