Menggunakan Pin GPIO Pada ESP32
Setelah sebelumnya embeddednesia membahas mengenai bagaimana variasi cara pemrograman pada ESP32, menggunakan ESP IDF, Arduino IDE, hingga menggunakan MicroPython. Artikel kali ini akan mengulas lebih rinci mengenai pin – pin GPIO yang ada pada ESP32
Gambar 1 berikut mengilustrasikan diagram pin dari ESP-WROOM-32. Pembaca dapat menggunakan gambar ini sebagai bahan referensi jika berinteraksi langsung dengan chip ESP32.
- ESP32 Development Board
Namun pada umumnya terutama seorang perancang akan menggunakan development board ESP32. Berikut adalah contoh 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
Yang perlu diperhatikan adalah, tidak semua pin pada ESP32, dapat diakses oleh development board-nya, dan setiap GPIO sebagaimana diagramnya diilustrasikan pada gambar 1 akan memiliki cara pemrograman yang sama meskipun pada development board yang berbeda.
- Periferal pada ESP32
Sebagaimana pernah dibahas pada tulisan yang lalu, ESP32 memiliki periferal sebagai berikut
- 18 kanal ADC (Analog-to- Digital Converter)
- 3 antarmuka SPI
- 3 antarmuka UART
- 2 antarmuka I2C
- 16 kanal output PWM
- 2 kanal DAC (Digital to Analog Converter)
- 2 antarmuka I2S
- 10 GPIO sensor kapasitif
Fitur ADC (analog to digital Converter) dan DAC (Digital To Analog Converter) spesifik dapat digunakan hanya pada pin -pin tertentu saja. Sedangkan fitur UART, I2C, SPI, PWM dapat diaktifkan secara programmatically. Berikut adalah diagram pin – pin pada development Board ESP32
Meskipun begitu, tidak semua pin dengan fitur tertentu pada ESP32 cocok digunakan untuk semua keperluan di dalam project. Tabel berikut menunjukkan pin – pin yang paling baik digunakan sebagai input, output dan beberapa catatan yang perlu diperhatikan saat menentukan pin mana yang digunakan.
Pin yang diberi highlight hijau, bisa digunakan di dalam project. Sedangkan pin dengan highlight kuning bisa digunakan namun dengan catatan yang perlu diperhatikan, karena terdapat perilaku yang tak terduga terutama saat proses boot. Pin dengan highlight merah tidak direkomendasikan sebagai input ataupun output.
GPIO | Input | Output | Catatan |
0 | pulled up | OK | output sinyal PWM saat boot |
1 | TX pin | OK | output debug saat boot |
2 | OK | OK | Terhubung ke LED on board |
3 | OK | TX pin | HIGH saat boot |
4 | OK | OK | |
5 | OK | OK | output sinyal PWM saat boot |
6 | x | x | terhubung dengan SPI Flash terintegrasi |
7 | x | x | terhubung dengan SPI Flash terintegrasi |
8 | x | x | terhubung dengan SPI Flash terintegrasi |
9 | x | x | terhubung dengan SPI Flash terintegrasi |
10 | x | x | terhubung dengan SPI Flash terintegrasi |
11 | x | x | terhubung dengan SPI Flash terintegrasi |
12 | OK | OK | boot gagal ketika mendapatkan input high |
13 | OK | OK | |
14 | OK | OK | output sinyal PWM saat boot |
15 | OK | OK | output sinyal PWM saat boot |
16 | OK | OK | |
17 | OK | OK | |
18 | OK | OK | |
19 | OK | OK | |
20 | OK | OK | |
21 | OK | OK | |
22 | OK | OK | |
23 | OK | OK | |
24 | OK | OK | |
25 | OK | OK | |
26 | OK | OK | |
27 | OK | OK | |
28 | OK | OK | |
29 | OK | OK | |
30 | OK | OK | |
31 | OK | OK | |
32 | OK | OK | |
33 | OK | OK | |
34 | OK | OK | |
35 | OK | OK | |
36 | OK | Hanya input | |
37 | OK | Hanya input | |
38 | OK | Hanya input | |
39 | OK | Hanya input |
- Pin Hanya Untuk Input
GPIO 34 hingga 39 hanyalah dipergunakan sebagai input. Pin – pin tersebut tidak memiliki pull up internal atau resistor pull down. Berikut adalah pin – pin tersebut
- GPIO 34
- GPIO 35
- GPIO 36
- GPIO 39
- SPI flash terintegrsi dengan ESP-WROOM-32
GPIO 6 hingga GPIO 11 dapat diakses oleh beberapa development board ESP32. Namun pin – pin tersebut terhubung kepada SPI Flash yang teritegrasi dengan ESP-WROOM-32 sehingga tidak direkomendasikan digunakan untuk keperluan lain. Jadi jangan gunakan pin – pin berikut
- GPIO 6 (SCK/CLK)
- GPIO 7 (SDO/SD0)
- GPIO 8 (SDI/SD1)
- GPIO 9 (SHD/SD2)
- GPIO 10 (SWP/SD3)
- GPIO 11 (CSC/CMD)
- Capacitive touch GPIO
ESP32 memiliki 10 sensor sentuh kapasitif yang dapat mengindera benda apapun yang menyimpan muatan listrik seperti kulit manusia. Sehingga pin – pin tersebut dapat mendeteksi variasi induksi ketika GPIO disentuh dengan jari. Pin ini dapat dengan mudah diintegrasikan dengan bantalan kapasitif dan menggantikan tombol mekanik.
Berikut adalah sensor internal sentuh yang terhubung dengan GPIO
- 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)
- Analog to Digital Converter (ADC)
ESP32 memiliki 18 kanal masukan ADC 12 bit, sedangkan ESP8266 hanya 1 kanal ADC 10 bit. Berikut adalah GPIO yang dapat dipergunakan sebagai ADC berikut dengan kanalnya.
- 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)
- Digital to Analog Converter (DAC)
Ada 2 kanal DAC 8 bit pada ESP32 yang berfungsi untuk mengubah sinyal digital ke keluaran tegangan analog. Berikut adalah GPIO dan kanal tersebut
- DAC1 (GPIO25)
- DAC2 (GPIO26)
- GPIO Real Time Clock
ESP32 juga dilengkapi dengan GPIO yang diarahkan ke RTC subsistem rendah daya yang dapat digunakan ketika ESP32 dalam kondisi deep sleep. GPIO RTC ini dapat digunakan untuk membangungkan ESP32 dari kondisi deep sleep ketika co-prosesor ULP (Ultra Low Power) sedang berjalan. Berikut adalah GPIO yang dapat digunakan sebagai external wake up source
- RTC_GPIO0 (GPIO36)
- RTC_GPIO3 (GPIO39)
- RTC_GPIO4 (GPIO34)
- RTC_GPIO5 (GPIO35)
- RTC_GPIO6 (GPIO25)
- RTC_GPIO7 (GPIO26)
- RTC_GPIO8 (GPIO33)
- RTC_GPIO9 (GPIO32)
- RTC_GPIO10 (GPIO4)
- RTC_GPIO11 (GPIO0)
- RTC_GPIO12 (GPIO2)
- RTC_GPIO13 (GPIO15)
- RTC_GPIO14 (GPIO13)
- RTC_GPIO15 (GPIO12)
- RTC_GPIO16 (GPIO14)
- RTC_GPIO17 (GPIO27)
- PWM
ESP32 memiliki 16 kanal PWM independen yang dapat dikonfigurasi untuk menghasilkan sinyal PWM dengan pengaturan yang berbeda – beda. Semua pin yang dapat menjadi keluaran dapat dipergunakan sebagai pin PWM (kecuali GPIO 34 hingga 39)
Untuk mengatur sinyal PWM, perlu ditentukan terlebih dahulu parameter – parameter berikut pada program
- Frekuensi gelombang;
- Duty cycle;
- Kanal PWM;
- GPIO mana yang dipergunakan sebagai keluaran gelombang.
- I2C (Inter-Integrated Circuit)
Jika pembaca memprogram ESP32 menggunakan Arduini IDE, ada dua pin default yang mendukung I2C dan didukung oleh pustaka Wire
, yaitu
- GPIO 21 (SDA)
- GPIO 22 (SCL)
- SPI (Serial Peripheral Interface)
Secara default, mapping pin untuk SPI di ESP 32 adalah sebagai berikut :
SPI | MOSI | MISO | CLK | CS |
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5 |
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15 |
- Interrupts
Semua GPIO pada ESP32 dapat diatur sebagai Interrupt
- Strapping Pins
ESP32 memiliki 6 pin strapping sebagai berikut
- GPIO 0
- GPIO 2
- GPIO 4
- GPIO 5
- GPIO 12
- GPIO 15
Pin – pin tersebut digunakan oleh ESP32 saat mode flashing atau bootloader. Pada sebagian besar board development yang memiliki USB/Serial built-in. kondisi state pin ini tidak perlu dikuatirkan. Karena board yang akan mengaturnya ke kondisi yang sesuai saat mode flashing atau boot.
Meskipun begitu, jika terdapat periferal yang terhubung dengan ke-6 pin tersebut. Ada kemungkinan, proses flashing akan mengalami masalah. Penyebabnya bisa jadi karena periferal yang terhubung dengan pin – pin tersebut mencegah ESP32 masuk ke mode flashing atau boot. Baca tautan berikut tentang dokumentasi Boot Mode pada ESP32
- Pin berada pada kondisi HIGH saat Boot
Beberapa GPIO berubah kondisi statenya menjadi HIGH atau keluaran sinyal PWM saat boot atau reset. Ini berarti, akan terdapat keluaran yang tak terduga saat pin – pin GPIO berikut berada pada kondisi reset atau boot.
- GPIO 1
- GPIO 3
- GPIO 5
- GPIO 6 s/d GPIO 11 (terhubung dengan ESP32 yang terintegrasi dengan memori flash SPI – tidak direkomendasikan untuk digunakan).
- GPIO 14
- GPIO 15
- Enable (EN)
Pin Enable (EN) adalah pin enable regulator 3.3V yang di-pullup dengan resistor sehingga mengetanahkan pin tersebut (menghubungkan ke ground), akan mendisable regulator 3.3V. Sehingga pin ini dapat dihubungkan dengan push button misalnya, guna merestart ESP32
- Arus Yang Dapat Ditarik Pada GPIO
Arus maksimal yang dapat ditarik oleh periferal di tiap GPIO adalah 12mA, sebagaimana tertulis pada datasheet
[…] Menggunakan Pin GPIO Pada ESP32 […]
[…] dari beberapa sumber di internet berikut penjelasan dari masing-masing […]