Pada artikel ini, Arduino Indonesia akan membahas tentang cara berinteraksi dengan GPIO ESP32 dan ESP8266 menggunakan MicroPython. Kami akan menunjukkan cara membaca input digital dan analog, cara mengontrol output digital, dan cara menghasilkan sinyal PWM.
Gambaran Proyek
Dengan tutorial ini, Anda akan mempelajari cara menggunakan GPIO ESP32 atau ESP8266 dengan MicroPython. Anda dapat membaca panduan terpisah untuk setiap topik:
- Membaca input digital
- Mengontrol output digital
- Membaca input analog
- Menghasilkan sinyal PWM
Kami akan membangun contoh sederhana yang bekerja sebagai berikut:
- Baca status sebuah pushbutton dan atur status LED sesuai – saat Anda menekan pushbutton, LED akan menyala.
- Baca tegangan dari sebuah potensiometer dan redupkan LED sesuai dengan posisi tuas potensiometer.
Rangkaian
Rangkaian untuk proyek ini melibatkan penyambungan dua LED, sebuah pushbutton, dan sebuah potensiometer. Berikut daftar semua komponen yang diperlukan untuk merangkai sirkuit:
- ESP32 atau ESP8266
- 2x LED
- 2x Resistor 330 Ohm
- Pushbutton
- Potensiometer
- Breadboard
- Kabel jumper
ESP32 – Diagram Rangkaian
Gunakan diagram skematik berikut sebagai panduan jika Anda menggunakan papan ESP32:
Catatan: ESP32 mendukung pembacaan analog pada beberapa GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, dan 39.
ESP8266 – Diagram Rangkaian
Gunakan diagram skematik berikut sebagai panduan jika Anda menggunakan papan ESP8266:
Catatan: ESP8266 hanya mendukung pembacaan analog pada pin ADC0 (A0).
Kode Program
Salin kode berikut ke file main.py di uPyCraft IDE.
Catatan: Pembacaan analog bekerja berbeda pada ESP32 dan ESP8266. Kode ini langsung berfungsi pada ESP32. Untuk digunakan dengan ESP8266, Anda harus menghapus komentar dan memberi komentar pada baris yang dijelaskan dalam skrip MicroPython.
from machine import Pin, ADC, PWM
from time import sleep
led = Pin(2, Pin.OUT)
button = Pin(15, Pin.IN)
#Configure ADC for ESP32
pot = ADC(Pin(34))
pot.width(ADC.WIDTH_10BIT)
pot.atten(ADC.ATTN_11DB)
#Configure ADC for ESP8266
#pot = ADC(0)
led_pwm = PWM(Pin(4),5000)
while True:
button_state = button.value()
led.value(button_state)
pot_value = pot.read()
led_pwm.duty(pot_value)
sleep(0.1)
Penjelasan Kode
Mengimpor Library
Untuk berinteraksi dengan GPIO, Anda perlu mengimpor modul machine yang berisi kelas-kelas untuk berinteraksi dengan GPIO. Impor kelas Pin untuk berinteraksi dengan pin, kelas ADC untuk membaca nilai analog, dan kelas PWM untuk menghasilkan sinyal PWM.
from machine import Pin, ADC, PWM
Impor metode sleep() dari modul time. Metode sleep() memungkinkan Anda menambahkan jeda dalam kode.
from time import sleep
Menginisialisasi Pin
Setelah mengimpor semua modul yang diperlukan, inisialisasi objek Pin bernama led pada GPIO 2 sebagai OUTPUT.
led = Pin(2, Pin.OUT)
Objek Pin menerima atribut berikut dalam urutan ini:
Pin(Pin number, pin mode, pull, value)
- Pin number: Mengacu pada GPIO yang ingin kita kontrol.
- Pin mode: Dapat berupa input (IN), output (OUT), atau open-drain (OPEN_DRAIN).
- Pull argument: Digunakan jika kita ingin mengaktifkan resistor internal pull up atau pull down (PULL_UP atau PULL_DOWN).
- Value: Sesuai dengan status GPIO (apakah menyala atau mati): dapat bernilai 0 atau 1 (True atau False). Mengatur ke 1 berarti GPIO menyala. Jika kita tidak memberikan parameter apa pun, status defaultnya adalah 0 (itulah yang akan kami lakukan dalam contoh ini).
Setelah menginisialisasi objek led, Anda perlu instance lain dari kelas Pin untuk pushbutton. Pushbutton terhubung ke GPIO 15 dan diatur sebagai input. Jadi, tampilannya sebagai berikut:
button = Pin(15, Pin.IN)
Menginisialisasi ADC
Pada ESP32, untuk membuat objek ADC untuk potensiometer pada GPIO 34:
pot = ADC(Pin(34))
Jika Anda menggunakan ESP8266, hanya mendukung ADC pada pin ADC0 (A0). Untuk menginisialisasi objek ADC dengan ESP8266:
pot = ADC(0)
Baris berikut hanya berlaku untuk ESP32. Ini mendefinisikan bahwa kami ingin dapat membaca tegangan dalam rentang penuh. Artinya, kami ingin membaca tegangan dari 0 hingga 3.3 V.
pot.atten(ADC.ATTN_11DB)
Baris berikutnya berarti kami ingin pembacaan dengan resolusi 10 bit (dari 0 hingga 1023).
pot.width(ADC.WIDTH_10BIT)
Metode width() menerima parameter lain untuk mengatur resolusi berbeda:
- WIDTH_9BIT: rentang 0 hingga 511
- WIDTH_10BIT: rentang 0 hingga 1023
- WIDTH_11BIT: rentang 0 hingga 2047
- WIDTH_12BIT: rentang 0 hingga 4095
Jika Anda tidak menentukan resolusi, defaultnya adalah resolusi 12-bit pada ESP32.
Menginisialisasi PWM
Kemudian, buat objek PWM bernama led_pwm pada GPIO 4 dengan frekuensi 5000 Hz.
led_pwm = PWM(Pin(4), 5000)
Untuk membuat objek PWM, Anda perlu memberikan parameter: pin, frekuensi sinyal, dan duty cycle.
- Frekuensi dapat bernilai antara 0 dan 78125. Frekuensi 5000 Hz untuk LED berfungsi dengan baik.
- Duty cycle dapat bernilai antara 0 dan 1023. Nilai 1023 sesuai dengan duty cycle 100% (kecerahan penuh), dan 0 sesuai dengan duty cycle 0% (LED padam).
Kami hanya akan mengatur duty cycle di dalam perulangan while, jadi kami tidak perlu memberikan parameter duty cycle saat ini. Jika Anda tidak mengatur duty cycle saat menginisialisasi objek PWM, nilai defaultnya adalah 0.
Mendapatkan Status GPIO
Kemudian, kami memiliki perulangan while yang selalu True. Ini mirip dengan fungsi loop() di Arduino IDE.
Kami mulai dengan mendapatkan status tombol dan menyimpannya dalam variabel button_state. Untuk mendapatkan status pin, gunakan metode value() sebagai berikut:
button_state = button.value()
Ini mengembalikan 1 atau 0 tergantung pada apakah tombol ditekan atau tidak.
Mengatur Status GPIO
Untuk mengatur status pin, gunakan metode value(state) pada objek Pin. Dalam kasus ini, kami mengatur variabel button_state sebagai argumen. Dengan cara ini, LED menyala saat kita menekan pushbutton:
led.value(button_state)
Membaca Input Analog
Untuk membaca input analog, gunakan metode read() pada objek ADC (dalam kasus ini objek ADC disebut pot).
pot_value = pot.read()
Mengontrol Duty Cycle
Untuk mengontrol duty cycle, gunakan metode duty() pada objek PWM (led_pwm). Metode duty() menerima nilai antara 0 dan 1023 (di mana 0 sesuai dengan duty cycle 0%, dan 1023 sesuai dengan duty cycle 100%). Jadi, berikan sebagai argumen nilai pot_value (yang bervariasi antara 0 dan 1023). Dengan cara ini, Anda mengubah duty cycle dengan memutar potensiometer.
led_pwm.duty(pot_value)
Menguji Kode
Unggah file main.py ke ESP32 atau ESP8266 Anda. Untuk itu, buka uPyCraft IDE dan salin kode yang disediakan ke file main.py. Buka Tools > Serial dan pilih port serial. Pilih papan Anda di Tools > Board.
Kemudian, unggah kode ke ESP32 atau ESP8266 dengan menekan tombol Download and Run.
Setelah mengunggah kode, tekan tombol EN/RST pada papan ESP32/ESP8266 untuk menjalankan skrip baru.
Sekarang, uji setup Anda. LED harus menyala saat Anda menekan pushbutton.
Kecerahan LED akan berubah saat Anda memutar potensiometer.
Baca juga:
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino







0 on: "Panduan Lengkap MicroPython ESP32 dan ESP8266: Penggunaan GPIO "