아두이노로 ESP8266 시작해보기

NodeMCU LED

NodeMCU 에는 2개의 LED 가 기본 장착되어 있습니다. ESP-12 에는 보통 파란 LED 가 GPIO2(D4) 에 연결되어 전원이 켜질때나 롬 플래시(TX) 할때 작동 상태를 볼 수 있습니다. NodeMCU 에는 보통 빨간 LED 가 내장되어 있어 GPIO16(D0) 로 별도 회로 구성 없이 작동 가능합니다.

esp8266_2_leds.png

NodeMCU 버튼

리셋(RST) 버튼은 nRST 포트에 연결되어 있어 눌렀을 때 NodeMCU 보드를 하드웨어 초기화할 수 있습니다. 플래시(FLASH) 버튼은 GPIO0 에 연결되어 있어 플래시 용도로 쓸 수 있는데, FLASH 버튼을 누른 상태에서 전원을 연결하거나 리셋 버튼을 누르면 보드의 부트로더가 다운로드 상태로 들어가 새 롬을 올릴 수 있게 됩니다. 하지만 esptool 이나 아두이노 툴은 자동으로 보드를 리셋하고 다운로드 모드로 변경해 롬을 업로드하기 때문에 플래시 버튼은 크게 사용할 일이 없습니다. 아래 버튼 예제처럼 간단한 사용자 입력이 필요할때 GPIO0 을 입력 모드로 설정하여 입력 버튼으로 사용할 수 있습니다.

아두이노 (Arduino) IDE 에 NodeMCU 보드 설정

  1. https://www.arduino.cc/en/Main/Software 에서 OS 에 맞는 아두이노 IDE 를 다운받아 설치합니다.
  2. Preferences 에서 Additional Board Manager URLshttp://arduino.esp8266.com/stable/package_esp8266com_index.json 를 입력합니다.
  3. Tools > Board > Board Manager... 에서 eps8266 보드를 설치합니다.
  4. Tools > Board 에서 NodeMCU 1.0 보드를 선택합니다.
  5. Port 에서 NodeMCU 보드에 연결된 시리얼 포트를 선택합니다.
  6. 속도는 115200 이 기본 설정인데, 빠른 속도를 선택하면 업로드가 금방 끝나지만 오류가 발생할 확률도 높아집니다. 케이블이나 포트 상태에 따라 230400 나 460800 를 사용할 수도 있습니다.

빨간 LED 점멸

아두이노에서 File > Examples > 01.Basics 로 가서 Blink 예제를 선택합니다. 위의 오른 화살표 모양의 업로드 버튼을 누르면 스케치가 컴파일 후 보드에 업로드된 후 실행됩니다. 코드에 대한 설명은 아래 주석을 참고하시면 됩니다.

// setup 함수는 보드가 켜지거나 리셋될때 한번만 실행됩니다.
void setup() {
  // LED_BUILTIN 은 보드에 내장되어 있는 LED 의 핀번호이며, NodeMCU 경우는 GPIO 16 으로 설정되어 있습니다.
  pinMode(LED_BUILTIN, OUTPUT);
}

// loop 함수는 보드가 작동되면 계속 반복해서 실행됩니다.
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // LED 를 켭니다. (HIGH 는 전압을 의미합니다.)
  delay(1000);                       // 1초동안 대기합니다.
  digitalWrite(LED_BUILTIN, LOW);    // 전압을 LOW 로 설정하여 LED 를 끕니다.
  delay(1000);                       // 1초동안 대기합니다.
}

파란 LED 점멸

다음 코드를 위 Blink 예제 코드의 처음에 추가하여 핀 번호를 2로 바꾼 후 스케치를 업로드하면 파란 LED 가 점멸됩니다.

#define LED_BUILTIN 2

버튼으로 LED 켜기

아두이노에서 File > Examples > 01.Basics 로 들어가 Button 예제를 실행합니다. 버튼과 LED 의 핀번호를 다음과 같이 0, 16 으로 변경하고 보드에 업로드하면 플래시(FLASH) 버튼을 누르는 동안 빨간 LED 가 켜집니다.

const int buttonPin = 0;     // GPIO 0 의 FLASH 버튼을 사용합니다.
const int ledPin =  16;      // NodeMCU 의 빨간 LED 를 사용합니다.

코드를 응용할 때 주의할 점

GPIO0 은 HIGH 일때 일반 실행이고 LOW 일때 플래시 모드로 동작하므로, 평소에는 3.3v 로 풀업 되어있고, 플래시 버튼을 누를 때만 접지와 연결되어 LOW 가 됩니다. 따라서 GPIO0 의 내장 버튼은 풀업 상태가 되어 평상시
HIGH(1), 누를때 LOW(0) 이 됩니다. 그러면 어떻게 button 예제 코드에서 버튼 누를때 LED 가 켜질까요? 내장된 두 LED 는 3.3v 쪽에 연결되어 있어 GPIO2, GPIO16 를 LOW(0) 로 할때 켜집니다. 위 예제에서는 깜빡깜빡만 확인하기 때문에 보이지 않지만, 시리얼로 디버그 메시지를 내보내면
LOW(0) 에서 켜지고 HIGH(1) 에서 꺼지는 것을 확인 가능합니다.

사실 NodeMCU나 ESP-12 에서 GPIO0, GPIO16, GPIO2 는 보드 안정성상 사용하지 않는 것이 좋으니, 테스트 용도 말고 실제로는 LED 나 버튼은 별도로 구성해야 합니다.

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다