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 |