ESP32 Tutorial Part 2 (Digital & Analog Input Output)

Ilham Alvindo Riandova
10 min readFeb 6, 2021

--

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

Gambar 1. ESP32 | sumber: reichelt.com

2. Micro USB

Gambar 2. Micro USB | sumber: alzashop.com

3. Arduino IDE

(Kalau belum ada, instalasinya bisa diliat di sini ya! https://ilhamalvindo.medium.com/esp32-tutorial-part-1-blink-test-2c3663425f87 )

Gambar 3. Arduino IDE | sumber: wikipedia.com

4. Breadboard (1 buah)

Gambar 4. Breadboard 830 pin | sumber: tokopedia.com

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)

Gambar 5. Lampu LED | sumber: ie.rs-online.com

Disini butuh lampu LED sebanyak 1 buah ni untuk menyalakan lampunya.

6. Jumpire cable male to male (1 buah)

Gambar 6. Jumper cable male to male | sumber : amazon.com

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)

Gambar 7. Jumper cable male to female | sumber : amazon.com

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)

Gambar 8. Resistor 10k ohm | source : tokopedia.com

Nah disini kita perlu resistor 10000 ohm yang berguna untuk dipasang di tombol push buttonnya

9. Resistor 330 ohm (1 buah)

Gambar 9. Resistor 330 ohm | sumber : amazon.com

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)

Gambar 10. Push button | sumber: faranux.com

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!

Gambar 11. Skema ESP32 untuk analog input output
  1. 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.
Gambar 12. Pin 3v3 (3,3v) dan GND (Ground)

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).

Gambar 13. Penempatan push button, resistor, dan jumper cable

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.

Gambar 14. Penempatan LED, resistor, dan jumper cable

4. Hubungkan kabel micro USB dengan ESP32 dan komputer

Gambar 15. Skema ESP32 ke laptop

Nanti kurang lebih gambarnya skemanya kayak gini ya!

Gambar 16. Skema fisik ESP32 ke breadboard

C. SOURCE CODE

Source code di adaptasi dari code yang diambil dari sini ya randomnerdstutorial.com

Gambar 17. Source Code 1
Gambar 18. Source Code 2

Lalu setelah codenya di tulis, maka tinggal tekan tombol check (yang gambar checklist), lalu upload deh! (yang tanda panah ke kanan).

Gambar 19. Check dan upload button

Lalu kita bisa mempraktekan langsung dengan menekan push button yang sudah dipasang di breadboardnya !

Gambar 20. Ketika push button tidak ditekan
Gambar 21. Ketika push button ditekan

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.

Gambar 22. Skema bonus

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.

Gambar 22. Ketika push button di sebelah kiri ditekan
Gamabr 23. Ketika push button sebelah kanan ditekan

Dengan source code yang tidak terlalu berbeda dengan yang tadi, kita hanya perlu menambahkan code untuk pin LED 2 dan juga push button 2.

Gambar 24. Source Code 3
Gambar 24. Source Code 4

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!

Gambar 25. Skema ESP32 PWM Generator

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).

Gambar 26. Skema fisik ESP32 PWM Generator

SOURCE CODE

Untuk source codenya, kita kembali menggunakan source code yang diadaptasi dari randomnerdstutorial.com

Gambar 27. Source code ESP32 PWM Generator
Gambar 28. Source code ESP32 PWM Generator (2)

Lalu kita tinggal klik upload, dan tadaaa lampu terang lalu meredup secara perlahan-lahan!

Gambar 29. Hasil eksperimen ESP32 PWM Generator

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!

Gambar 30. Skema ESP32 Analog input output Potensiometer

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.

Gambar 31. Source Code ESP32 Potensiometer

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!.

Gambar 32. Serial Monitor ESP32 Analog input output

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.

--

--

Ilham Alvindo Riandova

Final year student at Institut Teknologi Bandung majoring Information System and Technology.