My Second Project: ESP32 GPIO: Digital Input Output
Hello, Welcome back everyone! Setelah mengerjakan project pertama kemarin mengenai ESP32 yang bisa melakukan blink, sekarang kita akan melakukan project kedua yang gak kalah lebih seru dan menarik nih! Pada project ini kita akan sedikit lebih explore lagi terkait materi-materi dari Mata Kuliah Sistem Embedded ini.
Emang mau ngapain sih di project 2 ini? Nahh, jadi di project kedua ini kita akan mencoba mengimplementasikan input-output.
— Introduction; —
Goals dari project kali ini utamanya adalah bagaimana kita bisa menghidupkan dan mematikan lampu LED dengan menggunakan push button. Jadi, maksudnya adalah ketika kita menekan button, lampu LED yang tersambung akan menyala, dan ketika dilepas lampu akan mati.
— Tools; —
Untuk mengerjakan project ini dibutuhkan beberapa tambahan dari Project sebelumnya. Tools yang harus disiapkan, diantaranya:
- ESP 32 DOIT DEVKIT V1.
- Kabel USB (bisa menggunakan kabel yang digunakan pada project 1).
- Laptop/ Komputer yang memiliki Arduino IDE. Jangan lupa install dan setting Ardunio IDE-mu sama seperti pada project sebelumnya ya guys! [My First ESP32 Project: LED Blink]
- Breadboard. Breadboard adalah board yang digunakan untuk membuat rangkaian elektronik tanpa harus merepotkan pengguna untuk menyolder. Tersedia dengan berbagai ukuran dan dibebaskan untuk menggunakan ukuran yang mana saja namun aku menyarankan jangan menggunakan ukuran yang terlalu kecil.
- Kabel Jumper/Connector. Dari 3 jenis kabel jumper, yaitu Male to Male, Male to Female, dan Female to Female pada project kali ini kita hanya akan menggunakan kabel jumper dengan jenis Male to Male sebanyak 5 pcs.
- Push-button
- Lampu LED. Untuk warnanya dibebaskan, disini aku menggunakan warna biru
- Resistor 10K Ω dan 330 Ω. Berikut adalah panduan untuk menghitung resistansi resistor-mu. Lihatlah pita warna pada resistor!
— Steps; —
First Steps: Installation
Installation yang perlu dilakukan sama seperti pada Project #1, sehingga kamu tinggal melihat step-step installation pada Project #1 saja yeayyy!
Next Steps:
- Assemble the Circuit
Langkah berikutnya yang harus kita lakukan sebelum menjalankan program adalah merakit rangkaiannya terlebih dahulu. Berikut kurang lebih ilustrasi dari tampilan rangkaian kita nanti.
Nah, selanjutnya aku akan spill nih langkah-langkah untuk merakit rangkaiannya. Yuk Check it out!
- Pastikan kamu sudah menyiapkan seluruh komponennya ya!
- Pasangkan ESP32 pada breadboard. Untuk posisinya dibebaskan, namun aku menyarankan sebaiknya diletakkan di ujung agar lebih proporsional.
- Hubungkan 3v3 dengan bagian positif breadboard, pasangkan jumper cable Male to Male pada bagian 3v3 menuju bagian positif breadboard yang berwarna merah. Make sure kamu memasang jumper cable dengan benar ya guys!
- Hubungkan GROUND dengan bagian negatif breadboard, pasangkan jumper cable Male to Male pada GROUND (GRND) pada bagian negatif breadboard yang berwarna biru.
- Pasangkan push button dan LED pada breadboard. Dengan menghubungkan GPIO4 yang disimbolkan dengan D4 dengan salah satu kaki Push Button dan GPIO5(B5) dengan kaki panjang LED. LED dan push button ini bisa diletakkan dimana saja asalkan tidak satu garis horizontal ya guys!
- Nextttt, kita akan bermain dengan resistornya. Resistor ini akan diletakkan diantara push button dan bagian negatif breadboard. Kegunaan dari resistor ini adalah untuk mengurangu tegangan yang masuk. Pada percobaan kali ini, aku menggunakan resistor 330 Ohm.
- Oiya, terakhir banget nih jangan lupa untuk hubungkan salah satu kaki pada push button dengan bagian positif pada breadboard ya all!
- YEAYYYY! FINISHEDD!!
2. The Code
Setelah selesai merakit rangkaian, selanjutnya kita akan beralih ke kode programnya. Eitssss! Tapi jangan khawatir, kamu cukup copy kode ini dan paste ke Arduino IDE. (Jangan lupa sambil dipahami juga ya xixixi).
Kode program project kali ini tentunya sedikit berbeda dengan Project #1, terdapat tambahan kode yakni Serial.begin(115200)
pada fungsi setup()
dan Serial.println(buttonState)
pada fungsi loop()
dan beberapa tambahan kode program lainnya.
Kode program ini bisa kita dapatkan melalui Arduino IDE yang telah kita install sebelumnya. Dengan cara klik File -> Example -> Digital -> Button.
Berikut adalah kode program yang sudah dimodifikasi:
// set pin numbers
const int buttonPin = 4; // the number of the pushbutton pin
const int ledPin = 5; // the number of the LED pin
// variable for storing the pushbutton status
int buttonState = 0;
void setup() {
Serial.begin(115200);
// initialize the pushbutton pin as an input
pinMode(buttonPin, INPUT);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
}
void loop() {
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}
Sebenernya apa sih maksud dari kode programnya? Penasaran gak sih? YUK! sini aku bahas sedikit ya hehe..
- Terdapat konstanta berupa buttonPin yang berfungsi untuk menandakan lokasi dari buttonPin di ESP32 yakni di 4 (GPIO 4).
- Terdapat konstanta berupa ledPin yang berfungsi untuk menandakan lokasi dari ledPin di ESP32 yakni di 5 (GPIO 5)
- Terdapat buttonShare yang di set 0 karena kita memulai dari 0 untuk status pembacaan.
- Terdapat fungsi
Serial.begin
berfungsi untuk menentukan kecepatan pengiriman dan penerimaan data melalui port serial sehingga semakin mengirimkan data ke port serial.
Sesuai judul project kali ini, input dan output dari project kali ini objeknya berbeda. Oleh karena itu, nanti program akan menerima input dari push button dan mendistribusikannya ke LED sebagai output.
— The Result; —
— Additional Component; —
Nah, pada bagian ini aku akan menunjukkan hasil project setelah ditambahkan satu komponen baru yaitu menambahkan satu lampu. Lampu baru yang aku tambahkan disini, aku hubungkan dengan D19 dan menggunakan resistor 330 ohm TAPI TAPI karena aku tidak mempunyai resistor 330ohm lagi :((, aku meng-akalinya menggunakan kabel jumper hehe dan ternyata bisa, yeayy…!!
Untuk kode programnya ada tambahan, yaitu kita menambahkan ledPin 2 karena kita menambahkan komponen lampu. Berikut adalah kode programnya:
// set pin numbers
const int buttonPin = 4; // the number of the pushbutton pin
const int ledPin1 = 5; // the number of the LED pin
const int ledPin2 = 19; // the number of the LED pin
// variable for storing the pushbutton status
int buttonState = 0;
void setup() {
Serial.begin(115200);
// initialize the pushbutton pin as an input
pinMode(buttonPin, INPUT);
// initialize the LED pin as an output
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
} else {
// turn LED off
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
}
}
Nah, berikut adalah video hasil project dengan additional component:
— Analysis; —
Berdasarkan eksperimen yang telah kita lakukan, berikut adalah beberapa analisis yang aku temukan:
- Menghubungkan GROUND ke sisi negatif breadboard dan 3v3 ke sisi positif breadboard dikarenakan agar kita mendapatkan tegangan dari ESP32. Karena tegangan itu mengalir dari kutub positif menuju kutub negatif, maka kita menghubungkan 3v3 ke kutub positif dan GROUND ke kutub negatif.
- Lalu, mengapa buttonPin dan ledPin dihubungkan pada GPIO4 dan GPIO5? Dari referensi yang telah kubaca dari randomnerdtutorials alasannya adalah karena GPIO yang menerima input maupun output dengan baik adalah GPIO4 dan GPIO5. Tapi, sebenarnya semua pin pada ESP32 itu dapat digunakan sebagi output kecuali GPIO 6–11 dan GPIOs 34, 35, 36 and 39 (karena hanya merupakan GPIO input). Berikut adalah tabel analisis input dan output GPIO:
— The Problem; —
- Permasalahan yang terjadi adalah uploading error sehingga LED tidak menyala saat ditekan buttonnya, ternyata setelah memeriksa dan mengulik kembali baik rangkaian maupun code. Kesalahannya adalah pada bagian penempatan resistor yang tidak tepat dan pemasangan yang kurang masuk ke breadboard. Jadi, untuk teman-teman lebih teliti lagi ya dalam memasang seluruh komponen pada breadboardnya hehe..
— Closing; —
Yeayy! Project kedua sudah selesai, semoga pengalaman yang aku sharing ini bisa bermanfaat bagi teman-teman yang membaca. Masih banyak lagi project-project lain yang gak kalah seru dan menarik. So staytune and see you !!