ESP-IDF / / 2024. 6. 8. 15:23

[ESP-IDF] Button 값 읽기

728x90

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

 

LED 다음은 버튼을 눌러봐야겠죠? :D

버튼 상태에 따라 LED의 상태가 변경되는 회로와 코드를 만들어보겠습니다.

 

먼저 버튼의 회로는 두 가지 방법이 있습니다.

1. 풀업 or 풀다운 회로를 직접 하드웨어로 구현하는 방법

2. ESP32의 내부 풀업 저항을 사용하는 방법

 

저는 ESP32의 내부 풀업 저항을 사용하는 2번 방법을 사용하도록 하겠습니다 :D

회로는 아래와 같이 구성하시면됩니다.

 

코드는 아래와 같이 작성하겠습니다.

// 표준 입력 출력 헤더 파일, 주로 printf와 같은 함수를 사용하기 위해서 선언
#include <stdio.h>

// FreeRTOS 헤더 파일, Task 관련 함수를 사용하기 위해서 선언
// 이 코드에서는 vTaskDelay 사용합니다.
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

// GPIO 관련 함수들을 사용하기 위해 선언
#include "driver/gpio.h"

#define BLINK_GPIO 5   // LED 핀 번호 정의 (회로도 참고!)
#define BUTTON_GPIO 22 // GPIO 핀 번호 정의

uint8_t led_state = 0;

void app_main(void)
{   
    // 사용할 GPIO 핀을 초기화 후 핀의 모드를 출력으로 설정.
    gpio_reset_pin(BLINK_GPIO);
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

    // 사용할 GPIO 핀을 초기화 후 핀의 모드를 입력으로 설정.
    gpio_reset_pin(BUTTON_GPIO); 
    gpio_set_direction(BUTTON_GPIO, GPIO_MODE_INPUT);

    while(true)
    {
        int btn_state = gpio_get_level(BUTTON_GPIO); // GPIO 핀의 디지털 값 읽기
        gpio_set_level(BLINK_GPIO, btn_state); // btn_state에 따른 값에 대한 LED 핀의 값를 설정 

        vTaskDelay(10 / portTICK_PERIOD_MS); // 0.01초 동안 딜레이
    }
}

 

추가적인 설명을 드리면, gpio_reset_pin()를 호출하셨다면,

별도의 input pull up 세팅을 하실 필요는 없습니다.

 

gpio_reset_pin()를 호출하게되면, 아래와 같은 로그를 확인하 실 수 있는데요.

로그를 자세히 보시면, Pull up이 활성화 되어 있는 걸 보실 수 있습니다.

 

 

자세한 부분은 gpio_reset_pin() 내부를 살펴보시면 확인하실 수 있습니다.

이 부분에 대해서는 추후에 GPIO를 세부적으로 세팅할때 보겠습니다.

 

코드와 회로가 완성된 결과를 보시면 다음과 같습니다.

 

다음에는 GPIO config 세팅에 대해서 알아보도록 하겠습니다

 

감사합니다 :D

 

반응형

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

[ESP-IDF] GPIO config 세팅  (1) 2024.06.09
[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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유