Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Senin, 12 Januari 2026

Panduan Lengkap MicroPython ESP32 & ESP8266 - Interrupt GPIO

Pada artikel ini, Arduino Indonesia akan membahas tentang cara mengonfigurasi dan menangani interrupt menggunakan firmware MicroPython pada papan ESP32 dan ESP8266. Anda juga akan membangun contoh proyek dengan Sensor Gerak PIR.

Pengenalan Interrupt

Interrupt berguna untuk membuat sesuatu terjadi secara otomatis dalam program mikrokontroler dan dapat membantu menyelesaikan masalah sinkronisasi. Dengan interupsi, Anda tidak perlu terus-menerus memeriksa nilai pin. Saat perubahan terdeteksi, sebuah event dipicu (fungsi dipanggil).

 

Ketika interrupt terjadi, prosesor menghentikan eksekusi program utama untuk menjalankan tugas tertentu, kemudian kembali ke program utama seperti yang ditunjukkan pada gambar di bawah.

Ini sangat berguna untuk memicu suatu aksi setiap kali gerakan terdeteksi atau tombol ditekan, tanpa perlu terus-menerus memeriksa statusnya.

- Pin interrupt ESP32: Anda dapat menggunakan semua GPIO sebagai interrupt, kecuali GPIO 6 hingga GPIO 11.

- Pin interrupt ESP8266: Anda dapat menggunakan semua GPIO, kecuali GPIO 16.

Mengatur Interrupt di MicroPython

Untuk mengatur interrupt di MicroPython, ikuti langkah-langkah berikut:

1. Tentukan fungsi penanganan interrupt (interrupt handler).

Fungsi penanganan interupsi harus sesederhana mungkin agar prosesor dapat segera kembali ke program utama. Pendekatan terbaik adalah memberi sinyal ke kode utama bahwa interrupt telah terjadi, misalnya dengan menggunakan variabel global. Fungsi ini harus menerima satu parameter bertipe Pin, yang merujuk pada GPIO yang memicu interrupt.

 

def handle_interrupt(pin):

 

2. Atur GPIO yang akan berfungsi sebagai pin interrupt sebagai input. Contoh:

 

pir = Pin(14, Pin.IN)

 

3. Lampirkan interrupt ke pin tersebut dengan memanggil metode irq():

 

pir.irq(trigger=Pin.IRQ_RISING, handler=handle_interrupt)

 

Metode irq() menerima argumen berikut:

- trigger: Menentukan mode pemicu. Ada 3 kondisi:

    - Pin.IRQ_FALLING: Memicu interrupt saat pin berubah dari HIGH ke LOW.

    - Pin.IRQ_RISING: Memicu interrupt saat pin berubah dari LOW ke HIGH.

    - 3: Memicu interupsi pada kedua tepi (both edges), yaitu saat ada perubahan apa pun.

- handler: Fungsi yang akan dipanggil saat interupsi terdeteksi, dalam hal ini fungsi handle_interrupt().

Contoh Proyek dengan Sensor Gerak PIR

Untuk mendemonstrasikan penanganan interrupt, kami akan membangun proyek sederhana dengan sensor gerak PIR. Setiap kali gerakan terdeteksi, sebuah LED akan menyala selama 20 detik.

Komponen yang Diperlukan

Berikut daftar komponen untuk merakit rangkaian:

- ESP32 atau ESP8266

- LED 5mm

- Resistor 330 Ohm

- Sensor gerak PIR mini (AM312) atau PIR motion sensor (HC-SR501)

- Breadboard

- Kabel jumper

 

Baca juga:  

Diagram Rangkaian – ESP32

Gunakan diagram skematik berikut sebagai panduan jika Anda menggunakan papan ESP32:

 


Diagram Rangkaian – ESP8266

Gunakan diagram skematik berikut sebagai panduan jika Anda menggunakan papan ESP8266:



Penting: Sensor Gerak PIR Mini AM312 yang digunakan dalam proyek ini beroperasi pada 3.3V. Namun, jika Anda menggunakan sensor PIR lain seperti HC-SR501, sensor tersebut beroperasi pada 5V. Anda dapat memodifikasinya untuk beroperasi pada 3.3V atau cukup memberinya daya menggunakan pin Vin.

 

Pada gambar di bawah, kami menyertakan pinout untuk sensor gerak PIR Mini AM312. Jika Anda menggunakan sensor gerak lain, harap periksa pinout-nya sebelum merakit rangkaian.

Kode Program

Berikut adalah skrip yang mendeteksi gerakan dan menyalakan LED setiap kali gerakan terdeteksi. Kode ini kompatibel untuk ESP32 dan ESP8266.

 

from machine import Pin

from time import sleep


motion = False


def handle_interrupt(pin):

  global motion

  motion = True

  global interrupt_pin

  interrupt_pin = pin 


led = Pin(12, Pin.OUT)

pir = Pin(14, Pin.IN)


pir.irq(trigger=Pin.IRQ_RISING, handler=handle_interrupt)


while True:

  if motion:

    print('Motion detected! Interrupt caused by:', interrupt_pin)

    led.value(1)

    sleep(20)

    led.value(0)

    print('Motion stopped!')

    motion = False 

 

Penjelasan Kode

Untuk menggunakan interrupt, impor kelas Pin dari modul machine. Kami juga mengimpor metode sleep dari modul time untuk memberikan jeda dalam skrip.

 

from machine import Pin

from time import sleep

 

Buat variabel bernama motion yang dapat bernilai True atau False. Variabel ini akan menunjukkan apakah gerakan terdeteksi atau tidak (ini adalah variabel global yang akan diubah oleh fungsi penanganan interrupt).

 

motion = False

 

Kemudian, buat sebuah fungsi bernama handle_interrupt.

 

def handle_interrupt(pin):

  global motion

  motion = True

  global interrupt_pin

  interrupt_pin = pin 

 

Fungsi ini akan dipanggil setiap kali gerakan terdeteksi. Fungsi handle_interrupt memiliki parameter input (pin) yang akan menerima objek dari kelas Pin saat interrupt terjadi (menunjukkan pin mana yang memicu interrupt).

 

Di sini, kami menyimpan pin yang memicu interrupt ke dalam variabel interrupt_pin. Dalam contoh ini, hal tersebut tidak terlalu berguna karena kami hanya memiliki satu pin interrupt. Namun, ini dapat berguna jika terdapat beberapa interrupt yang memicu fungsi penanganan yang sama dan kita ingin mengetahui GPIO mana yang menyebabkannya.

 

Dalam contoh kami, fungsi handle_interrupt hanya mengubah variabel motion menjadi True dan menyimpan pin interrupt. Sebaiknya fungsi penanganan interrupt dibuat sesingkat mungkin dan hindari menggunakan fungsi print() di dalamnya. Selanjutnya, kode utama yang akan menangani semua tindakan yang diinginkan saat interupsi terjadi.

 

Catatan: Agar variabel motion dapat digunakan di dalam fungsi dan seluruh kode, variabel tersebut harus dideklarasikan sebagai global. Jika tidak, saat gerakan terdeteksi tidak akan terjadi apa-apa, karena variabel motion hanya akan berubah di dalam fungsi dan bukan di bagian utama kode.

 

Melanjutkan kode, kita perlu membuat dua objek Pin. Satu untuk LED di GPIO 12, dan satu lagi untuk sensor gerak PIR di GPIO 14.

 

led = Pin(12, Pin.OUT)

pir = Pin(14, Pin.IN)

 

Kemudian, atur interupsi pada sensor pir dengan memanggil metode irq().

 

pir.irq(trigger=Pin.IRQ_RISING, handler=handle_interrupt)

 

Di dalam fungsi loop(), saat variabel motion bernilai True, kami menyalakan LED selama 20 detik dan mencetak pesan yang menunjukkan bahwa gerakan terdeteksi serta pin mana yang memicu interupsi.

 

if motion:

  print('Motion detected! Interrupt caused by:', interrupt_pin)

  led.value(1)

  sleep(20)

 

Setelah 20 detik, matikan LED, dan cetak pesan yang menunjukkan bahwa gerakan telah berhenti.

 

led.value(0)

print('Motion stopped!')

 

Terakhir, setel variabel `motion` kembali ke False:

 

motion = False

 

Variabel motion hanya dapat kembali menjadi True jika gerakan terdeteksi dan fungsi handle_interrupt dipanggil.

 

Untuk kesederhanaan, dalam contoh ini kami menggunakan jeda (delay) untuk menjaga LED menyala selama 20 detik. Idealnya, Anda sebaiknya menggunakan timer.

Demonstrasi

Unggah kode ke papan ESP32/ESP8266 Anda. LED akan menyala selama 20 detik saat gerakan terdeteksi, dan pesan akan dicetak di Shell.



Setelah 20 detik, LED akan mati.

 

Baca juga: Tutorial MicroPython ESP32/ESP8266 - Membaca Input Analog (ADC)

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

0 on: "Panduan Lengkap MicroPython ESP32 & ESP8266 - Interrupt GPIO "