아두이노 나노 ESP32 - LED - 딜레이 없는 깜박임 | Arduino Nano ESP32 - LED - Blink Without Delay

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

우리는 아래 세 가지 예시를 살펴보고 그 차이점을 비교할 것입니다.

이 방법은 Arduino Nano ESP32가 동시에 여러 작업을 수행하도록 적용할 수 있습니다. LED 깜박임은 그저 한 예에 불과합니다.

준비물

1×Arduino Nano ESP32 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) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

LED와 버튼에 대하여

LED와 버튼에 대한 구체적인 튜토리얼이 있습니다. 각 튜토리얼에는 하드웨어 핀아웃, 작동 원리, ESP32, 아두이노 나노 ESP32 코드에 대한 배선 연결에 대한 자세한 정보와 단계별 지침이 포함되어 있습니다... 다음 링크에서 자세히 알아보세요:

선연결

Arduino Nano ESP32 LED button Wiring Diagram

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

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

아두이노 나노 ESP32 코드 - 딜레이 포함

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

사용 방법

Arduino Nano ESP32를 시작하는 방법은 다음과 같습니다:

  • 아두이노 나노 ESP32가 처음이라면, 아두이노 IDE에서 아두이노 나노 ESP32 환경 설정하는 방법에 대한 튜토리얼을 참조하십시오. (BASE_URL/tutorials/arduino-nano-esp32/arduino-nano-esp32-software-installation)
  • 제공된 다이어그램에 따라 구성 요소를 연결하십시오.
  • USB 케이블을 사용하여 아두이노 나노 ESP32 보드를 컴퓨터에 연결하십시오.
  • 컴퓨터에서 아두이노 IDE를 실행하십시오.
  • Arduino Nano ESP32 보드와 해당 COM 포트를 선택하십시오.
  • 위의 코드를 복사하여 아두이노 IDE에 붙여넣으십시오.
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노 나노 ESP32 보드에 코드를 컴파일하고 업로드하십시오.
How to upload Arduino Nano ESP32 code on Arduino IDE

아두이노 IDE에서 시리얼 모니터 열기

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

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

아두이노 나노 ESP32 코드 - 지연 없이

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-led-blink-without-delay */ #define LED_PIN D5 // 아두이노 나노 ESP32 핀 D5가 LED에 연결됨 #define BUTTON_PIN D2 // 아두이노 나노 ESP32 핀 D2가 버튼에 연결됨 #define BLINK_INTERVAL 1000 // LED를 깜박이는 간격 (밀리초) int led_state = LOW; // led_state는 LED 설정에 사용됨 int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장함 unsigned long prev_millis = 0; // 마지막으로 LED가 업데이트된 시간을 저장함 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정: pinMode(LED_PIN, OUTPUT); // 디지털 핀을 입력으로 설정: pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // LED를 깜박일 시간인지 확인합니다; 즉, 현재 시간과 마지막으로 LED를 깜박인 시간의 차이가 // LED를 깜박이고 싶은 간격보다 큰지 unsigned long current_millis = millis(); if (current_millis - prev_millis >= BLINK_INTERVAL) { // LED가 꺼져 있으면 켜고, 반대의 경우도 마찬가지: led_state = (led_state == LOW) ? HIGH : LOW; // 변수의 led_state로 LED 설정: digitalWrite(LED_PIN, led_state); // 마지막으로 LED를 깜박인 시간을 저장 prev_millis = current_millis; } // 버튼 상태의 변경을 확인 int button_state = digitalRead(BUTTON_PIN); if (button_state != prev_button_state) { // 버튼의 상태를 출력: Serial.println(button_state); // 버튼의 마지막 상태를 저장 prev_button_state = button_state; } // 여기에서 다른 작업 수행 }

사용 방법

COM6
Send
1 0 1 0 1 0 1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

모든 긴급한 사건이 탐지되었습니다.

코드 줄별 설명

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

더 많은 작업 추가하기

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

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-led-blink-without-delay */ #define LED_PIN_1 D6 // 아두이노 나노 ESP32 핀 D6가 LED 1에 연결됨 #define LED_PIN_2 D5 // 아두이노 나노 ESP32 핀 D5가 LED 2에 연결됨 #define BUTTON_PIN D2 // 아두이노 나노 ESP32 핀 D2가 버튼에 연결됨 #define BLINK_INTERVAL_1 1000 // LED 1을 깜박이는 간격 (밀리초) #define BLINK_INTERVAL_2 500 // LED 2를 깜박이는 간격 (밀리초) int led_state_1 = LOW; // LED 1을 설정하는 데 사용되는 led_state int led_state_2 = LOW; // LED 2를 설정하는 데 사용되는 led_state int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 것임 unsigned long prev_millis_1 = 0; // LED 1이 마지막으로 업데이트된 시간을 저장할 것임 unsigned long prev_millis_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 current_millis = millis(); // LED 1을 깜박일 시간인지 확인 if (current_millis - prev_millis_1 >= BLINK_INTERVAL_1) { // LED가 꺼져 있으면 켜고, 그 반대의 경우도 마찬가지임: led_state_1 = (led_state_1 == LOW) ? HIGH : LOW; // 변수의 led_state로 LED 설정: digitalWrite(LED_PIN_1, led_state_1); // 마지막으로 LED를 깜박인 시간을 저장 prev_millis_1 = current_millis; } // LED 2를 깜박일 시간인지 확인 if (current_millis - prev_millis_2 >= BLINK_INTERVAL_2) { // LED가 꺼져 있으면 켜고, 그 반대의 경우도 마찬가지임: led_state_2 = (led_state_2 == LOW) ? HIGH : LOW; // 변수의 led_state로 LED 설정: digitalWrite(LED_PIN_2, led_state_2); // 마지막으로 LED를 깜박인 시간을 저장 prev_millis_2 = current_millis; } // 버튼 상태의 변경을 확인 int button_state = digitalRead(BUTTON_PIN); if (button_state != prev_button_state) { // 버튼의 상태를 출력: Serial.println(button_state); // 마지막 버튼 상태를 저장 prev_button_state = button_state; } // 여기서 다른 작업 수행 }

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, 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!