[II2260 Embedded System] Project 2 : ESP32 Input-Output using Push Button and LED

Raden Dizi Assyafadi Putra
6 min readFeb 8, 2023

--

Hai hai hai, welcome back to my blog dan kali ini kita akan membahas dan membuat sebuah mini project tentang Digital I/O. Btw aku kemarin udah sempet bahas soal pengenalan ESP32 yang bisa kalian liat disini [II2260 Embedded System] Project 1: Pengenalan ESP32 dengan Program LED Blink.

Pada project kali ini, kita bakal sedikit naikin levelnya. Kita akan mulai berkenalan dengan beberapa tools seperti LED, Resistor, Push Button, dan juga Jumper Cable. Kita sekarang akan mempergunakan Breadboard to the fullest.

Gambar Rangkaian
Hasil Percobaan Geming

+ What is the project about?

Pada Project kali ini kita akan mencoba menghidupkan dan mematikan lampu dengan menggunakan Push Button sehingga Lampu akan menyala jika dan hanya jika tombol ditekan.

+ What tools do you need?

Seperti biasa, akan ada tools yang diperlukan untuk membuat project ini.

  1. ESP32 (kalau aku pake versi DOIT DEVKIT V1)
  2. USB Cable to Micro USB
  3. Kabel Jumper Male to Male
  4. Lampu LED 5mm warna bebas. Aku disini pake warna hijau biar jadi cowo bumi.
  5. Push Button
  6. Breadboard
  7. Laptop/Komputer/Mac yang sudah diinstall dengan Arduino IDE (yang pake VSCode skip)
Komponennya qq. Source: Dokumentasi Pribadi

+ What are the steps?

Pertama-tama, tentu saja kita harus menyiapkan alat dan bahan. Setelah siap, mari kita mulai merangkai.

Tampak Atas biar ga bingung ya ges ya
  1. Letakkan ESP32 pada Breadboard. Pastikan kalian berhati-hati saat memasukan pinnya ke breadboard agar tidak bengkok ataupun patah.
  2. Hubungkan bagian yang sejajar horizontal dengan pin 3v3 ke bagian positif breadboard (ada di bagian kiri atau kanan breadboard).
  3. Lalu hubungkan bagian Ground (Pin GND) ke bagian negatif breadboard. Ada 2 pin GND pada ESP32 sehingga sesuaikan saja dengan Pin Digital yang akan kamu gunakan nanti.
  4. Setelah itu, kita akan menghubungkan pin dari LED dan Push Button ke ESP32. Aku akan menggunakan Pin Digital 4 untuk Button dan Pin Digital 5 untuk LED. Hubungkan Kabel Jumper dari kaki button ke Pin D4 dan satu lagi dari kaki positif LED ke Pin D5.
  5. Lalu, kita pasangkan resistor pada kaki negatif dari Button dan Push Button. Kedua resistor ini harus terhubung ke Bagian Negatif breadboard pada ujung lainnya.
  6. Jangan lupa untuk menghubungkan bagian positif breadboard dengan salah satu kaki Push Button agar inputnya terdeteksi.
  7. Compile dan Upload lalu YIPIIIIII SELESAI!
Cape gengs
Bukti kalo ini working ya ges ya

+ Code Breakdown!!!

Pertama kita akan bahas mengapa Pin 5 dan 4 aku pilih sebagai Pin pada Input pada project ini. Ini karena pin 4 dan 5 adalah default pin yang sering digunakan untuk I/O pada ESP32. Namun bukan berarti Pin yang lain tidak dapat dipakai. Kalian bisa menggunakan seluruh pin dengan awalan D yang berarti Digital Pin kecuali beberapa pin tertentu. Kalian bisa menggunakan Referensi gambar ini untuk menentukan pin yang paling tepat untuk kalian.

Pin pada ESP32. Source: https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

Sekarang aku akan menjelaskan mengenai kegunaan pin GND dan 3v3. Kedua pin ini bertindak sebagai sumber daya. Catu Daya dari ESP32 berasal dari Baterai atau Laptop. Untuk menyalurkan daya ini ke breadboard, maka kita mengalirkan daya tersebut ke breadboard melalui pin GND (yang dihubungkan ke bagian negatif) dan Pin 3v3 (yang dihubungkan ke bagian positif).

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 4; // the number of the pushbutton pin
const int ledPin = 5; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
Serial.begin(115200);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// 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);
}
}

Sekarang mari kita bedah kodenya. Kode ini berasal dari Examples tentang Button pada Arduino IDE. Kegunaan dari buttonPin dan ledPin itu adalah untuk menghubungkan ESP32 dengan button dan LED. Serial.begin() pada program ini berguna untuk menentukan transmisi data yang dapat dilakukan oleh ESP32 ke komponen. Maksimum yang mampu dilakukan oleh ESP32 adalah 115200 bps atau sekitar 112.5 Kbps.

Pada bagian loop, esp32 akan membaca state dari button. Saat state dari button adalah low (tidak ditekan) maka ledPin akan dibuat LOW juga (mati). Bila button ditekan (state HIGH), maka ledPin juga akan dibuat HIGH (menyala).

— Problem that i’ve encountered

  1. Flashing lights

Ini bisa terjadi ketika kamu salah memasukkan kaki resistor push button atau tidak memasang resistor ke kaki push button. Ini akan menyebabkan lampu menjadi flickering karena input button tidak stabil dan berubah-ubah antara 0 dan 1.

Serial Monitor saat Flickering. Source: Dokumentasi Pribadi
Flickering karena resistornya tidak ada :(

2. Plis, HARUS TELITI MENARUH NEGATIF DAN POSITIF DIMANA. SANGAT FATAL KALO TIDAK TAHU KARENA KALAU KELAMAAN BISA KONSLET.

+ Extra: Advanced IO

Advanced IO

Sekarang bagaimana kalo kita coba selesaikan challengenya?

Disini aku bermain dengan LED tambahan dimana aku menggunakan 3 LED dibandingkan dengan satu saja. Lalu setiap LED ini aku berikan Delay sehingga LED tersebut akan menyala secara sekuensial dan begitu pula saat mati.

Kira-kira ini lah kode untuk challenge ini

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 18; // the number of the pushbutton pin
const int ledPin = 5; // the number of the LED pin
const int ledPin2 = 22;
const int ledPin3 = 23;

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
Serial.begin(115200);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:

if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
delay(300);
digitalWrite(ledPin2, HIGH);
delay(300);
digitalWrite(ledPin3, HIGH);
delay(300);

// turn LED on:
// digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
delay(300);
digitalWrite(ledPin2, LOW);
delay(300);
digitalWrite(ledPin3, LOW);
delay(300);
}
}

Lalu bagaimana kah hasilnya?

INI DIA JENG JENG JENG

ASIK 3 LED IN ONE GO

+ Summary

Affh iyh banh ini udh kelar?

Kita sudah berhasil menyelesaikan project 2 ini. Sekarang teman-teman sudah dapat menggunakan input/output device pada mikrokontroler untuk mengatur state suatu output device.

So whats next? Ya stay aja yah untuk adventure Embedded Systemku yang selanjutnya.

+ References

  1. https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
  2. https://randomnerdtutorials.com/esp32-digital-inputs-outputs-arduino/

--

--