ESP8266 Node MCU는 ESP-12 모듈에 USB와 아두이노IDE환경 지원 등을 추가해서 아두이노의 한 종류처럼 개발된 모듈으로서 IOT(Internet Of Things)환경에서의 기본형 프로세서로 많이 사용된다. 즉, IOT환경을 위해서는 WIFI 통신기능이 필수인데 기존의 아두이노에 WIFI장치를 부착하는 것보다 NodeMCU 하나를 사용하는 것이 다음과 같은 장점이 있다.  

 

-아두이노+WIFI통신장치 보다 NodeMCU 하나를 사용하는 것이 가격도 저렴하고 부피도 적다.

-하나의 모듈안에서 WIFI가 기본 지원되므로 사용하기 간편하다.  

-NodeMCU내 내장된 프로세서(80MHz대)가 아두이노보다(16MHz대) 속도가 훨씬 빠르다.

-

 

그러나 다음과 같은 단점도 있다.

 

-입출력 핀 수가 적다. 아날로그 입력핀은 1개 밖에 없으며 디지털 입출력핀은 5~8개 밖에 사용할 수 없어 센서 등 여러 장치를 연결할 수 없다.(아두이노 나노의 경우 아날로그 6개, 디지털 14개)

-WIFI가 가동될 때 전력소비가 커서 배터리환경에서 오래 가동시킬 수 없다.( 절전Sleeping 모드를 사용할 수는 있음)

   

 

 

NodeMCU 입출력핀 LAYOUT

 

 

 

ESP12모듈을 기본으로 사용하므로 ESP12 모듈에서 사용하는 GPIO번호를 그대로 사용헤도 되고 보드에 적힌 A0, D0~D8 라는 명칭을 아두이노에서 처럼 사용해도 된다. 

 

배열된 핀수는 많으나 많은 핀들의 기능이 특정 목적으로 이미 예약 사용되기 있기 사용자가 임의로 활용할 수 있는 범용 입출력 핀은 몇개 안된다.

- GPIO 0,2,15 번은 부팅모드를 설정하기 위해 내정되어 있어 사용시에 주의를 요한다. 

- GPIO1,3 번은 시리얼 통신용이다.

- GPIO 6~11번은 플래시메모리용으로 이미 사용중이므로 사용할 수 없다.

- GPIO 16번 (D0) 은 Sleep mode에서 벗어나기 위한 Wake용으로 사용된다

 

따라서 사용자가 조건 없이 범용으로 사용할 수 있는 핀은 GPIO 4번(D2), GPIO 5번 (D1),  GPIO 12~14번 (D6,D7,D5) 다섯개 밖에 되지 않는다.     

    

내장LED는 GPIO 2번(D4) 에 연결되어 있다. ( 아두이노 나노는 디지털13번 )

 

 

사용방법

 

아두이노 IDE에서 ESP8266기능을 사용하려면 다음과 같이 ESP8266 보드메니저를 추가해 주어야 한다.  

 

1) Arduino IDE를 기동시키고 파일 -> 환경설정 메뉴를 선택한다. 

 

 

2)환경설정화면 [추가적인 보드 메니저URL] 항목에 다음과 같이 추가한다.


       http://arduino.esp8266.com/stable/package_esp8266com_index.json

 

 

3)아두이노 IDE메뉴에서 툴 -> 보드 -> 보드메니저 선택한다.

 

 

4)보드메니저에서 ESP8266을 선택하여 설치하고 아두이노 IDE를 종료하고 재가동 한다.

 

 

 

예제 프로그램 실행시켜 보기

 

ESP 8266 보드메니저가 설치되면  다음과 같이 예제 메뉴에 ESP8266 예제들이 추가되므로 여기에서 Blink를 선택해 본다. 

 

 

아두이노 IDE 메뉴에서 툴->보드-> NodeMCU 1.0 을 선택하고, 포트연결을 확인한 후 실행시켜 보면 보드의 내장LED가 깜박이는 것을 확인할 수 있다.  예제의 설명문에 적혀 있는 것처럼  LED_BUILTIN은 LOW일 때 LED가 켜지고 HIGH일 때 꺼지는 것 임에 주의한다.

 

 

 

SLEEP모드 사용하기 

 

ESP8266 모듈은 기본적으로 전력 소모량이 많기 때문에 사용하지 않을 때에는 거의 모든 기능이 정지되어 있는 상태(Sleep mode)에서 대기하고 있다가 어떤 조건이 만족되면 다시 깨어나 작동하는 기능이 지원된다. 이 sleep mode에서는 오로지 다시 깨어나기 위해 대기하는 기능만 작동되기 때문에 전력소모가 거의 없다.

 

1) 사전배선 : GPIO 16번 (D0) 핀을 RST(Reset) 핀을 연결한다.     

 

2) 수면모드 진입 : 다음과 같이 Sleep mode를 지정하면 지정한 시간 만큼 Sleep 모드후 자동으로 다시 시작된다.  

    

   const unsigned long stime = 60000000;  // 60초, 백반분의 1초 단위     

   ESP.deepsleep(stime);

 

3)수면모드 탈출 : 수면모드 진입시에 지정된 시간이 경과 되거나  RST핀에 LOW신호를 입력하면( GND에 연결되도록 스위치를 설치하여 누르기)  다시 깨어나게 된다.

 

다음 수면모드 샘플프로그램은  내장 LED를 5초간 켜고 나서 10초간 Sleep Mode에 진입했다가 다시 깨어나는 예제 프로그램이다. 여기에서 주의해야 할 점은 Sleep mode에서 깨어 나면 정지 되었던 다음부터 다시 시작하는 것이 아니고 프로그램이 완전히 재시작해서 setup 함수부터 다시 시작한다는 것이다.   

 

const unsigned long sTime = 10000000; // 10초  
  
void setup() {  
  Serial.begin(115200);  
  Serial.println("program start");  
  pinMode(LED_BUILTIN, OUTPUT);   
}  
   
void loop() {  
  digitalWrite(LED_BUILTIN, LOW);  
  delay(5000);  
  digitalWrite(LED_BUILTIN, HIGH);  
  ESP.deepSleep(sTime);  
}  

 

예를 들어 1시간 간격으로 온도 등 기상정보를 읽어 서버에 보내 주는 기능을 개발할 때 이러한 Sleep mode기능을 활용하면 실제 센싱 및 전송작업할 때에만 깨어나서 작업하고 59분 이상 대부분의 시간을 Sleep mode에서 대기하게 함으로써 배터리가동 시간을 획기적으로 늘릴 수 있다. 

       

구매좌표 : s.click.aliexpress.com/e/_AbtSSf

 

1.94US $ 19% OFF|Wireless module CH340/CP2102 NodeMcu V3 V2 Lua WIFI Internet of Things development board based ESP8266 ESP 12E

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

 

+ Recent posts