#2 Kenalan dengan ESP32 : I/O Digital
Halloo guys! Gimana kabar kalian, semoga baik-baik aja ya dan jangan lupa stay safe guys. Di tutorial sebelumnya, kita sudah jago menyalakan LED, bagi kalian yang belum dibaca, sabi baca dulu yuk di sini. Nah, buat kali ini kita mau ngapain nih? Kali ini kita bakal berkenalan lagi lebih jauh ama ESP32, yaitu tentang I/O Digital.
Sebelum kita ngoprek ESP32, mungkin sebagian dari kalian masih ada yang bertanya-tanya, apasih I/O Digital itu? I/O Digital itu singkatan dari Input Ouput Digital, simpelnya nanti kita akan menghasilkan suatu output (dalam hal ini, lampu LED eksternal) dengan menggunakan komponen sebagai input dari pengguna (pakai komponen yang namanya push button).
Butuh apa aja nih?
- ESP32 DEVKIT DOIT (ini hukumnya wajib guys)
- Breadboard
- LED (warnanya dibebasin, saran pakai warna merah, kuning, dan hijau)
- Jumper cable male to male
- Resistor 10k Ohm dan 330 Ohm
- Push button (boleh yang 2 kaki atau 4 kaki)
- Cable micro usb type B
- Laptop/komputer yang sudah terinstall arduino IDE
Habis itu gimana?
Nah kalau udah lengkap semua alat-alat yang dibutuhin, selanjutnya kita buat rangkaiannya. Waduh, gimana caranya tuh? Eitss, tenang aja guys, gw sudah membuat rangkaiannya. Begini rangkaiannya, perhatiin baik-baik ya.
Masih bingung?
- Setelah alat dan bahan sudah disiapkan, pastikan ESP32 kalian sudah tertanam di breadboard. Sebenarnya, ESP32 kalian boleh gak ditanam di breadboard atau ditanam dengan letak yang bebas. Tapi, saran dari gw ditanam di breadboard aja dan letaknya di ujung, seperti gambar di atas. Biar kenapa, btw? Hal ini supaya project kita lebih aman dan punya banyak ruang yang bisa digunakan.
- Siapkan 2 buah jumper cable male to male dan hubungkan pin 3V3 ke kutub positif (ditandai dengan garis merah) dan pin GND ke kutub negatif (ditandai dengan garis biru).
- Selanjutnya, hubungkan pin D4 (GPIO4) ke salah satu kaki push button, resistor 10k Ohm yang sejajar dengan pin D4 dari kutub negatif, dan kutub positif ke kaki push button yang tersisa.
- Last but not least, hubungkan pin D5 (GPIO5) dengan kaki LED yang panjang dan resistor 330 Ohm dari kutub negatif ke kaki LED yang pendek.
Kodenya gimana nih?
Eitss, sebelumnya gw mau disclaimer, jangan asal copy paste ya guys.
// Setting pin yang akan dipakai
const int buttonPin = 4; // Pin D4(GPIO4) yang terhubung dengan push button
const int ledPin = 5; // Pin D5(GPIO5) yang terhubung dengan LED// Inisiasi kondisi push button
int buttonState = 0;void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT); // Push button sebagai inputnya
pinMode(ledPin, OUTPUT); // LED sebagai output
}void loop() {
// Membaca kondisi button apakah sedang ditekan atau tidak
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// Mengecek kondisi button. Apabila sedang ditekan (state = HIGH) maka LED akan menyala, begitu pula sebaliknya
if (buttonState == HIGH) {
// Menyalakan LED
digitalWrite(ledPin, HIGH);
}
else {
// Mematikan LED
digitalWrite(ledPin, LOW);
}
}
Analysis
Masih bingung? Itu wajar, tenang saja soalnya kita bakal kupas tuntas semuanya.
— Rangkaian
Kak, kenapa sih pin GND harus dihubungkan dengan kutub negatif dan pin 3V3 dengan kutub positif? Nah seperti yang kita pelajari di Fisika, tegangan mengalir dari kutub postif menuju kutub negatif. Begitu guys kira-kira.
Terus, kok pin yang dipakai GPIO4 dan GPIO5, emang gak bisa pin yang lain? Sebenarnya bisa pakai pin lain, tetapi ada pin-pin tertentu yang diprioritasin. Based on Random Nerd Tutorials, GPIO 4 & 5 merupakan GPIO yang dapat sebagai input maupun output yang baik.
— Kode
Kalau diperhatikan, sebenarnya kode program yang digunakan kali ini tidak jauh berbeda dari yang sebelumnya, yaitu hanya berbeda pada fungsi Serial.begin()
, Serial.println()
, dan kustomisasi komponen.
Singkatnya fungsi Serial.begin()
, menentukan seberapa cepat sih komputer kita “mengobrol” dengan kode yang kita buat. Semakin tinggi angkanya berarti semakin cepat tingkat mengobrolnya. Kali ini, kita pakai kecepatan 115.200 baudrate atau bps (bit per second). Kemudian, fungsi Serial.println()
mengirimkan data untuk ditampilkan di layar serial monitor. Jadi, dapat disimpulkan keduanya merupakan fungsi komunikasi serial.
Hasil
Gw yakin, pasti kalian banyak yang penasaran, gimana sih hasil akhirnya? Nah kalian bisa liat hasilnya di video berikut ini:
Error?
Personally, gw mengalami beberapa kendala atau error bahkan kesalahan receh bisa dibilang. Berikut ini beberapa masalah yang mungkin terjadi:
- Kode program tidak bisa dijalankan
Permasalahan ini cukup banyak kemungkinan akar masalahnya, bisa jadi karena memang kode program yang salah atau tidak valid atau seperti ini
Kalau kalian menghadapi error seperti ini, jangan panik. Artinya ESP32 kalian belum terhubung dengan laptop menggunakan micro USB. Memang hal ini bisa dibilang remeh, tapi terkadang bisa saja terjadi jika kita sering mengganti rangkaian dan kode program ditambah kita yang kurang fokus.
- Rangkaian tidak bisa menyala
Terkadang kita sering yakin bahwa kode yang kita buat sudah benar, tetapi mengapa tetap tidak bisa bekerja? Salah satu kemungkinannya ada di rangkaiannya. Biasanya, pemula akan salah menghubungkan pin GND dan 3V3 pada kutub yang mana. Selain itu, salah menghubungkan resistor dengan LED atau push button juga bisa menjadi penyebab terjadi error.
Kesimpulannya?
Inti dari project kita kali ini yaitu kalau kita memberi input (berupa menekan push button), akan menghasilkan output (berupa LED menyala) dan kalau kita tidak memberi input atau dibiarkan saja, maka tidak ada apa-apa.
Masih cupu?
Eitss, tunggu dulu belum habis. Selain project yang di atas, gw udah buat project modifikasi buat kalian yang punya jiwa ekplorasi yang tinggi. Kalian bisa langsung cek di bawah ini.
— Project 1
Menyalakan 4 LED atau lebih secara bergantian menggunakan 1 push button.
Kodenya mana?
Eits tenang, udah disiapin kok.
// mengatur pin pada GPIO yang ditentukan
const int buttonPin = 4; // push button pada GPIO 4
const int ledPinA = 19; // LED pada GPIO 19
const int ledPinB = 21; // LED pada GPIO 21
const int ledPinC = 22; // LED pada GPIO 22
const int ledPinD = 23; // LED pada GPIO 23// untuk menyimpan status push button (ditekan/belum)
int buttonState = 0;
void setup() {
Serial.begin(115200);
// inisialisasi push button -> input
pinMode(buttonPin, INPUT);
// inisialisasi LED A,B,C,D -> output
pinMode(ledPinA, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinC, OUTPUT);
pinMode(ledPinD, OUTPUT);
}
void loop() {
buttonState = digitalRead(buttonPin); // membaca status push button (ditekan/belum)
Serial.println(buttonState);
if (buttonState == HIGH) { // kondisi push button ditekan
// keempat LED menyala
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
delay(1000); // Menyala selama 1 detik
// keempat LED mati
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
delay(100);
}
else { // push button tidak ditekan
digitalWrite(ledPinA, LOW); // LED A mati
digitalWrite(ledPinB, LOW); // LED B mati
digitalWrite(ledPinC, LOW); // LED C mati
digitalWrite(ledPinD, LOW); // LED D mati
}
}
— Project 2
Membuat lampu lalu lintas mini.
Untuk project 2 kali ini, gak gw buatin kodenya supaya kalian bisa eksplorasi mandiri.
Closing
Gimana nih guys, seru gak sih? Keren gak sih? Untuk kali ini kita cukupkan dulu 3 percobaan.
Sampai jumpa di tutorial selanjutnya guys!