Project 2: ESP32 Digital Inputs and Digital Outputs, ESP32 Analog Output Using PWM Generator, ESP32 Analog Input

Muhammad Raflie Dwi Putra
10 min readFeb 7, 2021

--

Bismillaahirrahmaanirrahiim..

Hello sobat setia medium-ers semua!! Gimana kabarnya?? Semoga sehat selalu yaa..

Menurut pepatah, tak kenal maka?? ya kenalan dongg.. Sebelumnya kita kenalan dulu ya guys. Kenalin namaku Muhammad Raflie Dwi Putra yang bisa dipanggil Raflie dengan NIM 18219035. Aku sedang berkuliah semester 4 di prodi Sistem dan Teknologi Informasi (STI) Institut Teknologi Bandung.

Pada kesempatan kali ini, kita akan mencoba melakukan project pada ESP32 supaya dapat menerapkan konsep digital input dan digital output. Hal yang kita terapkan yaitu dengan membuat ESP32 dapat membaca input dari suatu Push Button (saklar) untuk mengendalikan nyala atau matinya lampu LED sebagai output. Selain itu, akan dilakukan juga project pengayaan pada ESP32 yang dapat menerapkan konsep analog output using PWM Generator sehingga lampu LED (sebagai output) akan bertambah dan berkurang kecerahannya secara berkala dan konsisten sesuai kode program yang dibuat.

Sebelum melakukan percobaan ini, sebaiknya kita sudah pernah mengetahui berbagai pin Input dan Output pada ESP32 sebagai antarmuka untuk berkomunikasi dengan dunia luar. Pin ini disebut dengan General Purpose Input Output (GPIO). Adapun antarmuka Input Output pada ESP32, terdiri dari:

  • 18 buah kanal Analog-to-Digital Converter (ADC)
  • 3 buah antarmuka Serial-Parallel Interface (SPI)
  • 3 buah antarmuka UART
  • 2 buah antarmuka I2C
  • 16 kanal output PWM
  • 2 Digital-to-Analog Converter (DAC)
  • 2 buah antarmuka I2S
  • 10 buah GPIO Capacitive Sensing

(Catatan: Untuk gambaran dan penjelasan tiap pin dapat dibaca pada ESP32 Pinout Reference.)

Nahh, GPIO ini dapat digunakan untuk menerima sinyal input digital atau analog, dan juga mengeluarkan sinyal output digital atau analog. Pada sinyal digital berarti hanya ada dua kondisi, yaitu OFF (0 Volt) dan ON (3,3 Volt). Sinyal analog memiliki besaran yang bukan hanya ON dan OFF saja, tetapi ada nilai lain di antara kondisi OFF (0 Volt) dan ON (3,3 Volt), dengan contohnya menyalakan dan mematikan lampu LED dengan saklar ini. Sedangkan contoh untuk output analog adalah untuk meredupkan lampu dengan PWM Generator ini lho guyyss..

Komponen & Alat yang Dibutuhkan

Tentunya, untuk menjalankan program digital input dan digital output, analog output using PWM Generator, dan analog input, pada ESP32 ini membutuhkan beberapa komponen atau alat yang perlu dipersiapkan, yaitu:

  • ESP32 DEVKIT V1 DOIT Board, sebagai komponen utama untuk dimasukkan program untuk mengendalikan lampu LED dengan pembacaan input dari Push Button.
Foto ESP32 DEVKIT V1 DOIT Board
  • Kabel Micro USB (type A), sebagai kabel penghubung ESP32 Board dengan PC/Laptop untuk memasukkan program.
Foto Kabel Micro USB (type A)
  • Perangkat PC (Laptop / Komputer), tentunya yang sudah terinstall aplikasi Arduino IDE dan paket board ESP-32 di dalamnya.
    (Catatan: Jika belum disiapkan, bisa diikuti langkah-langkah pada link ini.)
Foto Perangkat PC (Laptop / Komputer)
  • Breadboard 830 points, sebagai tempat meletakkan ESP32 Board dan menghubungkan berbagai komponen dengan bantuan kabel jumper wires.
Foto Breadboard 830 points
  • Jumper Wires Male to Female and Jumper Wires Male to Male, sebagai penghubung antar komponen melalui breadboard.
Foto Jumper Wires Male to Female and Jumper Wires Male to Male
  • Push Button, sebagai saklar untuk memberikan input pada program ESP32.
Foto Push Button
  • 3x Lampu LED 5 mm, sebagai penerima output dari program ESP32 yang dengan respon menyala atau mati.
Foto 3x Lampu LED 5 mm
  • 3x Resistor 330 Ohm dan Resistor 10k Ohm, sebagai pembagi tegangan pada rangkaian.
Foto 3x Resistor 330 Ohm dan Resistor 10k Ohm
  • Potentiometer, sebagai pemberi input nilai analog pada program Analog Input. (Keterangan: Aku belum memiliki komponen ini).
Foto Potentiometer (Sumber: tinyurl.com/5e23lwrf)

Diagram Skema Rangkaian

Pada diagram skema rangkaian berikut, kita dapat menyusun rangkaian sesuai diagram skema ataupun dengan kreasi sendiri. Untuk menyusun rangkaian terdapat 2 pilihan jenis jumper wires yang digunakan. Jika kita menyusun rangkaian dengan tidak meletakkan ESP32 Board pada Breadboard, maka kita dapat menghubungkan Breadboard dengan ESP32 Board dengan jumper wires jenis male to female, dengan male pada Breadboard dan female pada kaki ESP32 Board. Sedangkan jika kita menyusun rangkaian dengan menanam / memasukkan semua kaki ESP32 Board pada Breadboard, maka kita dapat menghubungkan antar komponen dengan ESP32 Board dengan jumper wires jenis male to male, dengan langsung memasukkan male ke point yang sejajar kaki pin ESP32 yang sesuai pada Breadboard. Namun jika memungkinkan, menurut aku lebih baik pilihan kedua, yaitu menanamkan ESP32 board pada Breadboard, sehingga ketika ESP32 dihubungkan ke powersource (catu daya) pada Laptop/PC dapat diminimalisir tersentuhnya kaki ESP32 oleh tangan kita, karena apabila tersentuh oleh tangan dapat menyebabkan hubung singkat sehingga menurunkan performa ESP32 kita.

1. Digital Input dan Digital Output

Skema Rangkaian Berdasarkan Platform Online Circuit.io
Sumber: randomnerdtutorials.com

Sesuai diagram skema di atas, kita dapat memastikan bahwa:

  1. Pin 3V3 pada ESP32 terhubung dengan point pada kutub positif (dekat garis merah) pada Breadboard; kabel merah 1.
  2. Point yang sejajar vertikal dengan point tadi (nomor 1) pada Breadboard, terhubung ke point Breadboard yang sejajar horizontal dengan pushbutton (saklar) nantinya; kabel merah 2.
  3. Memasang push button (saklar) sebaiknya diantara bagian kanan dan kiri dari Breadboard, serta sejajar horizontal kaki bawahnya dengan point tadi (nomor 2) pada Breadboard.
  4. Pin D4 atau GPIO 4 pada ESP32 terhubung dengan point yang sejajar horizontal dengan bagian kaki saklar (push button) lainnya; kabel hijau.
  5. Memasang resistor 10k Ohm di point yang sejajar horizontal dengan point tadi (nomor 4) pada Breadboard, sekalian menghubungkannya dengan point pada kutub negatif (dekat garis warna biru) pada Breadboard.
  6. Pin D5 atau GPIO 5 pada ESP32 terhubung dengan point yang sejajar horizontal dengan kaki panjang LED nantinya; kabel biru.
  7. Memasang lampu LED dengan memastikan kaki panjangnya sejajar horizontal dengan point tadi (nomor 6) pada Breadboard.
  8. Memasang resistor 330 Ohm di point yang sejajar horizontal dengan point kaki pendek LED, sekalian menghubungkannya dengan point pada kutub negatif (dekat garis warna biru) pada Breadboard.
  9. Jangan lupa, Pin GND pada ESP32 terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
  10. Pastikan bahwa: ESP32 Board sudah terhubung pada power source (catu daya) Laptop / PC dengan kabel Micro USB (type A), sehingga ESP32 Board menyala.
Foto 1 Hasil Rangkaian Sesuai Skema
Foto 2 Hasil Rangkaian Sesuai Skema

2. Analog Output Using PWM Generator

Skema Rangkaian Berdasarkan Platform Online Circuit.io
Sumber: randomnerdtutorials.com

Sesuai diagram skema di atas, kita dapat memastikan bahwa:

  1. Pin 5 atau GPIO 5 pada ESP32 terhubung secara sejajar horizontal dengan point tempat kaki panjang dari LED (green) tertancap pada Breadboard; kabel hijau. Beserta kaki pendek dari LED tersebut terhubung secara sejajar horizontal dengan point tempat resistor 330 Ohm terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
  2. Pin 17 atau GPIO 17 pada ESP32 terhubung secara sejajar horizontal dengan point tempat kaki panjang dari LED (yellow) tertancap pada Breadboard; kabel kuning. Beserta kaki pendek dari LED tersebut terhubung secara sejajar horizontal dengan point tempat resistor 330 Ohm terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
  3. Pin 16 atau GPIO 16 pada ESP32 terhubung secara sejajar horizontal dengan point tempat kaki panjang dari LED (red) tertancap pada Breadboard; kabel orange. Beserta kaki pendek dari LED tersebut terhubung secara sejajar horizontal dengan point tempat resistor 330 Ohm terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
  4. Jangan lupa, Pin GND pada ESP32 terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
  5. Pastikan bahwa: ESP32 Board sudah terhubung pada power source (catu daya) Laptop / PC dengan kabel Micro USB (type A), sehingga ESP32 Board menyala.
Foto Hasil Rangkaian Sesuai Skema

3. Analog Input Using Potentiometer

Skema Rangkaian Berdasarkan Platform Online Circuit.io
Sumber: randomnerdtutorials.com

Sesuai diagram skema di atas, kita dapat memastikan bahwa:

  1. Pin 3V3 pada ESP32 terhubung pada kutub positif (dekat garis warna merah) pada Breadboard; kabel merah 1.
  2. Pin D34 atau GPIO 34 pada ESP32 terhubung secara sejajar horizontal dengan point tempat kaki tengah potentiometer tertancap pada Breadboard; kabel kuning.
  3. Kutub positif (dekat garis warna merah) pada Breadboard terhubung secara sejajar horizontal dengan point tempat kaki kiri potentiometer tertancap pada Breadboard; kabel merah 2.
  4. Kutub negatif (dekat garis warna biru) pada Breadboard terhubung secara sejajar horizontal dengan point tempat kaki kanan potentiometer tertancap pada Breadboard; kabel hitam 1.
  5. Jangan lupa, Pin GND pada ESP32 terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
  6. Pastikan bahwa: ESP32 Board sudah terhubung pada power source (catu daya) Laptop / PC dengan kabel Micro USB (type A), sehingga ESP32 Board menyala.

Kode Program

1. Digital Input dan Digital Output

Setelah rangkaian sesuai dengan skema di atas, maka dapat dibuat program yang dapat dijalankan agar pushbutton dapat mengendalikan LED, dengan pushbutton sebagai input dan LED sebagai output. Dapat disesuaikan dengan kode program berikut:

// Program Digital Input dan Digital Output pada ESP32
// menyesuaikan nomor pin dengan variabel (nama komponen)
const int buttonPin = 4; // nomor pin pushbutton (saklar)
const int ledPin = 5; // nomor pin LED
// variabel untuk menyimpan status pushbutton (sebagai inisiasi)
int buttonState = 0;
void setup() {
Serial.begin(115200);
// inisiasi pin pushbotton sebagai input
pinMode(buttonPin, INPUT);
// inisiasi pin LED sebagai output
pinMode(ledPin, OUTPUT);
}
void loop() {
// membaca state dari nilai pushbutton (ketika ditekan atau dilepas)
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// mengecek kondisi pushbutton ketika ditekan
// ketika ditekan, pushbotton menjadi HIGH
if (buttonState == HIGH) {
// menyalakan lampu LED
digitalWrite(ledPin, HIGH);
} else {
// mematikan lampu LED
digitalWrite(ledPin, LOW);
}
}
Kode Program Menggunakan Aplikasi Arduino IDE

2. Analog Output Using PWM Generator

Setelah rangkaian sesuai dengan skema di atas, maka dapat dibuat program yang dapat dijalankan agar setting dari properti PWM Generator dapat menambah dan mengurangi kecerahan 3 buah lampu LED secara berkala. Dapat disesuaikan dengan kode program berikut:

// nomor pin LED
const int ledPin = 16; // 16 sebagai to GPIO16
const int ledPin2 = 17; // 17 sebagai to GPIO17
const int ledPin3 = 5; // 5 sebagai to GPIO5
// mengatur properti PWM
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
// mengonfigurasikan fungsi PWM LED
ledcSetup(ledChannel, freq, resolution);

// menyisipkan channel ke GPIO untuk dapat dikendalikan
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}

void loop(){
// menambah kecerahan LED
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// mengubah kecerahan LED dengan PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// mengurangi kecerahan LED
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// mengubah kecerahan LED dengan PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
Kode Program Menggunakan Aplikasi Arduino IDE

3. Analog Input Using Potentiometer

Setelah rangkaian sesuai dengan skema di atas, maka dapat dibuat program yang dapat dijalankan agar dapat mengendalikan nilai yang keluar pada Serial Monitor dengan berkisar antara 0 sampai 4095. Dapat disesuaikan dengan kode program berikut:

// Potentiometer terhubung ke GPIO 34 (Analog ADCI_CH6) 
const int potPin = 34;
// variabel untuk menyimpan nilai dari potentiometer
int potValue = 0;
void setup() {
Serial.begin(115200);
delay(1000);
}
void loop() {
// Membaca nilai potentiometer
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}
Kode Program Menggunakan Aplikasi Arduino IDE
  • Jika program sudah siap, compile dengan meng-klik menu Verify yang simbolnya checklist di pojok kiri atas aplikasi Arduino IDE.
  • Setelah proses compile selesai, kemudian klik menu Upload yang simbolnya panah kanan di sebelah menu Verify tadi.
  • Setelah selesai proses Upload, maka kita dapat menguji keberhasilan program ini dengan menekan dan melepas pushbutton. Lihat apakah lampu LED berhasil menyala ketika pushbutton ditekan, dan berhasil kembali mati ketika pushbutton tidak ditekan? Jika iya, maka program digital input output kita telah berhasil.
  • Jika belum berhasil, dapat disebabkan oleh beberapa hal yang ada pada Troubleshoot berikut.

Hasil Percobaan

1. Digital Input dan Digital Output

Foto Sebelum Saklar (Push Button) Ditekan
Foto Setelah Saklar (Push Button) Ditekan

Berikut video demo percobaan ini:

2. Analog Output Using PWM Generator

Foto Saat Lampu LED Berkurang Kecerahannya
Foto Saat Lampu LED Bertambah Kecerahannya

Berikut video demo percobaan ini:

Troubleshoot

  1. Proses upload yang gagal, dapat diatasi dengan mengulang upload sambil menahan boot button pada ESP32 sampai proses upload selesai.
  2. Lampu LED yang tidak berhasil menyala atau mati, dapat diatasi dengan mengecek kembali apakah rangkaian dan program sudah sesuai atau belum. Jika ternyata rangkaian sudah sesuai, mungkin kabel jumper wires atau LED atau kabel Micro USB yang digunakan sudah tidak layak pakai sehingga perlu diganti. Apabila masih belum dapat teratasi, dapat diperiksa tembaga yang ada di lapisan bawah Breadboard apakah sudah menghubungkan semua point tempat kita memasang semua komponen rangkaian. Opsi terakhir apabila belum teratasi juga, dapat dilakukan dengan mengganti ESP32 Board.

Kesimpulan

Dari eksperimen yang telah dilakukan, ESP32 berhasil untuk menjalankan program digital input output menggunakan push button dan lampu LED, program analog output using PWM Generator, dan program analog input using potentiometer, dengan baik sesuai dengan kode program yang dibuat pada aplikasi Arduino IDE. Walaupun, pada setiap eksperimennya tidak langsung berhasil karena menemukan berbagai kendala yang telah disebutkan di bagian Troubleshoot. Namun, dengan adanya banyak kegagalan tersebut, akan membuat kita mempunyai pengalaman lebih pada project ini sehingga akan lebih lancar mengatasi problem-problem tersebut di masa yang akan datang.

Alhamdulillaah..
Sekian, terima kasih atas perhatiannya..
SELAMAT MENCOBA!!!

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Muhammad Raflie Dwi Putra
Muhammad Raflie Dwi Putra

Written by Muhammad Raflie Dwi Putra

Fresh Graduate of Information System and Technology Institut Teknologi Bandung (ITB) 2023

No responses yet

Write a response