ESP8266 - LED - 딜레이 없이 깜박임 | ESP8266 - LED - Blink Without Delay

우리가 ESP8266이 LED를 깜박이는 일과 언제든 눌릴 수 있는 버튼의 상태를 모니터링하는 두 가지 작업을 수행해야 한다고 상상해 봅시다. 만약 delay() 함수를 사용한다면(이전 튜토리얼에서 설명한 것처럼 [BASE_URL/tutorials/esp8266/esp8266-led]), ESP8266은 일부 버튼 누름을 놓칠 수 있습니다. 다시 말해, ESP8266은 두 번째 작업을 완전히 수행할 수 없게 됩니다.

이 튜토리얼은 ESP8266이 LED를 깜박이게 하고 버튼의 상태를 놓치지 않고 모니터링하는 방법을 알려줍니다.

우리는 세 가지 예를 살펴보고 그들 사이의 차이점을 비교할 것입니다:

이 방법은 LED를 깜박이고 버튼의 상태를 확인하는 것에만 국한되지 않습니다. 일반적으로 ESP8266이 서로를 차단하지 않고 여러 작업을 동시에 수행할 수 있게 합니다.

준비물

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

LED와 버튼에 대하여

LED와 버튼(핀 배치, 기능성, 프로그래밍 등)에 익숙하지 않다면, 다음 튜토리얼이 도움이 될 수 있습니다:

선연결

ESP8266 NodeMCU LED wiring diagram

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

ESP8266의 핀 배치ESP8266 및 다른 구성 요소에 전원을 공급하는 방법에 대해 더 많이 보십시오.

ESP8266 코드 - 지연 시간 포함

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

사용 방법

Arduino IDE에서 ESP8266을 시작하는 방법은 다음과 같은 단계를 따르세요:

  • ESP8266을 Arduino IDE에서 설정하는 방법에 대해 처음인 경우 ESP8266 소프트웨어 설치 튜토리얼을 확인하세요.
  • 다이어그램에 표시된 대로 구성 요소를 연결하세요.
  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드를 선택하세요. 예를 들어, NodeMCU 1.0 (ESP-12E Module)과 해당 COM 포트를 선택하세요.
  • USB 케이블을 ESP8266과 PC에 연결하세요.
  • Arduino IDE를 실행하여 올바른 보드와 포트를 선택하세요.
  • 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 ESP8266에 업로드하세요.
How to upload code to ESP8266 NodeMCU using Arduino IDE
  • 시리얼 모니터를 엽니다.
  • 버튼을 네 번 누릅니다.
  • LED를 확인하세요; 1초마다 켜졌다 꺼졌다 합니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

시리얼 모니터에서, 몇몇 누름 시간이 등록되지 않았습니다. 이는 ESP8266이 지연 상태인 동안 어떠한 작업도 수행할 수 없기 때문입니다. 결과적으로, 누름 이벤트를 감지할 수 없습니다.

ESP8266 코드 - 지연 없이

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

사용 방법

  • 다이어그램에 표시된 대로 구성요소를 연결하세요.
  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드를 선택하세요. 예를 들어, (NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택합니다.
  • 코드를 실행하고 버튼을 4번 누르세요.
  • LED를 확인하세요. 1초 간격으로 규칙적으로 켜지고 꺼집니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
1 0 1 0 1 0 1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

모든 긴급한 문제들이 식별되었습니다.

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

더 많은 작업 추가하기

아래의 ESP8266 코드는 다음과 같습니다:

  • 두 개의 LED를 다른 간격으로 깜빡입니다.
  • 버튼의 상태를 확인합니다.
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-led-blink-without-delay */ #define BUTTON_PIN D1 // ESP8266 핀 D1이 버튼에 연결됨 #define LED_PIN_1 D6 // ESP8266 핀 D7이 led에 연결됨 #define LED_PIN_2 D7 // ESP8266 핀 D7이 led에 연결됨 #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_time_ms_1 = 0; // LED 1이 마지막으로 업데이트된 시간을 저장할 것 unsigned long prev_time_ms_2 = 0; // LED 2가 마지막으로 업데이트된 시간을 저장할 것 void setup() { Serial.begin(9600); // ESP8266 핀을 디지털 출력 핀으로 구성 pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); // ESP8266 핀을 디지털 입력 핀으로 구성 pinMode(BUTTON_PIN, INPUT); } void loop() { unsigned long time_ms = millis(); // LED 1을 깜빡일 시간인지 확인 if (time_ms - prev_time_ms_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_time_ms_1 = time_ms; } // LED 2를 깜빡일 시간인지 확인 if (time_ms - prev_time_ms_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_time_ms_1 = time_ms; } // 버튼 상태의 변화를 확인 int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // 버튼의 상태를 출력: Serial.println(button_state); // 버튼의 마지막 상태를 저장 prev_button_state = button_state; } // 여기서 다른 작업을 하세요 }

동영상

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

확장성

이 방법은 ESP8266이 여러 작업을 동시에 수행할 수 있게 해줍니다. 한 작업이 다른 작업을 차단하지 않고요. 예를 들어, 인터넷에 요청을 보내고 응답을 기다리는 동안 LED 표시등을 깜박이고 취소 버튼을 모니터링하는 것입니다.

※ 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!