ESP-IDF / / 2024. 6. 9. 17:49

[ESP-IDF] GPIO config 세팅

728x90

안녕하세요 데브구일입니다 :D

 

이전에 LED와 버튼을 사용하면서 GPIO를 세팅했었는데요.

이 부분만 보시면 아두이노와 흡사해서 아주 간단했었습니다.

 

그렇지만, ESP-IDF를 사용하시는 경우 좀 더 다양한 세팅이 가능한데요.

먼저 GPIO 세팅할 때 필요한 구조체 하나를 알아보겠습니다.

 

아래 사진은 ESP-IDF Programming Guide에 있는 문서를 캡쳐했습니다 :D

 

ESP-IDF Programming Guide - ESP32 - — ESP-IDF Programming Guide latest documentation

© Copyright 2016 - 2024, Espressif Systems (Shanghai) Co., Ltd.

docs.espressif.com

 

각각에 대해서 설명을 간단하게 적어보자면...

 

1. pin_bit_mask: GPIO 핀의 비트 마스크 설정.

2. mode: GPIO 핀의 모드를 설정.

3. pull_up_en: 내부 풀업 저항을 사용 여부 설정.
4. pull_down_en: 내부 풀다운 저항을 사용 여부 설정.

5. intr_type: GPIO 인터럽트 유형을 설정.

 

이렇게 볼 수 있습니다.

 

제가 버튼 값을 읽을 때 내부 풀업저항을 사용하는 방식을 사용했는데요.

그때 gpio_reset_pin()를 호출하면 자동으로 pull_up이 활성화 된다고 말씀드렸었습니다.

 

한번 gpio_reset_pin()를 살펴보겠습니다!

아래 코드에 gpio_reset_pin()에 대해 간략하게 주석을 달아봤습니다.

 

직접 코드에서 Ctrl키를 누르고 함수를 클릭해보시면,

해당 함수가 정의된 부분을 확인할 수 있으니 직접 해보시는 것도 좋습니다 :D

 

esp_err_t gpio_reset_pin(gpio_num_t gpio_num)
{
    assert(GPIO_IS_VALID_GPIO(gpio_num));
    
    // gpio_config_t 타입의 cfg 구조체를 선언!
    gpio_config_t cfg = {
        .pin_bit_mask = BIT64(gpio_num), // 파라미터로 받은 gpio_num으로 세팅
        .mode = GPIO_MODE_DISABLE, // 모드 비활성화
        //for powersave reasons, the GPIO should not be floating, select pullup
        .pull_up_en = true, // 내부 풀업 저항 활성화
        .pull_down_en = false, // 내부 풀다운 저항 비활성화
        .intr_type = GPIO_INTR_DISABLE, // 인터럽트 유형 비활성화
    };
    
    // cfg 구조체를 기반으로 gpio 세팅
    gpio_config(&cfg);
    return ESP_OK;
}

 

이렇게 세팅을 하면 GPIO핀과 내부 풀업을 활성화하고, 나머지는 비활성화하게 되는데요.

저희는 이 상태에서 gpio_set_direction()를 통해서,

LED를 킬때는 MODE를 OUTPUT으로 사용했고,

Button을 읽을 때는 INPUT으로 세팅을 해주었습니다 :D

 

반대로 나는 reset을 별도로 안하고 세팅을 직접하고 싶다! 하시면 아래와 같이 사용할 수 있습니다.

이런식으로 세팅을 하시면 별도의 gpio_reset_pin()을 사용하지 않아도 직접 세팅이 가능합니다.

예시를 든다면 아래와 같습니다 :D

 

// gpio_config_t 타입의 gpio_conf 구조체를 선언!
gpio_config_t gpio_conf = {
    .pin_bit_mask = BIT64(BUTTON_GPIO), // BUTTON_GPIO 세팅
    .mode = GPIO_MODE_INPUT, // IUPUT 모드 활성화
    .pull_up_en = true, // 내부 풀업 저항 활성화
    .pull_down_en = false, // 내부 풀다운 저항 비활성화
    .intr_type = GPIO_INTR_DISABLE, // 인터럽트 유형 비활성화
};

// gpio_conf 구조체를 기반으로 gpio 세팅
gpio_config(&gpio_conf);

 

좀 더 세세한 부분은 인터럽트와 MODE에 대한 기능들을 살펴봐야 하는 부분이지만,

이런 부분들은 회로와 연관이 있기도하고, 어떤 방식을 사용하는지에 따라 많이 바뀌게됩니다.

 

그렇기 때문에 이렇게 세팅을 해야한다기 보단, 사용하는 회로와 펌웨어에 따라 맞춰서 세팅을 해주셔야합니다.

 

이런 부분들은 하나씩 배워가면서 세팅을 해보도록하겠습니다!! :D

반응형

'ESP-IDF' 카테고리의 다른 글

[ESP-IDF] Button 값 읽기  (0) 2024.06.08
[ESP-IDF] LED Blink 구현  (0) 2024.05.03
[ESP-IDF] 빌드와 플래시 전 보드 세팅  (0) 2024.05.01
[ESP-IDF] ESP-IDF 버전 변경 방법  (0) 2024.04.23
[ESP-IDF] VS Code ESP-IDF 세팅  (0) 2024.04.22
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유