Tutorial ESP32 dengan ESP-IDF : #3 Blinky !!
Ini adalah artikel lanjutan dari seri tutorial ESP32 dengan ESP-IDF dimana pada bagian ke 1 dan ke 2 yang lalu telah dibahas bagaimana memulai mempersiapkan environment dan membuat program pertama HelloWorld menggunakan template ESP-IDF (Espressif IoT Development Framework).
Kali ini pembahasan akan dilanjutkan dengan bagaimana mengakses LED internal pada ESP32 dan membuatnya menyala berkedip – kedip. Sebelum melanjutkan pembahasan ini, diharapkan pembaca telah mengikuti pembahasan yang lalu di seri Tutorial ESP32 dengan ESP-IDF
Baca juga :
- Prasyarat Perangkat Keras
Development Board yang kompatibel dengan artikel kali ini dan dapat dibeli di TOKO BEY. . Salah satu jenisnya adalah ESP32S DevKit DOIT dengan kaki – kaki pin berjumlah 38 seperti berikut
Development board lainnya, yang sedikit berbeda namun memiliki diagram pin yang sama adalah sebagai berikut
Pembaca dapat membeli modul ESP32 melalui TOKO BEY dengan mengakses halaman pembelian di tautan berikut. Jika pembaca merasa tulisan ini bermanfaat, pembaca dapat berterimakasih dengan membeli produk di TOKO BEY
- Prasyarat Perangkat Lunak
Sebagaimana pernah dibahas, pada tutorial kali ini embeddednesia menggunakan environment perangkat lunak yangs sama dengan yang pernah dibahas pada dua artikel sebelumnya di tautan berikut
- Tutorial ESP32 dengan ESP-IDF: #1 Mempersiapkan Environment
- Tutorial ESP32 dengan ESP-IDF : #2 Membuat Program “Hello World”
- Rangkaian Perangkat keras
Pada artikel kali ini, diguanakan LED built-in yang sudah terpasang secara bawaan pada development board ESP32. Pembaca juga dapat menghubungkannya gpio 2 (led built in) ke led external sendiri
- Membuat Project
Jika ingin membuat project dari nol, programmer dapat meng-clone ESP-IDF Template
dan mengatur konfigurasinya seperti yang pernah dibahas pada saat membuat program Hello World yang lalu.
Namun jika ternyata pembaca sudah pernah membuat project HelloWorld sebagaimana pernah dibahas pada artikel yang lalu, untuk membuat project baru, tinggal copy paste saja project HelloWorld tersebut dengan klik kanan pada direktori project, lalu pilih copy dan paste di Panel Project Explorer. Beri nama project tersebut Blink
.
Agar tidak terjadi salah build, pastikan project selain Blink
sebaiknya dalam kondisi close. Caranya klik kanan direktori project yang ingin di-close, lalu pilih Close Project. Jika suatu saat programmer ingin membuka lagi tinggal klik kanan lalu Open Project
- Menulis Code
Pada main.cpp
ganti code-nya dengan code berikut
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include "freertos/FreeRTOS.h" | |
#include "freertos/task.h" | |
#include "esp_system.h" | |
#include "esp_spi_flash.h" | |
#include "driver/gpio.h" | |
#include "sdkconfig.h" | |
#define BLINK_GPIO 2 | |
void app_main() | |
{ | |
/* Configure the IOMUX register for pad BLINK_GPIO (some pads are | |
muxed to GPIO on reset already, but some default to other | |
functions and need to be switched to GPIO. Consult the | |
Technical Reference for a list of pads and their default | |
functions.) | |
*/ | |
gpio_pad_select_gpio(BLINK_GPIO); | |
/* Set the GPIO as a push/pull output */ | |
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); | |
while(1) { | |
/* Blink off (output low) */ | |
printf("Turning off the LED\n"); | |
gpio_set_level(BLINK_GPIO, 0); | |
vTaskDelay(1000 / portTICK_PERIOD_MS); | |
/* Blink on (output high) */ | |
printf("Turning on the LED\n"); | |
gpio_set_level(BLINK_GPIO, 1); | |
vTaskDelay(1000 / portTICK_PERIOD_MS); | |
} | |
} |
- Penjelasan Program
Untuk dapat mengakses GPIO guna menyalakan LED internal, maka yang pertama perlu dilakukan adalah memasukkan di- #include
library driver/gpio.h
sebagaimana pada baris 4, untuk dapat mengakses library gpio.
Berikutnya pada baris 19, programmer memilih Pin yang akan diaktifkan menggunakan statement gpio_pad_select_gpio
dengan argumen nomer pin dari ESP32 yang ingin digunakan, dalam artikel ini digunakan pin 2 (LED built in).
void gpio_pad_select_gpio(uint8_t gpio_num);
Setelah itu, GPIO 2 harus diatur terlebih dahulu sebagai mode output. Untuk keperluan ini dapat digunakan gpio_set_direction
seperti pada baris 21.
esp_err_tgpio_set_direction(gpio_num_tgpio_num, gpio_mode_tmode)
Argumen pertama dari fungsi gpio_set_direction
adalah gpio_num
yang merupakan nomer pin gpio yang ingin digunakan. Sedangkan, argumen kedua adalah mode dari pin gpio yang digunakan. Ada 6 mode yang tersedia
No | Mode | Nilai | Hexa |
1 | Disable Input dan Ouput | GPIO_MODE_DEF_DISABLE | 0 |
2 | Hanya Input | GPIO_MODE_DEF_INPUT | 0x1 |
3 | Hanya Output | GPIO_MODE_DEF_OUTPUT | 0x2 |
4 | Hanya output dengan Open drain | ((GPIO_MODE_DEF_OUTPUT)|(GPIO_MODE_DEF_OD)) | 0x6 |
5 | Output dan Input dengan open drain | ((GPIO_MODE_DEF_INPUT)|(GPIO_MODE_DEF_OUTPUT)|(GPIO_MODE_DEF_OD)) | 0x7 |
6 | Output dan Input | ((GPIO_MODE_DEF_INPUT)|(GPIO_MODE_DEF_OUTPUT)) | 0x3 |
Mode Open Drain :
GPIO_MODE_DEF_OD
= 0x4Setelah selesei diinisialisasi di baris 21, maka selanjutnya pada blok superloop while(1) di barus 21 sampai dengan 33, program tinggal diatur untuk menyala dengan mengeset gpio_set_level
menjadi logika 1. Dan logika 0 jika ingin dijadikan padam.
esp_err_tgpio_set_level
(gpio_num_tgpio_num, uint32_t level)
vTaskDelay
digunakan untuk memberikan jeda beberapa saat antara posisi ON dan OFF pada pin gpio, sehingga proses kelap – kelip pada led dapat diamati oleh mata manusia.
- Running
Berikut adalah hasil ketika program selesei di-build, flashing dan dijalankan dengan make monitor
[…] Tutorial ESP32 dengan ESP-IDF : #3 Blinky !! […]
[…] Tutorial ESP32 dengan ESP-IDF : #3 Blinky !! […]