ESP32 Tutorial Part 2 (Digital & Analog Input Output)
Haii, balik lagi di tutorial ESP32. Kali ini kita akan mencoba untuk mempraktikkan tentang input output pada ESP32 dari yang digital maupun yang analog. Soo dibawah ini daftar tutorialnya ya!
Bagian 1. Digital input output.
Bagian 2. Eskperimen digital input output.
Bagian 3. Analog output ESP32 PWM Generator.
Bagian 4. Analog input ESP32 Potensiometer.
Nah untuk itu ngga usah lama-lama lagi, cus langsung praktikum :D.
Bagian 1. DIGITAL INPUT OUTPUT
A. KOMPONEN
1. ESP32
Bebas yang berapa pin ya! aku punyanya yang 30 pin versi DEVKIT V1
2. Micro USB
3. Arduino IDE
(Kalau belum ada, instalasinya bisa diliat di sini ya! https://ilhamalvindo.medium.com/esp32-tutorial-part-1-blink-test-2c3663425f87 )
4. Breadboard (1 buah)
Disini kita butuh breadboard untuk meletakkan komponen-komponen lainnya. Bebas kok mau berapa pin, tapi disarankan yang 830 pin ya, biar lebih luas :).
5. Lampu LED (1 buah)
Disini butuh lampu LED sebanyak 1 buah ni untuk menyalakan lampunya.
6. Jumpire cable male to male (1 buah)
Nah untuk jumple cable male to male ini yang ujung dua-duanya lancip ya! kita butuh cukup 1 buah kabel aja kok.
7. Jumper cable male to female (3 buah)
Nah kalo jumper cable male to female ini yang satu ujungnya lancip, yang satu lagi ujungnya berlubang. Kita butuh 3 buah kabel ya.
8. Resistor 10k ohm (1 buah)
Nah disini kita perlu resistor 10000 ohm yang berguna untuk dipasang di tombol push buttonnya
9. Resistor 330 ohm (1 buah)
Nah resistor 330 ohm digunakan untuk menghambat arus yang masuk ke lampu LED. Fungsinya agar lampu tidak terlalu terang dan supaya umur lampu LED nya awet. Karena arus yang masuk terlalu besar maka umur lampu bisa saja menjadi lebih pendek.
10. Push Button 4 kaki (1 buah)
Kita disini memerlukan dua push button untuk menyalakan dua lampu yang berbeda nantinya.
B. SKEMA PEMASANGAN KOMPONEN
Untuk skema dari pemasangan komponennya dapat dilihat pada gambar berikut ya!
- Letakkan kutub positif pada pin 3v3 dengan menggunakan jumper cable male to female, dan kutub negatif ke pin GND (ground) dengan menggunakan jumper cable male to female juga.
2. Letakkan resistor 10k ohm dan push button dengan posisi sebagai berikut. Kemudian gunakan jumper cable male to female dan hubungkan ke GPIO 4 (D4).
3. Letakkan lampu LED dan resistor dengan posisi berikut. Lalu pakai jumper cable male to female dari anoda LED ke pin GPIO 21 (D21). Ohiya katoda itu yang kakinya pendek, anoda yang kakinya panjang.
untuk resistor gunakan resistor 330 ohm pada LED lalu hubungkan dengan kutub negatif.
4. Hubungkan kabel micro USB dengan ESP32 dan komputer
Nanti kurang lebih gambarnya skemanya kayak gini ya!
C. SOURCE CODE
Source code di adaptasi dari code yang diambil dari sini ya randomnerdstutorial.com
Lalu setelah codenya di tulis, maka tinggal tekan tombol check (yang gambar checklist), lalu upload deh! (yang tanda panah ke kanan).
Lalu kita bisa mempraktekan langsung dengan menekan push button yang sudah dipasang di breadboardnya !
Nah setelah kita berhasli mempraktekannya, sekarang kita analisis aja codenya kenapa bisa membuat lampunya menyala pas ditekan dan mati ketika dilepas, kuy!
D. PEMBAHASAN SOURCE CODE
Nah pada code yang ada pada randomnerdstutorial.com , dapat dilihat bahwa code adalah seperti berikut. Ohiya source codenya yang di bold ya!
1. Set Pin Numbers
const int buttonPin = 4; // Pin push button yang dipakai adalah pin 4
const int ledPin = 21; // Pin LED yang dipakai adalah LED 21
/* Set pin numbers ini fungsinya untuk men-set pin yang ada pada ESP32
untuk dijadikan sebagai pin untuk push button dan pin untuk LED nya. */
2. Variabel State
int buttonState = 0;
/* Variabel ini fungsinya untuk menyimpan status pada push button. */
3. Void Setup
void setup() {
Serial.begin(115200);
/* Fungsi ini artinya kita men-set nilai transmit data sebesar 115200 bits per second. */
pinMode(buttonPin, INPUT);
/* Fungsi ini artinya kita men-set buttonPin (pin nomor 4 pada ESP32) menjadi sebuah INPUT atau masukkan. */
pinMode(ledPin, OUTPUT);
}
/* Fungsi ini artinya kita menset ledPin menjadi sebuah OUTPUT atau menjadi keluaran dari source code ini. */
4. Void loop
void loop() {
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
/* Digital read artinya membaca nilai spesifik dari pin tertentu, bisa jadi HIGH (3,3 volt) atau LOW (0 volt). */
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
/* Disini kita melihat bahwa jika buttonState bernilai HIGH (3,3 volt) maka jika push button ditekan akan menyebabkan LED yang ada pada breadboard menyala. */
else {
digitalWrite(ledPin, LOW);
/* Jika tidak, maka nilai buttonState akan LOW (0 volt) yang artinya lampu akan mati. */
}
}
Jadi dari analisis yang ada, kita tau bahwa ketika push button ditekan, maka tegangan akan naik menjadi 3.3 volt, sehingga lampu menyala. Namun ketika push button dilepas, tegangan akan menjadi 0 volt sehingga lampu akan mati. Nah penulis bersyukur karena tidak menemukan kendala selama percobaan, kalo ada kendala mungkin nanti bisa diceritain dibawah :D
Bagian 2. EKSPERIMEN DIGITAL INPUT OUTPUT
Ohiya kita juga bisa bereksperimen sesuai kemauan kita kok, penulis mencoba untuk menjadikannya dua buah rangkaian yang paralel.
Disini penulis menggunakan dua buah push button, dua LED, dua resistor 330 ohm dan juga dua resistor 10k ohm. Jadi disini push button akan menyala jika ditekan baik dari push button 1 ataupun push button 2.
Dengan source code yang tidak terlalu berbeda dengan yang tadi, kita hanya perlu menambahkan code untuk pin LED 2 dan juga push button 2.
Bagian 3. ESP32 PWM GENERATOR ANALOG OUTPUT
A. SKEMA DAN KOMPONEN
Lalu bagaimana jika kita ingin lampu LED nya menyala dengan pelan-pelan, lalu mati dengan pelan-pelan juga? tanpa menggunakan push button?
Nah untuk skemanya dapat dilihat pada gambar berikut ya!
Untuk itu kita disini butuh 3 buah lampu led, 3 buah resistor 330 ohm, dan 4 buah jumper cable female to male. Untuk detailnya bisa dilihat pada gambar seperti dibawah ini ya.
Untuk pemasangannya kita pasangkan seperti skema. Gunakan jumper cable untuk ditancapkan di ground (GND). Lalu untuk lampu pertama pasang resistor seperti pada gambar sejajar dengan katoda (kaki yang pendek) pada LED 1, lalu sambung anoda (kaki yang panjang) dengan GPIO 4 (D4). Begitu juga dengan LED kedua, pasang resistornya, lalu sambungkan anodanya dengan GPIO 19 (D19), dan begitu pula LED ketiga, pasang resistornya, lalu sambungkan anodanya dengan GPIO 22 (D22).
SOURCE CODE
Untuk source codenya, kita kembali menggunakan source code yang diadaptasi dari randomnerdstutorial.com
Lalu kita tinggal klik upload, dan tadaaa lampu terang lalu meredup secara perlahan-lahan!
B. PEMBAHASAN SOURCE CODE
Untuk itu yuk kita bahas source code yang bikin lampunya terang-redup secara perlahan-lahan. Untuk source codenya yang dicetak tebal ya!
1. Global Variabel
const int ledPin = 5;
const int ledPin2 = 19;
const int ledPin3 = 22;
/* Disini kita men-set bahwa pin 5, 19, dan 22 pada ESP32 menjadi pin output yang akan dihubungkan ke LED nomor 1, 2, dan 3. */
2. Setting konfigurasi PWM
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
/* Disini kita set sinyal frekuensi PWM. Untuk lampu LEDnya sendiri 5000 Hz adalah nilai yang normal untuk dipakai. Disini juga kita set channel 0 untuk meng-generate sinyal PWM-nya, dan men-set resolusi menjadi 8 bit. */
3. Void Setup
void setup(){
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
/* Disini kita mengkonfigurasi LED PWM yang sudah didefinisikan
sebelumnya dengan menggunakan ledcSetup(). Fungsi ini menerima
argumen ledChannel, frekuensi, dan resolusi. */
/* Fungsi ledcAttachPin digunakan untuk menerima pada GPIO berapa lampu kita berada untuk dikirimkan sinyal PWM, dan channel mana yang digunakan. */
4. Void loop
void loop(){
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
/* Pada fungsi loop ini, lampu akan menerang sesuai dengan nilai dari
dutyCycle nya. Pada fungsi ini, dutyCycle berawal dari nilai 0 hingga
berakhir pada nilai 255. Ini artinya lampu akan bertahap menjadi terang, dengan delay selama 15 milisecond. */
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle — ){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
/* Pada fungsi loop ini, nilai dutyCycle berawal dari 255hingga berakhir pada nilai 0. Ini artinya lampu akan meredup perlahan-lahan, dengan delay selama 15 milisecond. */
Nah untuk analisisnya, lampu akan menyala lalu mati dengan delay masing-masing adalah 15 milisecond. Lampu juga akan menyala secara perlahan, tidak langsung terang begitu saja. Untuk kendalanya penulis sempat memiliki kendala ketika dua dari tiga lampu tidak menyala ketika ESP32 nya ditancapkan di breadboard dan memakai kabel jumper male to male. Entah tidak tahu darimana kesalahannya, tapi pas dicoba pake jumper female to male (langsung ke pin ESP32) aman-aman saja. Apa mungkin karena jumper cable nya rusak ya(?) hehe.
Bagian 4. ANALOG INPUT DENGAN ESP32
A. SKEMA DAN KOMPONEN
Karena tadi kita sudah mempraktekan untuk bagian digital, bagaimana sih jika pembacaannya berupa analog?. Nah disini kita bakal mencoba untuk membaca nilai dari inputan berupa potensiometer. Skema dapat dilihat pada gambar seperti berikut ya!
Untuk mencoba pembacaan analog input dari potensiometer, kita membutuhkan 1 buah potensiometer, 3 buah jumper cable female to male dan 2 buah jumper cable male to male.
B. SOURCE CODE
Nah untuk source code pembacaan analog inputnya dapat dilihat pada source code berikut.
Sekali lagi source codenya di adaptasi dari website randomnerdstutorial.com ya! jadi kita bisa langsung eksperimen deh :D. Setelah di upload, lalu pergi ke tools -> Serial Monitor. Atau kita bisa juga langsung memencet CTRL + SHIFT + M di keyboard.
HASIL EKSPERIMEN
Jangan lupa untuk mengganti 2pilihan di kanan bawah menjadi “Both NL & CR” dan “115200 baud” ya!. Lalu kita bisa langsung memutar potensiometernya untuk melihat perubahan nilainya!.
Pada hasil eksperimen, nilai tertinggi yang diperoleh adalah 4095 yaitu ketika potensiometer diputar habis ke kanan atau ketika tegangannya bernilai 3.3 volt, namun bernilai 0 ketika tegangannya 0 volt atau ketika potensiometer diputar habis kekiri.
PEMBAHASAN SOURCE CODE
Untuk itu mari kita bahas mengapa nilainya bisa seperti itu, untuk source codenya yang dicetak tebal ya!
1. Variabel Global
const int potPin = 26;
/* Disini kita mensetting pin berapa pada ESP32 yang akan disambungkan dengan pin tengah dari potensiometer. Kita akan memakai pin nomor 26 yang ada pada ESP32. */
int potValue = 0;
/* Code ini bertujuan untuk menyimpan nilai potensiometer ketika diputar, untuk defaultnya kita setting ke value = 0. */
2. Void Setup
void setup() {
Serial.begin(115200);
delay(1000);
}
/* Disini kita menginisialisasi komunikasi serial pada baud rate 115200 */
3. Void loop
void loop() {
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}
/* Pada fungsi ini, potValue bertujuan untuk membaca nilai dari potensiometer, lalu Serial.println(potValue) bertujuan untuk memprint hasil pengukuran ke layar. delay(500) mengartikan bahwa nilai akan di print setiap 500 milisecond atau 0.5 detik. */
Jadi seperti itulah hasil analisis dari pembacaan analog input yang berasal dari potensiometer. Sepertinya masih banyak dari digital & analog input output dari ESP32 ini yang masih banyak penulis telusuri. Kalo ada waktu, lain kali mungkin bisa di coba coba lagi trik-trik lainnya :D
Untuk demo dari keempat eksperimen diatas, bisa dilihat pada video dibawah ini ya!
Untuk itu sekian untuk tutorial ESP32 bagian input output analog dan digital. Mohon maaf kalau ada kesalahan dari penulis yang masih belajar ini. Terima kasih telah membaca dan sampai berjumpa di lain project!!
Sumber :
1. www.randomnerdstutorial.com
2. www. arduino.cc
3. www.quora.com
Best Regards,
Ilham Alvindo Riandova (18219063),
Sistem dan Teknologi Informasi,
Institut Teknologi Bandung.