본문 바로가기

메이커 자료/NodeMCU

NodeMCU ( 2 / 4 ) : LED, 푸시버튼 연결하기

안녕하세요~ 지난 글에서는 NodeMCU에 대한 이해와 간단 설명, 그리고 아두이노 IDE에 NodeMCU 보드를 환경 설정하는 방법에 대해 알아봤습니다.

2019/07/17 - [메이커 자료/NodeMCU] - NodeMCU ( 1 / 4 ) : 소개, 환경설정

이번 글에서는 지난 글에 이어서 NodeMCU에 대한 예제들을 알아보겠습니다.

 

글 순서는 다음과 같습니다.

1. NodeMCU의 소개

2. 아두이노 IDE에서 NodeMCU 환경 설정하기

3. NodeMCU - LED / 푸시버튼 연결하기

4. NodeMCU 네트워크에 연결하기

5. NodeMCU 주변 WiFi 스캔하기

6. NodeMCU 네트워크로 LED원격 조정하기

간단설명...

더보기

예제 설명에 앞서 간략하게 아두이노 IDE의 기본 구성을 살펴보자면

void setup(){

}

void loop(){

}

이렇게 두 부분으로 나뉩니다.

setup 부분은 아두이노를 실행 시 제일 처음에 한 번만 실행하는 것

loop 부분은 아두이노를 실행 시 loop내부에 있는 내용을 계속해서 반복하는 것

입니다.

 

* 참고로 // 는 프로그램 코드에 적용되지 않는 주석을 의미합니다. // 이외에도 /* 주 석 */ 이런 방법이 있습니다.

예제 설명에 앞서 간략하게 아두이노 IDE의 기본 구성을 살펴보자면

void setup(){

}

void loop(){

}

이렇게 두 부분으로 나뉩니다.

setup 부분은 아두이노를 실행 시 제일 처음에 한 번만 실행하는 것

loop 부분은 아두이노를 실행 시 loop내부에 있는 내용을 계속해서 반복하는 것

입니다.

 

* 참고로 // 는 프로그램 코드에 적용되지 않는 주석을 의미합니다. // 이외에도 /* 주 석 */ 이런 방법이 있습니다.

 

3. NodeMCU -LED / 푸시버튼 연결하기

 

[ NodeMCU - LED 연결 ]

이번 예제에서는 아두이노에서 기본적으로 가지고 있는 예제인 Blink 예제를 이용해서 NodeMCU와 LED를 연결해 보겠습니다.

먼저 아두이노 IDE에서 ' 파일 - 예제 - 01. Basics - Blink ' 선택해줍니다

그러면 아래와 같은 코드가 나옵니다.

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

<setup 부분>

pinMode(LED_BUILTIN, OUTPUT);

이라고 되어있는데요.

 

여기서 pinMode( 몇번 핀, INPUT or OUTPUT )는 특정 번호의 핀을 입력 또는 출력으로 동작하도록 설정합니다.

그렇다면 pinMode(LED_BUILTIN, OUTPUT); 은

LED_BUILTIN이라는 핀을 OUTPUT 즉, 출력으로 동작하도록 설정하라는 건데... 

LED_BUILTIN은 무엇이냐?

바로, 아두이노에서 자체적으로 미리 설정해 둔 상수이며, 상수 LED_BUILTIN 은 온보드 LED가 연결된 핀 번호입니다.

다시 말해 "온보드 LED가 연결된 핀을 출력으로 동작하도록 설정하라"가 되겠습니다.

 

<loop 부분>

  digitalWrite(LED_BUILTIN, HIGH);   
  delay(1000);                      
  digitalWrite(LED_BUILTIN, LOW);   
  delay(1000);                      

이라고 되어있습니다.

digitalWrite(핀 번호, HIGH or LOW); 는 HIGH 또는 LOW 값을 디지털 핀에 출력

( 여기서 HIGH는 LED 불을 켜고, LOW는 LED불을 끈다)

delay(숫자); 는 숫자 ms 동안 정지했다가 다음으로 넘기는 것을 의미합니다.

( 1000ms = 1초를 의미한다 )

다시 말해 loop부분은

LED가 연결된 핀에 HIGH 값을 주어 LED를 켜고, 1초를 기다린 뒤 LED가 연결된 핀에 LOW값을 주어 LED를 끄고, 1초를 기다린 뒤 다시 루프를 실행하라가 됩니다.

다음은 이 코드를 실행할 NodeMCU를 조립하겠습니다.

LED 짧은다리를 GND와 긴다리를 D0과 연결

그림과 같이 NodeMCU, 빵판, 저항(220Ω), LED 전구를 조립합니다.

그런 다음 NodeMCU를 연결하고 컴파일 후 NodeMCU에 업로드합니다.

그러면 이렇게 LED 전구에 불이 들어오는 것을 확인할 수 있습니다.

 

[ NodeMCU - 푸시버튼 연결 ]

이번 예제에서는 NodeMCU와 푸시버튼을 연결하고, 푸시버튼이 평소에는 어떤 값을 보내는지, 그리고 버튼을 누르면 어떠한 값을 보드에 보내는지에 대해 알아보겠습니다.

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(d3, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
    int button1State = digitalRead(d3);    
    Serial.print(button1State);
    delay(100);
}

자, 이 코드에서는 기존에서 보지 못한 Serial이 나왔습니다.

이 Serial은 간략하게 설명드리자면

아두이노 IDE에서 요 빨간 부분을 누르면 시리얼 모니터가 나오게 됩니다.

시리얼 모니터는 아두이노와 컴퓨터 간에 메시지를 주고받는 장치입니다. 다시 말해 버튼을 눌렀을 때, 안 누르고 있을 때 어떤 값이 들어오는지 확인시켜주는 장치인 것이죠.

<setup 부분>

  Serial.begin(115200); 
  pinMode(d3, INPUT);

Serial.begin(속도)는 아두이노가 시리얼 통신을 사용하도록 하는 함수입니다.

Serial.begin(115200)으로 보드 속도를 115200 설정했기 때문에 시리얼 모니터에서도 보드 레이트를 115200으로 맞춰 줘야 제대로 통신할 수 있습니다.

pinMode(d3, INPUT) : d3핀에 INPUT으로 설정하라.

 

<loop 부분>

    int button1State = digitalRead(d3);     
    Serial.print(button1State); 
    delay(100);

digitalRead(핀번호); 는 지정한 디지털 핀에서 값(HIGH 또는 LOW)을 읽습니다.

Serial.print( 내용 ) 은 시리얼 모니터에 내용을 출력하겠다입니다.

따라서,

int button1State = digitalRead(d3); 는 결국 button1State라는 int형 변수에 맞춰서 d3에서 읽어온 값을 int형으로 변환해서 집어넣어라~ 가 되는 것이고,

Serial.print(button1State); 는 button1State 내용을 시리얼 모니터에 출력하라,

마지막으로 delay(100)으로 0.1초 딜레이 시키면 다시 loop문 처음으로 돌아가서 반복해라가 됩니다.

 

아래 그림은 푸시버튼, NodeMCU조립도입니다.

푸시 버튼 한쪽을 d3, 다른 한쪽을 GND와 연결

마찬가지로 NodeMCU에 업로드시키고 시리얼 모니터를 작동시키면

이런 식으로 출력이 나오게 됩니다.

1은 푸시버튼을 안 누르고 있을 때, 0은 푸시버튼을 눌렀을 때입니다.

결과가 이렇게 나온다고 무조건 HIGH는 0 LOW는 1이 아니라, setup의 pinmode가 input이냐 output이냐에 따라 HIGH는 1이 될 수도, LOW가 0이 될 수도 있습니다.

응용 예제로 버튼을 누르면 LED 전구에 불이 들어오는 것이 있습니다. 그것은 한번 직접 해보시길 바랍니다.

*정답은 ' 파일 - 예제 - 02. Digital - button '을 보면 됩니다.

이번 글에서는 NodeMCU와 LED, 버튼을 연결해보는 예제를 알아봤는데요.

다음 글에서는 NodeMCU를 사용하는 가장 큰 이유인 NodeMCU와 WiFi 네트워크를 연결해보겠습니다.

 

 

사업자 정보 표시
메이크잇나우 | 김건욱 | (우 : 13487) 경기도 성남시 분당구 대왕판교로645번길 12 (경기창조경제혁신센터) 9층 | 사업자 등록번호 : 646-35-00394 | TEL : 070-8887-0703 | Mail : kgu0724@makeitnow.kr | 통신판매신고번호 : 2018-성남분당-0517호 | 사이버몰의 이용약관 바로가기