#YukBelajarESP32 Project 2 : Input Output
Halo semuanya! Selamat datang kembali pada perjalanan #YukBelajarESP32. Tidak terasa sudah hampir 1 minggu ya setelah kita sejak perjalanan pertama dari #YukBelajarESP32. Setelah kita sudah belajar pengetahuan dasar dari microcontroller dan ESP32, sekarang saatnya kita mempelajari input dan output serta sinyal digital dan sinyal analog melalui eksperimen kecil untuk meningkatkan kemampuan kita dalam menggunakan ESP32.
Hands On Digital Signal
Dalam perjalanan #YukBelajarESP32 jilid 2 kita akan belajar bagaimana caranya menerima input dan memberi respon berupa output terhadap masukan tersebut. Input yang dimaksud disini adalah tombol yang berfungsi sebagai saklar bagi output berupa lampu yang dapat dinyalakan atau dimatikan sesuai dengan keinginan kita. Setiap aksi yang diterima oleh push button akan ditransmisikan oleh ESP32 menjadi sinyal digital untuk menyalakan/mematikan lampu. Jika ingin menyalakan lampu, kita hanya perlu menekannya saja, dan jika kita ingin mematikannya, lepas saja tombolnya. Sederhana bukan? Mari kita mulai proyek ke-2 dari #YukBelajarESP32!
Persiapan
Berikut adalah beberapa komponen dan perangkat yang kamu perlu siapkan untuk melakukan proyek ke-2 ini:
- Sebuah PC / Laptop,
- Sebuah Development Board berupa ESP32 DOIT DevKit V1 dengan 30 atau 36 GPIO pin,
- 1 pc Breadboard (opsional) sebagai tempat untuk meletakkan ESP32,
- Aplikasi Arduino IDE yang berfungsi sebagai programming environment,
- Sebuah Kabel USP type A to microUSB yang berfungsi sebagai jalur komunikasi antara komputer dan ESP32 sebagai sumber catu daya ESP32.
- 1 pc push button,
- 1 pc LED,
- 1 pc resistor 330 ohm,
- 1 pc resistor 10K ohm,
- Kabel jumper (male-to-male/male-to-female/female-to-female) sesuai kebutuhan.
Setelah kamu menyiapkan semua peralatan yang telah disebutkan di atas, kita telah siap untuk melakukan eksperimen pertama dari #YukBelajarESP32 jilid 2.
Eksperimen
Disclaimer: eskperimen dilakukan dengan laptop yang mempunyai sistem operasi macOS
LANGKAH PERTAMA
Meletakkan ESP32 pada breadboard dan menyusun push button, LED, dan resistor seperti gambar di bawah ini
LANGKAH KEDUA
Menyalakan laptop dan membuka aplikasi Arduino IDE. Sambil menunggu aplikasi terbuka, menghubungkan ESP32 dan komputer dengan kabel USB type A to microUSB.
Setelah aplikasi terbuka, memilih DOIT ESP32 DevKit V1 sebagai board yang akan digunakan dan memilih USB to UART sebagai protokol pada communication port
Catatan : Jika kamu sudah pernah mengatur pilihan board dan port, kamu dapat melewati langkah kedua ini. Apabila kamu belum pernah melakukan instalasi aplikasi Arduino IDE dan/atau belum mengatur communication port, kamu dapat mengikuti panduan yang ada di tulisan awal dari #YukBelajarESP32 dengan membaca bagian “Persiapan”.
LANGKAH KETIGA
Menyalin kode di bawah ini ke Arduino IDE
const int buttonPin = 4;
const int ledPin = 5;
int buttonState = 0;
int lastState;void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastState){
Serial.print("Push button status: ");
Serial.println(buttonState);
}
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
if (buttonState != lastState){
Serial.println("LED is ON");
Serial.println("");
}
}
else {
digitalWrite(ledPin, LOW);
if (buttonState != lastState){
Serial.println("LED is OFF");
Serial.println("");
}
}
lastState = buttonState;
}
LANGKAH KEEMPAT
Melakukan verifikasi code dengan menekan tombol bersimbol ✓ untuk memastikan bahwa code sudah benar dan dapat berjalan
LANGKAH KELIMA
Melakukan upload program ke board ESP32 dengan menekan tombol bersimbol ➡️
LANGKAH KEENAM
Selamat, kamu telah berhasil menyalakan lampu LED sesuai dengan penekanan tombol push!
LANGKAH KETUJUH (opsional)
Jika kamu ingin melakukan eskplorasi lebih lanjut, kamu bisa banget modifikasi rangkaian yang ada di langkah pertama tadi! Contohnya, aku memodifikasi rangkaian tersebut dengan menambahkan 1 buah push button tambahan dan 1 LED tambahan. Dengan adanya komponen tambahan tersebut, rangkaian berubah menjadi:
Selanjutnya, kamu hanya perlu untuk mengikuti panduan yang telah disampaikan sebelumnya. Akan tetapi, terdapat sedikit perbedaan pada codenya karena ada penambahan beberapa variabel dan kondisi:
const int buttonPin = 2;
const int buttonPin2 = 4;
const int ledPin = 22;
const int ledPin2 = 23;int buttonState = 0;
int buttonState2 = 0;
int lastState;
int lastState2;void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastState){
Serial.print("Push 1 button status: ");
Serial.println(buttonState);
}
if (buttonState == HIGH) {
// Menyalakan LED
digitalWrite(ledPin, HIGH);
if (buttonState != lastState){
Serial.println("LED 1 is ON");
Serial.println("");
}
}
else {
digitalWrite(ledPin, LOW);
if (buttonState != lastState){
Serial.println("LED 1 is OFF");
Serial.println("");
}
}
lastState = buttonState; buttonState2 = digitalRead(buttonPin2);
if (buttonState2 != lastState2){
Serial.print("Push 2 button status: ");
Serial.println(buttonState2);
}
if (buttonState2 == HIGH) {
digitalWrite(ledPin2, HIGH);
if (buttonState2 != lastState2){
Serial.println("LED 2 is ON");
Serial.println("");
}
}
else {
digitalWrite(ledPin2, LOW);
if (buttonState2 != lastState2){
Serial.println("LED 2 is OFF");
Serial.println("");
}
}
lastState2 = buttonState2;
}
Hasil dari modifikasi rangkai tersebut dapat kamu lihat pada video di bawah ini,
Penambahan push button dimanfaatkan untuk menyalakan lampu LED tambahan secara terpisah sehingga kita dapat menyalakan masing-masing lampu secara individual. Selamat mencoba!
Hands On Analog Sinyal
Apabila pada hands on sebelumnya kita telah mempelajari sinyal digital yang dapat menyalakan dan mematikan lampu LED, selanjutnya pada #YukBelajarESP32 jilid 2 kita akan mempelajari sinyal digital, yaitu sinyal yang mempunyai suatu nilai. Nilai tersebut biasanya memiliki rentang tertentu tergantung pengaturan. Pada hands on kedua ini, kita akan memanfaatkan sinyal digital untuk menerangkan dan meredupkan lampu LED. Yuk kita lakukan saja eksperimen mengenai sinyal analog sebagai bagian dari perjalanan #YukBelajarESP32!
Persiapan
Berikut adalah beberapa komponen dan perangkat yang kamu perlu siapkan untuk melakukan proyek ke-2 ini:
- Sebuah PC / Laptop,
- Sebuah Development Board berupa ESP32 DOIT DevKit V1 dengan 30 atau 36 GPIO pin,
- 1 pc Breadboard (opsional) sebagai tempat untuk meletakkan ESP32,
- Aplikasi Arduino IDE yang berfungsi sebagai programming environment,
- Sebuah Kabel USP type A to microUSB yang berfungsi sebagai jalur komunikasi antara komputer dan ESP32 sebagai sumber catu daya ESP32.
- 2 pc LED,
- 2 pc resistor 330 ohm,
- Kabel jumper (male-to-male/male-to-female/female-to-female) sesuai kebutuhan.
Setelah kamu menyiapkan semua peralatan yang telah disebutkan di atas, kita telah siap untuk melakukan eksperimen ke-2 dari #YukBelajarESP32 jilid 2.
Eksperimen
LANGKAH PERTAMA
Meletakkan ESP32 pada breadboard dan menyusun LED dan resistor seperti gambar di bawah ini
LANGKAH KEDUA
Menyalakan laptop dan membuka aplikasi Arduino IDE. Setelah aplikasi terbuka, memilih DOIT ESP32 DevKit V1 sebagai board yang akan digunakan dan memilih USB to UART sebagai protokol pada communication port
LANGKAH KETIGA
Menghubungkan ESP32 dan komputer dengan kabel USB type A to microUSB dan menyalin kode di bawah ini ke Arduino IDE
const int ledPin = 22;
const int ledPin2 = 23; const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
}
void loop(){
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// Mengganti kecerahan LED dengan PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
} for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
LANGKAH KEEMPAT
Melakukan verifikasi code dengan menekan tombol bersimbol ✓ untuk memastikan bahwa code sudah benar dan dapat berjalan
LANGKAH KELIMA
Melakukan upload program ke board ESP32 dengan menekan tombol bersimbol ➡️
LANGKAH KEENAM
Selamat, kamu telah berhasil mengganti tingkat kecerahan lampu LED sehingga lampu terlihat menerang dan meredup!
Analisis dan Hasil
Setelah melakukan langkah-langkah percobaan yang sudah dijabarkan pada bagian eksperimen, kita berhasil untuk menyalakan lampu LED ketika push button ditekan dan mengganti tingkat kecerahan LED. Adapun kode yang digunakan pada eksperimen sinyal digital memiliki penjelasan sebagai berikut:
// Alokasi variabel untuk menyimpan nomor pin
const int buttonPin = 4; // nomor pin tombol Push pada ESP32
const int ledPin = 5; // nomor pin pin LED pada ESP32// Variabel untuk menyimpan status tombol Push
int buttonState = 0; // nilai 0 sama dengan LOW yaitu tombol dalam keadaan tidak ditekan
int lastState;void setup() {
// Mengatur kecepatan pengiriman dan penerimaan data sebesar 115.200 bits per secondPengaturan kecepatan pengiriman dan penerimaan data (9600 - 115.200 bps)
Serial.begin(115200);
// Mengalokasikan buttonPin sebagai input
pinMode(buttonPin, INPUT);
// Mengalokasikan ledPin sebagai output
pinMode(ledPin, OUTPUT);
}// Fungsi "loop" akan membuat program berjalan secara terus menerus
void loop() {
// Membaca status tombol Push berdasarkan nilainya
buttonState = digitalRead(buttonPin); // Pengecekan apakah tombol Push sudah tertekan
if (buttonState != lastState){
Serial.print("Push button status: ");
Serial.println(buttonState);
}
// Kondisi jika tombol Push ditekan (HIGH)
if (buttonState == HIGH) {
// Menyalakan LED
digitalWrite(ledPin, HIGH); // Menampilkan keterangan bahwa LED menyala
if (buttonState != lastState){ // Tulisan hanya akan ditampilkan jika tombol ditekan
Serial.println("LED is ON");
Serial.println(""); }
}
// Kondisi jika tombol Push tidak ditekan (LOW)
else {
// Mematikan LED
digitalWrite(ledPin, LOW); // Menampilkan keterangan bahwa LED mati
if (buttonState != lastState){ // Tulisan hanya akan ditampilkan jika tombol ditekan
Serial.println("LED is OFF");
Serial.println(""); }
}
lastState = buttonState;
}
Daftar command dan fungsinya pada code di atas:
const int
menandakan bahwa pin adalah sebuah angka yang bersifat tetap dan tidak berubah (konstan)void
menandakan bahwa fungsi tidak akan mengembalikan nilai apapunsetup
adalah bagian untuk melakukan konfigurasi awal seperti pengalokasian pin ESP32 untuk setiap komponenserial.begin
berfungsi untuk mengatur kecepatan penerimaan dan pengiriman data, dimulai dari 9600–115.200 bits per second (bps)pinMode
berfungsi untuk mengalokasikan pin yang terhubung dengan komponen sebagai input atau outputdigitalRead
berfungsi untuk membaca input dalam bentuk sinyal digital berupa “0” ketika tombol tidak ditekan dan “1” ketika tombol ditekanserial.print
berfungsi untuk mencetak tulisan ke layarserial.println
berfungsi untuk mencetak tulisan ke layar dengan pengaturan tulisan selanjutnya berada pada baris barudigitalWrite
berfungsi untuk mengirimkan sinyal digital “0” yang berarti LOW (ESP32 mengalirkan 0 Volt) atau “1” yang berarti HIGH (ESP32 mengalirkan 3,3 Volt)
Penjelasan code yang digunakan dalam eksperimen sinyal analog:
// Alokasi variabel untuk menyimpan nomor pin
const int ledPin = 22; // nomor pin pin LED ke-1 pada ESP32
const int ledPin2 = 23; // nomor pin pin LED ke-2 pada ESP32// Pengaturan komponen PWM
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// Konfigurasi fungsionalitas LED PWM
ledcSetup(ledChannel, freq, resolution);
// Menghubungkan GPIO yang menerima sinyal dan kanal yang menghasilkan sinyal analog
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
}
void loop(){
// Meningkatkan tingkat kecerahan LED
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// Mengganti kecerahan LED dengan PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}// Menurunkan tingkat kecerahan LED
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// Mengganti kecerahan LED dengan PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
ESP32 adalah microcontroller yang mempunyai sebuah controller LED PWM dengan 16 kanal yang masing-masing kanal bersifat independen.
Setiap kanal tersebut dapat dikonfigurasikan sedemikian rupa untuk menghasilkan sinyal PWM (analog) yang berbeda-beda. Sinyal PWM sendiri memiliki 3 komponen penting, yaitu frekuensi, kanal, dan resolusi duty cycle.
- Frekuensi adalah banyaknya kondisi ON dan OFF dalam satu detik, dalam eksperimen frekuensi diatur sebesar 5000 Hz
- Kanal adalah tempat dihasilkannya sinyal analog (PWM). ESP32 memiliki kanal dimulai dari 0–15
- Resolusi adalah besaran pengiriman sinyal ON yang akan menentukan besar kecilnya arus listrik yang dialirkan, dimulai dari 1–16 bits. Resolusi yang bernilai 8 bits berarti kita dapat mengirimkan sinyal analog bernilai 0 hingga 255
Daftar command dan fungsinya yang digunakan dalam eksperimen sinyal analog:
const int
menandakan bahwa pin adalah sebuah angka yang bersifat tetap dan tidak berubah (konstan)void
menandakan bahwa fungsi tidak akan mengembalikan nilai apapunsetup
adalah bagian untuk alokasi komponen-komponen sinyal PWMledcsetup(channel, frequency, resolution)
berfungsi untuk melakukan konfigurasi komponen-komponen sinyal PWM yang telah dialokasikan. Fungsi ini menerima masukan kanal, frekuensi, dan resolusi yang digunakanledAttachPin(GPIO, channel)
berfungsi untuk menentukan GPIO yang akan menerima sinyal analog dan kanalyang menghasilkan sinyal tersebutledcWrite(channel, dutyCycle)
berfungsi untuk menentukan kanal mana yang akan menghasilkan sinyal analog dan berapa besar sinyal yang yang akan dikirim. Besaran sinyal tersebut dapat disebut juga sebagai duty cycle. Semakin besar nilainya, semakin terang juga kecerahan LED, begitu pun sebaliknya.
Dalam melakukan percobaan, terdapat 1 permasalahan yang saya hadapi, yaitu LED tidak menyala. Dugaan awal saya adalah kabel yang menghubungkan LED dan ESP32 bermasalah. Oleh karena itu, saya pun mencoba mengganti kabel tersebut dengan kabel yang baru, tapi hal ini tetap saja tidak membuat LED menyala. Saya pun mencoba memindahkan LED pada lubang yang lain di breadboard dan LED belum juga menyala.
Saya pun bingung apa penyebab lampu LED tersebut tidak menyala, saya sempat mengira mungkin ESP32 saya bermasalah sebab rasanya sungguh merepotkan jika harus melepas semua komponen dan merangkai ulang. Hal tersebut memang solusi terakhir yang dapat dilakukan jika berbagai cara sudah dicoba, tapi jika tidak berhasil juga akan menjadi usaha yang sia-sia bukan?
Akhirnya saya mencoba memindahkan lampu LED ke pin bernomor 30 ke bawah, dan voila LED pun menyala. Rasanya senang bukan kepalang, saya pun langsung bersyukur bahwa ESP32 saya tidak rusak (kalau rusak saya harus keluar uang lagi untuk membeli ESP32 yang baru..). Berdasarkan percobaan yang terakhir dilakukan, saya menduga kualitas breadboard yang saya miliki mungkin tidak terlalu bagus sehingga aliran listrik tidak mengalir ke pin yang bernomor lebih besar dari 30 (setelah bagian tengah breadboard). Lantas, saya menyisatai masalah ini dengan menambahkan kabel pada pin nomor 29 ke pin nomor 31 agar listrik dapat mengalir ke seluruh bagian breadboard.
Akhir Kata
Sekian saja perjalanan kedua #YukESP32 kali ini. Kita telah berhasil belajar bagaimana caranya menyalakan lampu LED ketika menekan push button. Proyek yang cukup sederhana tetapi tetap bermanfaat dalam mengembangkan kemampuan kita dalam memanfaatkan ESP32. Jangan bosan dan jangan lupa untuk terus mengikuti proyek-proyek berikutnya, sampai jumpa pada episode lain dari #YukESP32!
Sumber :