ESP32 C3 Super Mini 버튼

ESP32 C3 Super Mini에서 버튼을 사용하는 방법을 배우는 것은 모든 Arduino 프로젝트의 가장 중요한 기술 중 하나입니다. 이 튜토리얼은 초보자가 버튼 배선, 코딩 및 일반적인 문제 해결을 쉽게 이해할 수 있도록 합니다.

이 튜토리얼에서 배울 내용:

ESP32 C3 Super Mini - 버튼

※ 주의:

버튼에 대해 설명하기 전에 초보자들이 일반적으로 만나는 두 가지 일반적인 실수를 알리고 싶습니다:

  1. 부동 입력 문제:
    • 증상: ESP32 C3 Super Mini 입력 핀에 버튼을 연결할 때 입력 핀의 상태는 임의적이고 버튼의 누르기 상태와 일치하지 않습니다.
    • 원인: 버튼 핀이 풀다운 저항 또는 풀업 저항을 사용하지 않습니다.
    • 해결책: ⇒ 입력 핀에 풀다운 저항 또는 풀업 저항을 사용합니다. 상세한 내용은 이 튜토리얼의 나중에 설명됩니다.
  • 채터링 현상
    • 증상: ESP32 C3 Super Mini의 코드가 버튼의 상태를 읽고 상태 변경 (HIGH에서 LOW로 또는 LOW에서 HIGH로)을 감지하여 누르기 이벤트를 식별합니다. 버튼을 실제로 한 번만 누르면 ESP32 C3 Super Mini 코드가 한 번이 아닌 여러 번 누르기를 감지합니다.
    • 원인: 기계적 및 물리적 특성으로 인해 버튼을 한 번 누르면 입력 핀의 상태가 한 번이 아닌 여러 번 LOWHIGH 사이에서 빠르게 토글됩니다
    • 해결책: ⇒ 디바운스. 상세한 내용은 ESP32 C3 Super Mini - 버튼 - 디바운스 튜토리얼에 설명되어 있습니다.

    채터링 현상은 정확한 누르기 수를 감지해야 하는 특정 종류의 응용 프로그램에서만 오작동을 일으킵니다. 어떤 종류의 응용 프로그램에서는 해롭지 않습니다.

    필요한 하드웨어

    1×ESP32 C3 Super Mini 아마존
    1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
    1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
    1×캡이 있는 버튼 쿠팡 | 아마존
    1×버튼 키트 쿠팡 | 아마존
    1×패널 장착 푸시 버튼 아마존
    1×푸시 버튼 모듈 아마존
    1×브레드보드 쿠팡 | 아마존
    1×점퍼케이블 쿠팡 | 아마존
    1×(옵션) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
    공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

    버튼 정보

    푸시 버튼은 누르면 닫히고 놓으면 열리는 간단한 스위치입니다.

    일반적인 버튼 유형:

    • PCB 마운트 푸시 버튼 (브레드보드에 완벽)
    • 패널 마운트 푸시 버튼 (프로젝트 인클로저용)
    • 버튼 모듈 (내장 풀다운 저항 포함)

    버튼이 유용한 이유:

    • ESP32 C3 Super Mini 프로젝트를 위한 간단한 사용자 입력
    • LED, 모터 및 기타 출력 제어
    • 코드에서 작업 및 이벤트 트리거
    ESP32 C3 Super Mini 푸시 버튼

    버튼 핀아웃

    PCB 마운트 버튼 (4개 핀)

    PCB 마운트 버튼에는 내부적으로 쌍으로 연결된 4개의 핀이 있습니다.

    버튼 핀아웃

    주요 포인트:

    • 2개의 핀만 필요합니다 (다른 쌍에서)
    • 4개의 배선 옵션이 있지만 2개의 실용적인 방법으로 줄어듭니다
    • 4개의 핀은 누르기 힘에 안정성을 제공합니다
    버튼을 사용하는 방법

    패널 마운트 버튼 (2개 핀)

    패널 마운트 버튼에는 두 개의 간단한 핀이 있습니다.

    2핀 푸시 버튼 핀아웃
    image source: diyables.io

    버튼 모듈 (3개 핀)

    버튼 모듈에는 안정적인 작동을 위한 내장 풀다운 저항이 포함되어 있습니다.

    • GND: 그라운드에 연결
    • VCC: 3.3V 전원 공급에 연결
    • OUT: ESP32 C3 Super Mini 디지털 입력 핀에 연결 (누르지 않았을 때 LOW, 눌렀을 때 HIGH 출력)

    버튼이 작동하는 방법

    버튼은 상태를 기반으로 두 핀을 연결하거나 연결 해제합니다.

    • 누를 때: 핀 A가 핀 B에 연결됩니다
    • 놓을 때: 핀 A가 핀 B에서 연결 해제됩니다
    버튼이 작동하는 방법

    ESP32 C3 Super Mini - 버튼

    한 버튼 핀은 ESP32 C3 Super Mini 디지털 입력 핀에 연결되고, 다른 하나는 VCC 또는 GND에 연결됩니다.

    버튼 상태 읽기:

    • ESP32 코드가 입력 핀 상태를 읽습니다
    • 상태는 버튼이 눌렸는지 여부를 알려줍니다

    입력 상태와 누르기 상태

    입력 핀 상태와 버튼 누르기 상태 간의 관계는 배선 구성에 따라 달라집니다.

    두 가지 일반적인 배선 방법:

    1. 버튼이 VCC에 연결됨:
      • 풀다운 저항 필요
      • 버튼 누르기 = HIGH 신호
      • 버튼 놓기 = LOW 신호
  • 버튼이 GND에 연결됨 (초보자에게 권장):
    • 풀업 저항 필요
    • 버튼 누르기 = LOW 신호
    • 버튼 놓기 = HIGH 신호

    ※ 주의:

    풀다운 저항 또는 풀업 저항을 사용하지 않으면 버튼을 누르지 않았을 때 입력 핀의 상태는 HIGH 또는 LOW 사이에서 임의적입니다 (불안정하고 고정되지 않음). 이것을 "부동 입력 문제"라고 합니다. 이로 인해 오작동이 발생합니다.

    초보자 팁:

    • ESP32의 내부 풀업 저항을 사용합니다 (외부 부품 필요 없음)
    • 배선을 간단히 하고 하드웨어 요구 사항을 줄입니다

    ESP32 C3 Super Mini와 버튼 간의 배선 다이어그램

    다양한 버튼 유형을 ESP32 C3 Super Mini에 연결하는 방법은 다음과 같습니다.

    PCB 마운트 버튼으로 배선:

    ESP32 C3 Super Mini 버튼 배선 다이어그램

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    Button Pin ESP32 C3 Super Mini Pin
    Pin A GPIO7
    Pin B GND

    패널 마운트 버튼으로 배선:

    ESP32 C3 Super Mini 2핀 푸시 버튼 배선 다이어그램

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    Button Pin ESP32 C3 Super Mini Pin
    Pin 1 GPIO7
    Pin 2 GND

    버튼을 프로그래밍하는 방법

    ESP32 C3 Super Mini에서 버튼을 프로그래밍하는 것은 두 가지 간단한 단계를 포함합니다.

    단계 1: 내부 풀업으로 핀 초기화:

    pinMode(D7, INPUT_PULLUP); // GPIO7을 입력 핀으로 구성하고 내부 풀업 저항을 활성화합니다

    단계 2: 버튼 상태 읽기:

    int button_state = digitalRead(BUTTON_PIN);

    두 가지 일반적인 사용 사례:

    ※ 주의:

    널리 사용되는 두 가지 사용 사례가 있습니다:

    • 첫 번째 사용 사례: 입력 상태가 HIGH이면 뭔가를 합니다. 입력 상태가 LOW이면 다른 것을 합니다.
    • 두 번째 사용 사례: 입력 상태가 LOW에서 HIGH로 변경되면 뭔가를 합니다. 입력 상태가 HIGH에서 LOW로 변경되면 다른 것을 합니다.

    응용 프로그램에 따라 이 중 하나를 사용합니다. 예를 들어 버튼으로 LED를 제어하는 경우:

    • 버튼을 누르면 LED를 켜고 버튼을 누르지 않으면 LED를 끄려면 첫 번째 경우를 사용해야 합니다.
    • 버튼을 누를 때마다 LED를 ON OFF 사이에서 토글하려면 두 번째 경우를 사용해야 합니다.

    예제: LOW에서 HIGH로의 상태 변경 감지:

    #define BUTTON_PIN 7 // GPIO7 핀이 버튼에 연결됨 int prev_state = HIGH; // 입력 핀의 이전 상태 int button_state; // 입력 핀의 현재 읽기 void setup() { Serial.begin(115200); // 푸시 버튼 핀을 풀업 입력으로 초기화합니다 pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // 스위치/버튼의 상태를 읽습니다: button_state = digitalRead(BUTTON_PIN); if(prev_state == LOW && button_state == HIGH) Serial.println("상태가 LOW에서 HIGH로 변경됨"); // 마지막 상태를 저장합니다 prev_state = button_state; }

    ESP32 C3 Super Mini 코드

    이 코드는 Serial Monitor에서 버튼 상태를 읽고 표시합니다.

    코드가 하는 일:

    • D2 핀을 내부 풀업 저항이 있는 입력으로 구성합니다
    • 버튼 상태를 지속적으로 읽습니다
    • 상태 (HIGH 또는 LOW)를 Serial Monitor에 인쇄합니다
    • 100밀리초마다 업데이트합니다

    빠른 단계

    • Arduino를 처음 사용하세요? 먼저 ESP32 C3 Super Mini 시작하기 가이드를 시작하세요.
    • 컴포넌트 연결: 위에 표시된 배선 다이어그램을 따릅니다.
    • 보드 연결: USB 케이블을 통해 ESP32 C3 Super Mini를 컴퓨터에 플러그합니다.
    • Arduino IDE 열기: 컴퓨터에서 소프트웨어를 실행합니다.
    • 보드 선택: ESP32 C3 Super Mini와 올바른 COM 포트를 선택합니다.
    • 코드 업로드: 아래 코드를 복사하여 Arduino IDE에 붙여넣습니다.
    #define BUTTON_PIN 7 // The ESP32 C3 SuperMini pin GPIO7 pin connected to button void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(115200); // initialize the button pin as an pull-up input (HIGH when the switch is open and LOW when the switch is closed) pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
    • 컴파일 및 업로드: Arduino IDE에서 Upload 버튼을 클릭합니다.
    아두이노 ide에서 ESP32 C3 Super Mini 코드를 업로드하는 방법
    • Serial Monitor 열기: Arduino IDE에서 Serial Monitor 아이콘을 클릭합니다.
    아두이노 ide에서 serial monitor를 여는 방법
    • 버튼 테스트: 버튼을 여러 번 누르고 놓습니다.
    • 결과 보기: Serial Monitor 출력을 확인합니다.
    • Pro Tip: Serial Monitor 보드 레이트를 115200으로 설정하여 코드와 일치시킵니다.

    Serial Monitor 출력

    Newbiely | Arduino IDE 2.3.8
    ──
    File
    Edit
    Sketch
    Tools
    Help
    ESP32C3 Dev Module
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
    New Line
    9600 baud
    1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0
    Ln 11, Col 1
    ESP32C3 Dev Module on COM15
    2

    참고: 1은 HIGH (버튼 놓음), 0은 LOW (버튼 누름)를 나타냅니다.

    라인별 코드 설명

    위의 ESP32 C3 Super Mini 코드에는 라인별 설명이 포함되어 있습니다. 코드의 주석을 읽으세요!

    ESP32 C3 Super Mini 코드 수정

    상태만 읽지 말고 누르기 및 놓기 이벤트를 감지하도록 코드를 개선해 봅시다.

    이 수정된 코드가 하는 일:

    • 버튼이 눌렸을 때 감지 (상태가 HIGH에서 LOW로 변경)
    • 버튼이 놓았을 때 감지 (상태가 LOW에서 HIGH로 변경)
    • 각 이벤트에 대해 명확한 메시지를 인쇄합니다
    • 이전 상태를 추적하여 변경 사항을 식별합니다

    빠른 단계

    /* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-button */ #define BUTTON_PIN 7 // The ESP32 C3 SuperMini pin GPIO7 pin connected to button int prev_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(115200); // initialize the button pin as an pull-up input (HIGH when the switch is open and LOW when the switch is closed) pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_state = button_state; }
    • 코드 업로드: ESP32 C3 Super Mini 보드에 컴파일하고 업로드합니다.
    • Serial Monitor 열기: 출력 창을 봅니다.
    • 테스트: 버튼을 누르고 놓습니다.
    • 결과 관찰: 이벤트 메시지를 위해 Serial Monitor를 확인합니다.

    Serial Monitor 출력

    Newbiely | Arduino IDE 2.3.8
    ──
    File
    Edit
    Sketch
    Tools
    Help
    ESP32C3 Dev Module
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
    New Line
    9600 baud
    The button is pressed The button is released The button is pressed The button is pressed The button is released The button is pressed The button is released
    Ln 11, Col 1
    ESP32C3 Dev Module on COM15
    2

    ※ 주의:

    • Serial Monitor는 한 번의 누르기 및 놓기만 했어도 여러 개의 누르기 및 놓기 이벤트를 인쇄할 수 있습니다. 이것은 버튼의 정상적인 동작입니다. 이 동작을 "채터링 현상"이라고 합니다. 일부 응용 프로그램에서는 이를 제거하는 방법이 필요합니다. ESP32 C3 Super Mini - 버튼 디바운스 튜토리얼에서 자세히 알아볼 수 있습니다.
    • 초보자를 위해 간단하게 하려면, 특히 여러 버튼을 사용할 때 ezButton이라는 라이브러리를 만들었습니다. 여기서 ezButton 라이브러리에 대해 배울 수 있습니다.
    • 버튼 모듈을 사용할 때 핀을 pinMode(BUTTON_PIN, INPUT)으로 설정합니다. 모듈은 누르지 않았을 때 LOW, 눌렀을 때 HIGH를 출력합니다.

    응용 프로그램/프로젝트 아이디어

    ESP32 C3 Super Mini 프로젝트에서 버튼을 사용하는 창의적인 방법입니다.

    • 버튼 누르기로 LED 밝기 또는 색상 제어
    • 디지털 카운터 또는 스코어보드 생성
    • 여러 버튼이 있는 퀴즈 버저 시스템 구축
    • 버튼 활성화 경보가 있는 보안 시스템 설계
    • 음악 플레이어 컨트롤러 만들기 (재생, 일시 정지, 건너뛰기)
    • 스마트 홈 라이트 스위치 교체 개발

    비디오 섹션

    이 프로젝트의 시각적 설명을 보려면 아래 비디오를 시청하세요.

    자신을 시도해보기

    이러한 과제를 통해 버튼 기술을 다음 수준으로 끌어올립니다.

    • 쉬움: 버튼을 누를 때 켜지는 LED를 추가합니다
    • 쉬움: 버튼이 눌린 횟수를 세고 개수를 표시합니다
    • 중간: 짧은 누르기와 긴 누르기에 대해 다른 작업을 트리거하는 긴 누르기 감지기를 만듭니다
    • 중간: 여러 누르기 감지를 제거하려면 적절한 디바운싱을 구현합니다
    • 고급: 비밀 코드 시퀀스가 있는 여러 버튼을 사용하여 조합 잠금 구축

    추가 지식

    풀업 또는 풀다운 저항을 언제 사용할지 이해하는 것은 신뢰할 수 있는 ESP32 C3 Super Mini 프로젝트에 필수입니다.

    풀업/풀다운 저항을 사용해야 할 때:

    • 사용해야 함: 두 가지 상태 (열림/닫힘)의 센서에는 명확한 HIGH/LOW 신호를 만드는 저항이 필요합니다
      • 예제: 푸시 버튼, 스위치, 자기 접점 스위치 (도어 센서)
    • 사용하지 말아야 함: 전압 레벨 (LOW/HIGH)을 출력하는 센서는 저항이 필요하지 않습니다

    의견