Membaca GPIO pada ESP32 Dengan Register #
Pada ESP32 terdapat pin GPIO (General Purpose Input Output) yang dapat dibaca oleh perangkat lunak. Membaca GPIO dapat dilakukan dengan library Arduino dengan fungsi digitalRead(), dan dapat juga dengan langsung mengakses register. Pembacaaan melalui register lebih cepat, namun sedikit lebih rumit dibandingkan menggunakan library Arduino. Berikut cara membaca Nilai GPIO pada ESP32 langsung melalui register.
Percobaan 1 dengan struktur data GPIO #
Pada percobaan ini menggunakan variabel GPIO.in yang dipetakan ke register IO.
#include "soc/gpio_struct.h" // Include the GPIO register definitions
const int gpioPin_lo = 5;
const int gpioPin_hi = 33;
void setup() {
Serial.begin(115200);
Serial.println("\nContoh program membaca digital input menggunakan akses langsung register");
Serial.println(__FILE__);
pinMode(gpioPin_lo, INPUT_PULLUP); // Enable pull-up
pinMode(gpioPin_hi, INPUT_PULLUP); // enable pull up
}
void loop() {
// Read the GPIO input register
bool gpio_lo_state = (GPIO.in >> gpioPin_lo) & 0x01;
bool gpio_hi_state = (GPIO.in1.val >> (gpioPin_hi - 32)) & 0x01;
Serial.print("GPIO state: ");
Serial.print(gpio_lo_state);
Serial.print(" ");
Serial.println(gpio_hi_state);
delay(1000);
}
Percobaan 2 dengan akses register #
Pada percobaan ini menggunakan register GPIO_IN_REG dan GPIO_IN1_REG.
// contoh program membaca digital input menggunakan register
#define INPUT_PIN1 5 // pin nomor kecil
#define INPUT_PIN2 34 // pin nomor besar
void setup() {
pinMode(INPUT_PIN1, INPUT_PULLUP);
pinMode(INPUT_PIN2, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("\nContoh program membaca digital input menggunakan register");
Serial.println(__FILE__);
}
int counter = 0;
void loop() {
int input_value_1, input_value_2;
input_value_1 = (REG_READ(GPIO_IN_REG) >> (INPUT_PIN1)) & 0x1;
input_value_2 = (REG_READ(GPIO_IN1_REG) >> (INPUT_PIN2 - 32)) & 0x1;
Serial.print(counter);
Serial.print(" ");
Serial.print(input_value_1);
Serial.print(" ");
Serial.print(input_value_2);
Serial.println();
delay(1000);
counter++;
}
Daftar register dapat dibaca di manual referensi teknis ESP32 . Register yang dipakai adalah GPIO_IN_REG dan GPIO_IN1_REG.