ESP32 - LED - 지연 없이 깜박임 | ESP32 - LED - Blink Without Delay

초보자들이 처음으로 실행하는 프로그램 중 하나는 LED를 깜박이는 것입니다. LED를 깜박이는 가장 간단한 방법은 delay() 함수를 사용하는 것입니다. 이 함수는 ESP32가 다른 일을 하는 것을 차단합니다. 단 하나의 LED만 깜박이고 싶다면 괜찮습니다. 하지만, 더 많은 LED를 깜박이거나, 병렬로 다른 작업을 하고 싶다면 delay() 함수를 사용할 수 없습니다. 우리는 다른 해결책이 필요합니다. 이 튜토리얼은 delay 함수를 사용하지 않고 여러 작업을 하는 방법을 안내합니다. 더 구체적으로, 우리는 LED를 깜박이면서 버튼의 상태를 확인하는 방법을 배울 것입니다.

아래에 나열된 세 가지 예시를 통해 실행해보고 그 차이점을 비교해 보겠습니다.

이 방법은 ESP32가 동시에 여러 작업을 수행하게 할 수 있습니다. LED를 깜박이는 것은 그저 하나의 예시일 뿐입니다.

준비물

1×ESP-WROOM-32 Dev Module 쿠팡 | Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×LED Amazon
1×220 ohm resistor Amazon
1×Push Button Amazon
1×(Optional) Panel-mount Push Button Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) DC Power Jack 쿠팡 | Amazon
1×(Recommended) ESP32 Screw Terminal Adapter 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

LED와 버튼에 대하여

우리는 LED와 버튼에 관한 특정 튜토리얼을 가지고 있습니다. 각 튜토리얼은 하드웨어 핀배열, 작동 원리, ESP32에 대한 배선 연결, ESP32 코드 등에 관한 자세한 정보와 단계별 지침을 포함하고 있습니다. 다음 링크에서 자세한 내용을 알아보세요:

선연결

ESP32 LED button Wiring Diagram

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

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

delay() 함수를 사용하고 사용하지 않고 LED를 깜박이는 ESP32 코드를 비교해 봅시다

ESP32 코드 - 지연 시간 포함

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-led-blink-without-delay */ #define LED_PIN 21 // ESP32 핀 GPIO21이 LED에 연결됨 #define BUTTON_PIN 18 // ESP32 핀 GPIO18이 버튼에 연결됨 #define BLINK_INTERVAL 1000 // LED를 깜빡이는 간격(밀리초) // 변수는 변경될 것입니다: int ledState = LOW; // ledState는 LED를 설정하는데 사용됨 int previousButtonState = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장함 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정: pinMode(LED_PIN, OUTPUT); // 디지털 핀을 입력으로 설정: pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // LED가 꺼져 있으면 켜고 그 반대의 경우도 마찬가지: ledState = (ledState == LOW) ? HIGH : LOW; // ledState 변수의 상태로 LED를 설정: digitalWrite(LED_PIN, ledState); delay(BLINK_INTERVAL); // 이 시간 동안 버튼이 눌리면 아두이노는 감지할 수 없음 int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState != previousButtonState) { // 버튼의 상태를 출력: Serial.println(currentButtonState); // 버튼의 마지막 상태를 저장 previousButtonState = currentButtonState; } // 여기서 다른 작업을 수행 }

사용 방법

  • ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정하는 방법을 참조하세요.
  • 위 이미지와 같이 배선하세요.
  • ESP32 보드를 마이크로 USB 케이블로 PC에 연결하세요.
  • PC에서 Arduino IDE를 엽니다.
  • 올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
  • 위 코드를 복사하여 Arduino IDE에 붙여넣으세요.
  • Arduino IDE에서 Upload 버튼을 클릭하여 ESP32 보드에 코드를 컴파일하고 업로드하세요.
How to upload ESP32 code on Arduino IDE

Arduino IDE에서 시리얼 모니터 열기

How to open serial monitor on Arduino IDE
  • 버튼을 4번 누르세요
  • LED를 보세요: LED는 매초 주기적으로 ON/OFF가 전환됩니다
  • 시리얼 모니터에서 출력을 확인하세요
COM6
Send
1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

시리얼 모니터에서는 상태가 0(4번 누름)으로 변경되는 것을 충분히 네 번 볼 수 없습니다. 지연 시간 동안 ESP32는 변경 사항을 감지할 수 없기 때문입니다.

ESP32 코드 - 지연 없음

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-led-blink-without-delay */ #define LED_PIN 21 // ESP32 핀 GPIO21이 LED에 연결됨 #define BUTTON_PIN 18 // ESP32 핀 GPIO18이 버튼에 연결됨 #define BLINK_INTERVAL 1000 // LED를 깜박이는 간격(밀리초) // 변수는 변경될 것입니다: int ledState = LOW; // ledState는 LED 설정에 사용됩니다 int previousButtonState = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 것입니다 unsigned long previousMillis = 0; // 마지막으로 LED가 업데이트된 시간을 저장할 것입니다 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정합니다: pinMode(LED_PIN, OUTPUT); // 디지털 핀을 입력으로 설정합니다: pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // LED를 깜박이는 시간이 되었는지 확인합니다; 즉, LED를 깜박인 마지막 시간과 현재 시간 사이의 차이가 // LED를 깜박이고 싶어하는 간격보다 큰지 확인합니다. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= BLINK_INTERVAL) { // LED가 꺼져 있으면 켜고 그 반대의 경우도 마찬가지입니다: ledState = (ledState == LOW) ? HIGH : LOW; // 변수의 ledState로 LED를 설정합니다: digitalWrite(LED_PIN, ledState); // LED를 깜박인 마지막 시간을 저장합니다 previousMillis = currentMillis; } // 버튼 상태의 변화를 확인합니다 int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState != previousButtonState) { // 버튼의 상태를 출력합니다: Serial.println(currentButtonState); // 버튼의 마지막 상태를 저장합니다 previousButtonState = currentButtonState; } // DO OTHER WORKS HERE }

사용 방법

  • ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정하는 방법을 참고하세요.
  • 위의 코드를 실행하고 버튼을 4번 누르세요.
  • LED를 확인하세요: LED가 매초마다 ON/OFF로 주기적으로 전환됩니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
1 0 1 0 1 0 1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

모든 중요한 사건이 감지되었습니다.

코드 설명을 줄 단위로 변역하세요

위의 ESP32 코드에는 줄별 설명이 포함되어 있습니다. 코드의 주석을 읽어 주세요!

더 많은 작업 추가하기

아래 코드는 두 개의 LED를 다른 간격으로 깜박이게 하고 버튼의 상태를 확인합니다.

ESP32 LED two button Wiring Diagram

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

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-led-blink-without-delay */ #define LED_PIN_1 22 // ESP32 핀 GPIO22가 LED에 연결됨 #define LED_PIN_2 21 // ESP32 핀 GPIO21이 LED에 연결됨 #define BUTTON_PIN 18 // ESP32 핀 GPIO18이 버튼에 연결됨 #define BLINK_INTERVAL_1 1000 // LED 1을 깜빡이는 간격 (밀리초) #define BLINK_INTERVAL_2 500 // LED 2를 깜빡이는 간격 (밀리초) // 변수는 변경될 것입니다: int ledState_1 = LOW; // LED 1 설정을 위한 ledState int ledState_2 = LOW; // LED 2 설정을 위한 ledState int previousButtonState = LOW; // 마지막에 버튼이 업데이트된 시간을 저장할 것 unsigned long previousMillis_1 = 0; // 마지막에 LED 1이 업데이트된 시간을 저장할 것 unsigned long previousMillis_2 = 0; // 마지막에 LED 2가 업데이트된 시간을 저장할 것 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정: pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); // 디지털 핀을 입력으로 설정: pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { unsigned long currentMillis = millis(); // LED 1을 깜빡일 시간인지 확인 if (currentMillis - previousMillis_1 >= BLINK_INTERVAL_1) { // LED가 꺼져 있으면 켜고, 그 반대의 경우도 마찬가지입니다: ledState_1 = (ledState_1 == LOW) ? HIGH : LOW; // 변수의 ledState로 LED를 설정: digitalWrite(LED_PIN_1, ledState_1); // LED를 깜빡인 마지막 시간을 저장 previousMillis_1 = currentMillis; } // LED 2를 깜빡일 시간인지 확인 if (currentMillis - previousMillis_2 >= BLINK_INTERVAL_2) { // LED가 꺼져 있으면 켜고, 그 반대의 경우도 마찬가지입니다: ledState_2 = (ledState_2 == LOW) ? HIGH : LOW; // 변수의 ledState로 LED를 설정: digitalWrite(LED_PIN_2, ledState_2); // LED를 깜빡인 마지막 시간을 저장 previousMillis_2 = currentMillis; } // 버튼 상태의 변경을 확인 int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState != previousButtonState) { // 버튼의 상태를 출력: Serial.println(currentButtonState); // 버튼의 마지막 상태를 저장 previousButtonState = currentButtonState; } // 여기서 다른 작업을 수행 }

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!