Embedded System Project 02: ESP32 I/O for LED

Fikri Naufal Hamdi
5 min readFeb 12, 2023

--

Rangkaian Main Project 02

Halo, semuanya!
Melanjutkan project sebelumnya, kali ini aku akan membagikan pengalamanku ‘bermain-main’ dengan LED menggunakan ESP32. Namun, kali ini kita akan memanfaatkan sistem input-output yang memungkinkan kita lebih interaktif dengan ESP32 tersebut. Selain itu, kita juga akan berkenalan dengen beberapa komponen baru nantinya. Tak perlu berlama-lama, mari kita mulai!

[ Main Project ]

Skema Rangkaian Main Project 02

— Objective
Tujuan dari project 02 ini adalah menyalakan LED eksternal yang terhubung pada ESP32 dengan menekan push button sebagai implementasi proses input-output (push button menjadi input, LED menjadi output).

Requirements
Beberapa tools yang perlu disiapkan untuk memulai project ini adalah

  • Microcontroller ESP32 Devkit V1
  • Kabel data (USB Type A to Micro USB)
  • Arduino IDE yang terinstall pada Laptop/PC
  • Kabel jumper Male to Male
  • Resistor 330 Ohm (2)
  • 5 mm LED (2)
  • Breadboard
  • Push button

Jika baru memulai project menggunakan ESP32, lakukan setup pada board ESP32 di Arduino IDE dan communication port terlebih dahulu seperti pada artikel project 01 sebelumnya.

— Steps

Berikut langkah-langkah yang dapat diikuti untuk melakukan project 02 kali ini.

  1. Siapkan requirements yang telah dipaparkan sebelumnya.
  2. Pasang ESP32 pada breadboard.
  3. Hubungkan pin 3.3 Volts (VIN) berkode 3v3 ke bagian positif pada breadboard (garis berwarna merah) dan pin Ground atau GND ke bagian negatif pada breadboard (garis berwarna biru).
  4. Hubungkan kedua bagian yang berkutub (bagian atas) pada breadboard (kiri dan kanan) agar arus tidak terputus di bagian tengah breadboard (diperlukan jika rangkaian menggunakan kedua bagian breadboard, yaitu kiri-kanan).
  5. Hubungkan pin GPIO4 berkode D4 ke salah satu kaki push button dan dan pin GPIO5 berkode D5 ke kaki panjang LED (positif), pilihan kedua pin tersebut dibebaskan selama sesuai dengan code nantinya.
  6. Hubungkan resistor 330 Ohm di antara kaki pendek LED (negatif) dan bagian negatif breadboard, kemudian hubungkan resistor 330 Ohm di antara kaki push button dan bagian negatif breadboard serta kaki push button lainnya pada bagian positif breadboard.
  7. Upload code yang telah disiapkan, dapat diakses pada menu File > Examples > 02.Digital > Button dengan memastikan pin pada push button dan LED sesuai dengan yang ada pada code tersebut.

Berikut code yang dapat menjadi alternatif untuk project 02 kali ini.

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

— Result

Voila! LED Eksternal dapat menyala ketika push button ditekan mengikuti code yang dibuat sebelumnya.

Hasil Main Project 02

— Problem(s) Encountered

Selama proses membuat project, masalah yang kuhadapi adalah LED yang tidak kunjung menyala meskipun sudah dilakukan troubleshooting yang cukup lama. Ternyata kesalahan terletak pada rangkaian yang arusnya terputus di tengah-tengah breadboard.

Awalnya skema rangkaian yang dibuat tidak memiliki penghubung antara bagian sebelah kanan dan kiri breadboard. Setelah menemukan kesalahan tersebut, kedua bagian kuhubungkan menggunakan kabel jumper agar arus listrik dapat mengalir ke kedua bagian tersebut.

[ Development Exploration ]

Rangkaian Eksplorasi Pengembangan Project 02

— Objective

Tujuan dari eksplorasi pengembangan project 02 ini adalah menyalakan LED eksternal berwarna merah, kuning, dan hijau secara bergantian setiap kali push button ditekan.

— Requirements

Berikut beberapa tambahan requirements yang perlu disiapkan dalam pengembangan ini.

  • 5mm LED (2)
  • Resistor 330 Ohm (2)
  • Kabel jumper Male to Male

Penambahan tersebut menyesuaikan kebutuhan eksplorasi yang hendak dilakukan.

— Steps

  1. Sama seperti main project 02, yaitu siapkan requirements serta pasangkan ESP32 pada breadboard, pin 3.3 Volts (VIN) berkode 3v3 pada bagian positif breadboard, dan pin Ground berkode GND pada bagian negatif breadboard.
  2. Pasang push button pada breadboard serta resistor 330 Ohm pada salah satu kaki push button disertai kabel jumper yang menghubungkan ke pin GPIO4 dan kaki push button lainnya ke bagian positif breadboard, sama seperti main project 02.
  3. Hubungkan kedua bagian yang berkutub (bagian atas) pada breadboard (kiri dan kanan) agar arus tidak terputus di bagian tengah breadboard (diperlukan jika rangkaian menggunakan kedua bagian breadboard, yaitu kiri-kanan), juga sama seperti main project 02 sebelumnya.
  4. Hubungkan 3 LED pada breadboard disertai resistor 330 Ohm pada masing-masing kaki pendek (negatif) LED ke bagian negatif breadboard dan kaki panjang (positif) LED ke pin GPIO21, GPIO19, GPIO18 berturut-turut (menyesuaikan saja).
  5. Upload code yang dilampirkan berikut ini.
// set pin numbers
const int buttonPin = 4;
const int redLedPin = 21;
const int yellowLedPin = 19;
const int greenLedPin = 18;

// variable for push button status
int currButtonStatus = 0;
int prevButtonStatus = 0;

// variable for count and control which LED will turn on
int count = 0;

void setup() {
pinMode(buttonPin, INPUT);
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
}

void loop() {
currButtonStatus = digitalRead(buttonPin);

if (currButtonStatus == HIGH) {
// 'count' will be incremented when the push button is pressed
// for turn on purpose only
// (not incremented while the push button is in hold state),
// also set 'previous' button state to on
if (prevButtonStatus == 0) {
count++;
prevButtonStatus = 1;
}

// turn on red LED
if (count % 3 == 0) {
digitalWrite(redLedPin, HIGH);
}

// turn on yellow LED
else if (count % 3 == 1) {
digitalWrite(yellowLedPin, HIGH);
}

// turn on green LED
else if (count % 3 == 2) {
digitalWrite(greenLedPin, HIGH);
}

} else {
// turn off all LED and set 'previous' button state to off
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
prevButtonStatus = 0;
}
}

LED yang menyala ditentukan berdasarkan variabel ‘count’ sesuai kelipatan dari jumlah LED yang ada (dalam hal ini sejumlah 3). Dibuat 2 buah variabel penyimpan state dari push button, yaitu prevButtonStatus untuk keadaan tepat sebelum ditekan dan currButtonStatus sebagai keadaan push button terkini. Hal itu dibuat agar nilai dari variabel ‘count’ hanya bertambah ketika push button ditekan saja dan tidak bertambah selama push button ditahan. Setelah push button ditekan untuk menyalakan lampu, nilai dari prevButtonStatus diset menjadi 1 agar nilai ‘count’ tidak bertambah dan diset kembali menjadi 0 ketika push button dilepas.

— Result

Yup! LED sekarang dapat menyala bergantian saat kita tekan push button berulang kali. Cukup menarik bukan :D

Hasil Eksplorasi Pengembangan Project 02

--

--