‘Project 2 : Digital & Analog Input Output
Pada project ini akan dilakukan percobaan pada ESP32 dalam membaca input dari sebuah saklar (push button) untuk mengendalikan lampu LED sebagai output.
ESP32 memiliki pin input dan output yang disebut dengan General Purpose Input Output (GPIO) sebagai interface untuk berkomunikasi dengan dunia luar. Interface input output pada ESP32 yaitu :
- 18 Analog-to-Digital Converter (ADC) channels
- 3 Serial-Parallel Interface (SPI) interfaces
- 3 UART interfaces
- 2 I2C interface
- 16 PWM output channels
- 2 Digital-to-Analog Converter (DAC)
- 2 I2S interfaces
- 10 GPIO Capacitive Sensing
ESP32 memiliki pin yang bersifat default untuk setiap jenis interface. Beberapa pin akan cocok digunakan dalam suatu kondisi tertentu
- Input only pins = GPIO 34, 35, 36, 39.Pin ini tidak memiliki internal pull ups atau pull down resistors dan tidak bisa digunakan untuk outputs
- Terhubung dengan integrated SPI Flash = GPIO 6, 7, 8, 9, 10, 11.Pin pin tersebut terhubung dengan integrated SPI Flash pada ESP-WROOM-32 dan tidak direkomendasikan digunakan untuk keperluan lain
- Capacitive touch GPIOs = T0 (GPIO 4), T1 (GPIO 0), T2 (GPIO 2), T3 (GPIO 15), T4 (GPIO 13), T5 (GPIO 12), T6 (GPIO 14), T7 (GPIO 27), T8 (GPIO 33), T9 (GPIO 32). ESP32 memiliki 10 sensor sentuh kapasitif internal yang dapat merasakan sesuatu yang menahan muatan listrik seperti kulit manusia, jadi mereka dapat mendeteksi saat GPIO disentuh dengan jari. Pin ini dapat terintegrasi dengan capacitive pads dan menggantikan mechanical buttons.
- Analog to Digital Converter (ADC) = ADC1_CH0 (GPIO 36), ADC1_CH1 (GPIO 37), ADC1_CH2 (GPIO 38), ADC1_CH3 (GPIO 39), ADC1_CH4 (GPIO 32), ADC1_CH5 (GPIO 33), ADC1_CH6 (GPIO 34), ADC1_CH7 (GPIO 35), ADC2_CH0 (GPIO 4), ADC2_CH1 (GPIO 0), ADC2_CH2 (GPIO 2), ADC2_CH3 (GPIO 15), ADC2_CH4 (GPIO 13), ADC2_CH5 (GPIO 12), ADC2_CH6 (GPIO 14), ADC2_CH7 (GPIO 27), ADC2_CH8 (GPIO 25), ADC2_CH9 (GPIO 26). ADC input channels memiliki resolusi 12 bit yang berarti dapat melakukan pembacaan analog mulai dari 0 (0 V) hingga 4095 (3,3 V) dan memiliki kemampuan untuk mengatur resolusi saluran pada kosan serta rentang ADC. Pin ESP32 tidak memiliki linear behavior sehingga tidak dapat membedakan antara 0 dan 0,1 V atau 3,2 dan 3,3 V.
- Digital to Analog Converter (DAC) = DAC1 (GPIO 25), DAC2 (GPIO 26). DAC channels memiliki 2 x 8 bits untuk mengubah sinyal digital menjadi sinyal analog (voltage signals)
- RTC GPIOs = RTC_GPIO0 (GPIO 36), RTC_GPIO3 (GPIO 39), RTC_GPIO4 (GPIO 34), RTC_GPIO5 (GPIO 35), RTC_GPIO6 (GPIO 25), RTC_GPIO7 (GPIO 26), RTC_GPIO8 (GPIO 33), RTC_GPIO9 (GPIO 32), RTC_GPIO10 (GPIO 4), RTC_GPIO11 (GPIO 0), RTC_GPIO12 (GPIO 2), RTC_GPIO13 (GPIO 15), RTC_GPIO14 (GPIO 13), RTC_GPIO15 (GPIO 12), RTC_GPIO16 (GPIO 14), RTC_GPIO17 (GPIO 27). GPIO RTC dapat digunakan untuk membangunkan ESP32 dari deep sleep saat processor Ultra Low Power (ULP) sedang berjalan.
- PWM = ESP32 LED PWM memiliki 16 independent channels yang dapat dikonfigurasi untuk menghasilkan sinyal PWM (dengan properti yang berbeda). Semua pin yang bertindak sebagai output dapat digunakan sebagai pin PWM (kecuali GPIO 34 hingga 39).
- I2C = GPIO 21 (SDA), GPIO 22 (SCL)
Dan sebagainya.
1. Digital Input dan Output
Akan dibuatnya rangkaian sederhana yang dapat membaca digital inputs (button switch) dan digital output (lampu LED) menggunakan ESP32 pada Arduino IDE.
Peralatan yang dibutuhkan :
- ESP32
- 5 mm LED
- 330 ohm resistor
- Pushbutton
- 10k Ohm resistor
- Breadboard
- Jumper wires
Skema :
Langkah — langkah :
- Susun peralatan sesuai dengan skema di atas
- Gunakan program di bawah ini dan tulis di Arduino IDE.
- Lakukan verify dan upload di Arduino IDE.
List program :
const int buttonPin = 4; menunjukkan bahwa button terhubung dengan GPIO 4. const int ledPin = 5; menunjukkan bahwa led terhubung dengan GPIO 5. int buttonState = 0; menciptakan sebuah variabel yang menyatakan keadaan button dengan 0 yang berarti tidak dipencet/ ditekan
Pada setup()akan dilakukan inisialisasi button sebagai input dan led sebagai output dengan menggunakan pinMode() dan Serial.begin(115200)digunakan untuk menginisialisasi komunikasi serial pada baud rate 115200.
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Pada loop()akan dilakukan pembacaan kondisi (state) button dan mengeset ke LED. buttonState = digitalRead(buttonPin); digunakan untuk membaca button state dan menyimpannya di buttonState.
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} digunakan untuk mengecek apakah buttonState is HIGH, jika iya LED akan menyala menggunakan fungsi digitalWrite() yang menerima argumen ledPin dengan state HIGH
else {
digitalWrite(ledPin, LOW);
} jika buttonState is not HIGH, maka LED akan mati menggunakan fungsi digitalWrite() yang menerima argumen ledPin dengan state LOW.
Hasil : Lampu LED akan menyala ketika push button ditekan, dan lampu LED akan mati/ redup ketika push button tidak ditekan.
(Video ada pada lampiran di paling bawah)
Eksperimen dan demo :
- Akan digunakan 2 lampu LED dan 1 button.
Peralatan yang dibutuhkan :
- ESP32
- Breadboard
- 2 lampu LED 5 mm
- 2 buah resistor 10k ohm
- 1 buah resistor 330k ohm
- 1 pushbutton
- Jumper wires
Langkah angkah :
- Susun peralatan menjadi seperti gambar dibawah ini
- Tuliskan program pada Arduino IDE
Analisis dan penjelasan hasil eksperimen yang diperoleh :
Hasil : Pada saat button tidak dipencet maka lampu 1 akan redup dan lampu 2 akan menyala, ketika button dipencet maka lampu 1 akan menyala dan lampu 2 akan redup.
Penjelasan : Hal tersebut dapat terjadi karena pada saat button tidak dipencet (dalam state LOW) maka lampu LED1 yang terhubung dengan GPIO 5 akan redup (LOW) dan lampu LED2 yang terhubung dengan GPIO 21 akan menyala (HIGH), dan sebaliknya saat button dipencet (dalam keadaan HIGH) maka lampu LED1 akan menyala (HIGH) dan lampu LED2 akan redup (LOW)
2. Akan digunakan 2 lampu LED dan 2 button.
Peralatan yang dibutuhkan :
- ESP32
- Breadboard
- 2 lampu LED 5 mm
- 2 buah resistor 10k ohm
- 2 buah resistor 330 ohm
- 2 pushbutton
- Jumper wires
Langkah langkah :
- Susun peralatan menjadi seperti gambar dibawah ini
- Tuliskan program pada Arduino IDE
Analisis dan penjelasan hasil eksperimen yang diperoleh :
Hasil : Pada saat kedua button tidak dipencet, lampu LED1 & LED2 tidak ada yang menyala, saat button1 dipencet LED1 akan menyala dan LED2 akan redup dan jika button 1 dilepas LED1 & LED2 redup, saat button2 dipencet LED1 akan redup dan LED2 akan menyala dan jika button 2 dilepas LED1 & LED2 redup. (Namun button1 dan button2 hanya akan berfungsi jika button tersebut disambungkan dengan 3v3)
Penjelasan : Hal tersebut terjadi karena saat button1 dalam keadaan HIGH (dipencet) LED1 dalam keadaan HIGH (menyala) dan LED2 dalam keadaan LOW (redup), saat button1 dalam keadaan LOW (dilepas/ tidak dipencet) LED1 & LED2 dalam keadaan LOW. Saat button2 dalam keadaan HIGH (dipencet) LED1 dalam keadaan LOW (redup) dan LED2 dalam keadaan HIGH (menyala), saat button2 dalam keadaan LOW (dilepas/ tidak dipencet) LED1 & LED2 dalam keadaan LOW. LED1 terhubung dengan GPIO 5, LED2 terhubung dengan GPIO 21.
2. Analog Input
Membaca sebuah nilai analog menggunakan ESP32 berarti mengukur tingkat tegangan yang bervariasi antara 0 dan 3.3 V. Tegangan yang diukur kemudian ditetapkan ke nilai antara 0 dan 4095, dengan 0 V = 0 dan 3.3 V = 4095.
Peralatan yang dibutuhkan :
- ESP32
- Breadboard
- Jumper Wires
- Potentiometer
Skema :
Langkah-langkah :
- Susun peralatan sesuai dengan skema di atas
- Gunakan program di bawah ini dan tulis di Arduino IDE.
- Lakukan verify dan upload di Arduino IDE.
- Tekan ESP32 reset button, lalu buka serial monitor di baud rate 115200. Putar potentiometer dan lihat nilai yang berubah ubah.
List program :
Pada program tersebut digunakan
const int potPin = 34; digunakan untuk mendefinisikan bahwa potentiometer terhubung dengan GPIO 34. int potValue = 0; digunakan untuk menciptakan sebuah variabel yang menyimpan state potValue dan diinisialisasi dengan 0.
Pada setup()diinisialisasi komunikasi serial pada baud rate 115200 dengan Serial.begin(115200);
Pada loop() menggunakan analogRead() untuk membaca input analog dari potPin dan menyimpannya pada potValue potValue = analogRead(potPin). Lalu dilakukan penampilan nilai potentiometer di serial monitor Serial.println(potValue);
3. Analog Output menggunakan PWM Generator
Akan dibuat rangkaian sederhana yang akan menyalakan dan meredupkan lampu LED menggunakan LED PWM controller, serta menghasilkan sinyal PWM dengan ESP32 menggunakan Arduino IDE
Peralatan yang dibutuhkan :
- ESP32
- 1 buah LED 5 mm
- 1 buah Resistor 330 ohm
- Breadboard
- Jumper wires
Skema :
Langkah langkah :
- Susun peralatan sesuai dengan skema di atas
- Gunakan program di bawah ini dan tulis di Arduino IDE.
- Lakukan verify dan upload di Arduino IDE.
List program :
Pada program tersebut digunakan
const int ledPin = 16; digunakan untuk mendefinisikan bahwa LED terhubung dengan GPIO 16. Set properties PWM sinyal
const int freq = 5000; frequency 5000 Hz
const int ledChannel = 0; channel 0 untuk generate sinyal
const int resolution = 8; resolution 8 bits
Pada setup(), konfigurasi LED PWM dengan properti menggunakan ledcSetup(ledChannel, freq, resolution); Pilih GPIO yang akan menerima sinyal dan channel yang akan menghasilkan sinyal ledAttachPin(ledPin, ledChannel); Akan diterimanya sinyal di ledPin (GPIO 16) dan channel yang menghasilkan sinyal adalah ledChannel yaitu channel 0.
for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
ledcWrite(ledChannel, dutyCycle);
delay(15);
} Pada loop()akan divariasikan siklus kerja antara 0 dan 255 untuk meningkatkan kecerahan LED.
for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
ledcWrite(ledChannel, dutyCycle);
delay(15);
} untuk meredupkan lampu LED.
ledcWrite() digunakan untuk mengatur kecerahan LED yang menerima argumen dutyCycle dan channel yang menghasilkan sinyal
Hasil : Lampu LED akan menyala selama beberapa saat dan redup selama berapa saat. (Video ada pada lampiran di paling bawah)
Eksperimen dan demo :
- Akan dilakukan dengan menggunakan 3 buah lampu LED
Peralatan yang digunakan :
- ESP32
- 3 buah LED 5 mm
- 3 buah resistor 330 ohm
- Breadboard
- Jumper wires
Langkah — langkah :
- Susun peralatan sesuai dengan gambar dibawah ini
- Gunakan program di bawah ini dan tulis di Arduino IDE.
- Lakukan verify dan upload di Arduino IDE.
Analisis dan penjelasan hasil eksperimen yang diperoleh :
Hasil : ketiga lampu LED tersebut akan menyala dan meredup selama beberapa detik secara bersamaan
Penjelasan : hal tersebut dikarenakan ketiga lampu LED (dengan GPIO yang berbeda beda) mendapatkan sinyal yang sama yaitu ledChannel.
void setup(){
ledAttachPin(ledPin, ledChannel);
ledAttachPin(ledPin2, ledChannel);
ledAttachPin(ledPin3, ledChannel);
}
Jika ingin membuat lampu LED menyala lebih lama dapat mengubah nilai dalam delay() menjadi lebih besar.
Video :
Digital Input Output
Analog Output
Referensi
https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
https://randomnerdtutorials.com/esp32-digital-inputs-outputs-arduino/
https://randomnerdtutorials.com/esp32-pwm-arduino-ide/
https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/