Exploring ESP32's GPIO
Project #2
Setelah kemarin sudah membahas secara general apa itu ESP32 dan mencoba menjalankan program LED Blink hingga belajar cara Verify dan Upload, kali ini aku akan lebih spesifik menelusuri bagian bagian dan kegunaan dari ESP32 nya itu sendiri khususnya GPIO pin.
“GPIO itu apa ya?”
“Pin kegunaannya buat apa tuh?”
Yuk, sama-sama kita cari tahu!
Seperti yang kita tahu, ESP32 Development Board adalah sebuah System on Chip microcontroller yang dilengkapi board dengan modul ESP32-WROOM-32. Disini, aku akan membahas mengenai 1 spesifikasi lainnya yaitu pin Input dan Output yang digunakan untuk terhubung dengan komponen eksternal ESP32.
ESP32 memiliki pin GPIO dengan kegunaannya masing-masing. Variasi dari ESP32 ada yang 30 pin dan 36 pin. Setiap kaki pin ini relatif semuanya bisa menjadi Input maupun Output. Pin ini sering juga disebut sebagai General Purpose Input Output (GPIO) karena beragam peripherals yang tersedia, seperti :
18 Analog-to-Digital Converter (ADC) channels
3 Serial-Parallel Interface (SPI) interfaces
3 UART interfaces
2 I2C interfaces
16 output PWM output channels
2 Digital-to-Analog Converters (DAC)
2 I2S interfaces
10 GPIO Capacitive Sensing GPIOs
Pada Project #2 Embedded System ini, aku mempelajari kegunaan pin-pin tersebut melalui implementasinya yang aku kerjakan yaitu Digital I/O dan Analog I/O. ESP32 yang aku gunakan adalah ESP32 dengan 30 pin dengan spesifikasi seperti gambar di bawah ini.
Komponen yang harus dipersiapkan untuk melakukan Project #2
- ESP32 Development Board
- Arduino IDE
Software yang kita gunakan untuk membuat program Digital dan Analog Input Ouput yang akan kita upload ke ESP32.
- 5 mm LEDs
LED atau light-emitting diode adalah semikonduktor yang memancarkan cahaya ketika ada arus yang mengalir dari kutub positif ke negatif. Jika pemasangannya terbalik, lampu LEDnya tidak akan menyala. Diingat ya supaya nanti saat pengerjaan tidak bingung!
- 330 Ohm resistors dan 10k Ohm resistors
Resistor adalah komponen dasar yang digunakan untuk membatasi arus listrik yang melewatinya dalam suatu rangkaian.
- Switch/Push button
Push Button disini digunakan untuk mengontrol input ke rangkaian. Untuk menjamin apakah button sudah bekerja, kalian bisa ujicoba dulu ya dengan rangkaian sederhana.
- Breadboard
Breadboard aalah sebuah papan rangkaian tanpa solder untuk kita merangkai komponen-komponen yang akan digunakan. Komponen dalam rangkaian bisa terhubung satu sama lain dengan menggunakan kabel.
- Jumper wires
Untuk project kali ini, ada 3 tipe kabel yang akan kita gunakan yaitu Male-Male,bFemale-Female, dan Male-Female.
ESP32 Digital Inputs dan Outputs
Bagian I adalah penggunaan GPIO ESP32 untuk Digital I/O. Disini, GPIO pin pada ESP32 membaca input dari suatu saklar (push button) dan mengendalikan lampu LED sebagai output.. Pada sinyal digital, kondisi yang bisa terjadi pada output hanya 2, yaitu OFF (0 Volt) dan ON (3,3 Volt).
Nah, meskipun hampir semua kaki GPIOnya bisa kita gunakan, ada beberapa yang tidak bisa kita gunakan disini seperti GPIO 6, 11, 34, 35, 36, dan 39. Untuk penjelasan lebih detail, kalian bisa baca disini ya! https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
Skema Rangkaian
- GPIO 5 dihubungkan dengan kaki LED dan GPIO 4 dihubungkan dengan push button.
- Posisi GND atau ground berada di kiri dan kanan ESP32. Disini, aku menggunakan yang berada di sebelah kanan.
Kode Program
Serial.begin(115200)
→ Monitoring pada Serial Monitor di Arduino IDESerial.println(buttonState)
→ Monitoring pada saklarpinMode(GPIO, INPUT)
→ Menentukan dan menge-set pin GPIO yang ingin dibaca sebagai inputpinMode(led, OUTPUT)
→ Menentukan LED yang ingin dijadikan sebagai outputdigitalRead(GPIO)
→ Membaca input pin GPIO yang sudah ditentukandigitalWrite(led, HIGH)
→ Menyatakan bahwa LED dalam kondisi ON/HIGH — OFF/LOW
Hasil
Selamat! ✨
Kamu sudah tahu dasar dari membuat sebuah rangkaian ESP32 Digital Input Output! Selanjutnya, disini aku sedikit mengeksplor dan memvariasikan bentuk- bentuk Output yang dihasilkan dengan menggunakan sinyal digital ini.
Supaya tulisannya gak kepanjangan, buat yang penasaran langsung cek source codenya disini ya!
LED ON-OFF Bergantian ketika Mekenan Push Button
Ketika push button ditekan, LED 1 akan ON — LED 2 akan OFF secara bergantian. Sebenarnya, prinsipnya sama dengan percobaan dasar sebelumnya, hanya saja, pin GPIO yang digunakan ditambah karena disini kita ingin memberikan 2 jenis output yang berbeda yaitu kondisi green ON- red OFF dan green OFF - red ON secara bersamaan.
LED Sequential Turn dengan Menggunakan Push Button
LED akan ON dan bergerak secara sekuensial ketika push button ditekan, dan akan OFF ketika push button dilepas. Trigger untuk LED itu bisa menyala dan bergerak sequentially adalah menggunakan push button. LED yang digunakan adalah 4 LED dengan perlakuan yang berbeda dan saling berkelanjutan, sehingga kita membutuhkan 3 GPIO pin lain untuk mengatur setiap LEDnya.
void loop()
→ Jika buttonstate nya HIGH, Kode disusun untuk mengedipkan LED secara berurutan. Jika buttonstate nya LOW, LED berada dalam kondisi LOW.
LED Sequential Turn tanpa Menggunakan Push Button (Digital Output)
Disini, LED akan bergerak terus menerus secara sekuensial (tanpa push button). Supaya thread ini gak kepanjangan, kalo yang penasaran ingin coba-coba nih atau liat-liat, kodenya aku taro disini ya!
void setup()
→ Pada setup, LED diinisiasi menjadi OUTPUTvoid loop()
→ Tidak ada buttonstate sehingga program langsung menjalankan kode LED berkedip secara berurutan.
Generating PWM Signals as Analog Output with ESP32
Sinyal analog yang kita baca berada antara 0- 3.3V sehingga memiliki besaran yang bukan hanya ON dan OFF saja, tetapi ada nilai lain di antara kondisi OFF (0 Volt) dan ON (3,3 Volt). Karena pin pada ESP32 memiliki resolusi sebesar 12 bits, maka kita bisa mendapatkan nilai yang setara dengan 0–4095. Dalam Analog Inputs (ADC), ESP32 memiliki 15 pin yang korespons dengan ADC.
Skema Rangkaian
Kode Program
ledcSetup(ledChannel, freq, resolution)
→ melakukan konfigurasi LED PWM menggunakan variablefreq
,ledChannel
,resolution
ledcAttachPin(ledPin, ledChannel)
→ Menentukan pin GPIO yang akan digunakan untuk menerima sinyal dari channel sebagai Output.ledcWrite(ledChannel, dutyCycle)
→ menentukan keterangan cahaya LED (dutyCycle) berdasarkan channel LED secara looping dari 0–255 (menerangkan) dan 255–0 (meredupkan).
Selamat!
Sama seperti percobaan Digital I/O, disini aku akan menunjukan juga hasil belajar dan eksplorasi sedikit dari Analog Output ini. Kodenya bisa dilihat disini ya! ✨
ESP32 PWM with 3 LEDs
Pada dasarnya, percobaan ini sama seperti dengan menggunakan 1 LED. Tapi, yang ingin ditekankan disini adalah kita dapat membangkitkan sinyal PWM yang sama meskipun menggunakan pin GPIO yang berbeda.
Skema Rangkaian
ESP32 PWM Blinking 3 LEDs Sequentially
Ini adalah modifikasi dari Analog Output 3 LED, tetapi disini LED berkedip secara berurutan (seperti pada percobaan Digital I/O). Dengan menggunakan skema rangkaian yang sama, yaitu dengan GPIO yang berbeda, kode rangkaian sedikit dimodifikasi agar bisa berjalan secara sekuensial.
Analog Input Value from Potentiometer
Pada bagian ini, ESP32 akan membaca nilai analog input dari potensiometer.
Skema Rangkaian
Kode Program
analogRead(GPIO)
→ Membaca nilai analog input dari GPIO pin. Dalam percobaan ini adalah potensiometernya yang tersambung dengan GPIO pinSerial.begin(115200)
→ Untuk memonitor apa yang terjadi pada input di Serial MonitorSerial.println(potValue)
→ Mencetak nilai dari potensiometer yang dibaca pada Serial Monitor
Final Demo
Finally!! Ini adalah video keseluruhan dari rangkaian yang udah dibuat ya!
Analisis
Pada Project #2 ini, tingkat kesulitan yang aku rasakan lebih tinggi dibandingkan project pertama. Apalagi pada percobaan 1, ESP32nya tidak aku tancapkan di Breadboard. Sehingga pada saat percobaan ini, aku agak bingung karena ternyata Breadboard yang aku gunakan seperti ‘mati’ dibeberapa bagian. Selain itu, bagian paling menyakitkan adalah menekan kaki ESP32 hingga masuk seluruhnya ke Breadboard karena sangat sulit!! Setelah itu, juga masih harus menancapkan jumper wire sebagai penghubung, yang menurut aku luas permukaannya sangat kecil, sehingga sulit dipegang 🙄
Tapi overall, project ini juga sangat seru karena setelah aku berhasil pada basicnya, rasanya pengen nyoba-nyoba terus variasi yang lain 😂
Kendala
Dalam mengerjakan project #2 , aku mendapatkan beberapa kendala yang bisa jadi pelajaran untuk temen-temen yang mencoba.
- Pastikan breadboard dapat berfungsi dengan baik. Ketika merangkai digital input-output, rangkaian komponenku tidak dapat dijalankan. Tetapi setelah aku bongkar dan memasang ulang di lokasi yang berbeda, rangkaianku langsung berjalan dengan baik.
- Jika kalian menancapkan ESP32 ke breadboard, PASTIKAN kaki-kakinya masuk semua. Pada awalnya, aku hanya meletakan dan menekan sedikit kakinya ke breadboard, dan alhasil, kaki GPIOnya tidak bisa mendeteksi rangkaiannya.
- Potensiometer tidak dapat berfungsi dengan baik. Ketika aku mencoba Analog Input menggunakan potensiometer, value yang terdeteksi adalah 1995— 4095. Padahal, seharusnya adalah 0–4095 meskipun lampu LED pada ESP32 sudah menyala dan meredup dengan baik.
Leony Angela
18219032
Referensi dan acuan dasar dalam pengerjaan Project #2
https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
https://randomnerdtutorials.com/esp32-digital-inputs-outputs-arduino/
https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/