WiFi로 제어하는 탁상시계 만들기 #1 NodeMCU 보드 소개

2019. 1. 7. 12:31

Project/Turtle Clock

NodeMCU 보드와 LED 세그먼트를 이용한 탁상시계 만들기

새로운 프로젝트를 시작합니다. 집에서 쓰던 탁상시계가 고장이 나서 직접 만들기로 했습니다. 케이스는 3D 프린팅을 이용해 만들고, NodeMCU(ESP8266) 보드와 LED 세그먼트, 그리고 로터리 엔코더와 RTC 보드 등을 이용하였습니다. 단순한 탁상시계이기 때문에 기능은 간결하고 손쉬운 제작을 위해 별도의 회로 구성이나 복잡한 인터페이스는 적용하지 않았습니다. 그래서 WIFI를 이용해 제어할 부분이 꼭 필요하진 않지만 보드에 이미 있는 기능이기에 적용하였습니다. 우선 사용할 보드를 소개하면서 연재를 시작하겠습니다.

NodeMCU 그리고 Development Kit

위 사진 속 제품이 이번에 사용할 보드(Board)입니다. NodeMCU는 아두이노와 비슷한 오픈소스 펌웨어의 일종이고 Development Kit은 NodeMCU를 내장하고 이를 이용한 개발을 돕기 위해 만든 개발 보드인데, 보통 NodeMCU라 하면 이 개발 보드를 의미하는 경우가 더 많습니다. NodeMCU와 Development Kit에 관한 자세한 설명은 아래 링크를 참고하세요.

NodeMCU 개발보드는 ESP8266 보드에 USB 업로더 및 GPIO 등을 통합하고 여기에 NodeMCU 펌웨어를 올린 것입니다. 따라서 펌웨어를 제외하면 그냥 ESP8266 보드라고 보면 됩니다. 게다가 다른 ESP8266 보드와 마찬가지로 아두이노(Arduino) 개발 환경(IDE)을 통해 아두이노 소스(Source)를 올려서 사용할 수 있습니다. 이 프로젝트에서도 이처럼 익숙한 아두이노 방식을 사용하겠습니다.

아두이노 프로젝트를 위한 무선 인터넷 접속(WiFi)이 가능한 개발 보드들 중 ESP8266은 가격이 저렴하고 관련 정보도 풍성해서 접근성이 아주 좋습니다. 중국산 호환 보드를 인터넷에서 2 ~ 3$ 정도면 구입할 수 있는데, 이 보다 더 저렴한 버전은 별도의 업로더가 필요하고 GPIO도 2개 정도 밖에 없으며 전원 공급도 번거롭기 때문에 사용하기 좀 까다롭습니다.

이번에 사용한 제품은 알리에서 구입하였는데 위와 같이 깔끔하게 밀봉 포장되어 왔습니다. 내용물은 보드와 스폰지가 전부입니다.

GPIO 등을 위한 핀 헤더는 이미 납땜되어 있고 볼트를 이용해 고정할 수 있는 구멍이 모서리마다 있습니다.

아두이노 환경에서 ESP8266 개발하기

아두이노 개발 환경(IDE)이 이미 설치된 상태에서 ESP8266 보드를 사용하기 위해 아래와 같은 과정이 필요합니다.

  • 보드 매니저 설치를 위한 링크 추가하기
  • 보드 매니저 설치
  • USB 업로더를 위한 드라이버 설치
  • 사용할 보드 선택

과정은 아주 간단합니다. 아두이노를 이용하여 ESP8266 보드를 개발하는 자세한 방법은 아래 링크를 참고하시기 바랍니다.

1. 보드 매니저 링크 추가하기

아두이노 레퍼런스 보드나 그 호환 보드가 아닌 서드파티 제품들을 아두이노 개발 환경에서 사용하기 위해서는 추가적인 보드 매니저를 설치해야 합니다. 이를 위해서 먼저 제조사에서 제공하는 보드 매니저의 링크를 추가해 줍니다.

아두이노를 실행하고 환경설정(Preferences) 대화상자를 엽니다. 바로가기 키(Ctrl + comma)를 이용하거나 파일(File) 메뉴에서 선택하면 됩니다.

다른 이동 없이 Preferences 대화상자의 첫 번째 탭 “Settings”의 아래쪽에 보면 “Additional Boards Manager URLs”라는 곳이 있습니다. 이곳에 아래 링크를 복사해서 넣어 주면 됩니다. 여러 개의 링크를 넣어야 할 경우에는 콤마(,)로 구분해 줍니다.

http://arduino.esp8266.com/stable/package_esp8266com_index.json
2. esp8266 플랫폼 설치하기

위에서 추가한 링크는 설치할 파일의 위치만 알려주는 것이고, 실제로 관련 플랫폼을 설치하는 과정이 필요합니다. 위 그림처럼 아두이노의 “Tools” 메뉴에서 “Boards Manager...”를 선택합니다.

보드 매니저 대화상자입니다. 사용할 보드에 맞는 플랫폼을 찾아서 설치할 수 있습니다. 첫 번째 항목처럼 이미 설치된 플랫폼은 이름 옆에 “INSTALLED”라고 표시됩니다. 업데이트가 필요할 경우 아두이노가 실행될 때마다 자동으로 체크해서 알려줍니다.

검색창에 “esp8266”을 입력하여 원하는 플랫폼을 찾았습니다. “Install” 버튼을 클릭하여 설치해 줍니다.

3. USB 업로더 드라이버 설치하기

이 부분은 ESP8266과는 직접적인 관련이 없지만, 제가 사용하는 보드는 CP2102 칩을 통해 컴퓨터와 통신합니다. 컴퓨터에 이 칩에 대한 드라이버가 없다면 미리 설치해줘야 합니다.

아두이노와 컴퓨터는 직렬 통신(UART)을 이용해 프로그램을 업로드하고 또 데이터를 송수신합니다. 하지만, 요즘 컴퓨터는 시리얼(직렬, Serial) 통신을 위한 Com Port가 거의 없습니다. 그래서 이용하는 방식이 USB 포트와 케이블을 이용해 연결한 후 컴퓨터의 USB 포트를 가상의 시리얼 포트(Virtual COM Port, VCP)로 만드는 것입니다. CP2102 칩은 USB to UART Bridge라고 하며 USB를 통해 시리얼 통신이 가능하도록 합니다. 또 이 칩을 사용하기 위해서는 각 운영체제에 맞는 가상 직렬 포트(VCP) 소프트웨어를 설치해야 합니다. 설치 파일은 아래 링크를 따라가시면 됩니다.

4. 보드 선택하기

ESP8266을 위한 플랫폼이 설치되었기 때문에 “Tools”메뉴에서 해당 보드를 선택할 수 있습니다.

위 그림처럼 보드(Board)에 “NodeMCU 1.0”을 선택해 줍니다. 포트(Port)는 컴퓨터마다 다르므로 상황에 맞게 골라줍니다.

보드를 맞게 선택하면 나머지 값은 자동으로 세팅되므로 포트 번호 외에는 수정할 필요가 없습니다. 여기 까지 하면 이 보드를 이용하여 개발할 수 있습니다.

첫 번째 예제 : LED Blink

테스트를 위해 예제 하나 실행해 보겠습니다. 대부분의 경우 그렇듯이 보드의 내장 LED를 1초마다 깜박이는 예제를 진행하겠습니다. 아두이노 프로그램에 내장된 기본 예제이므로 따로 코딩할 필요는 없습니다.

위와 같이 Blink 예제를 불러온 후 바로 업로드합니다.

업로드를 완료한 후의 모습입니다. 업로드하는 시간이 약간 길게 느껴지네요. 위와 같이 진행률을 표시하며 업로드합니다.

업로드 하는 동안에 보드 위의 파란색 LED가 빠르게 깜박입니다.

보드에는 빨간색 LED도 하나 있는데 GPIO 16번에 연결되어 있으며 BLINK 예제를 통해 이 LED에 접근합니다. 업로드가 완료되면 사진처럼 빨간색 LED가 1초마다 깜박입니다.

보드의 USB 포트 양 옆에는 각각 FLASH, RESET라는 두 개의 푸시 버튼이 있습니다. RESET은 이름 그대로의 기능이고, FLASH는 프로그램 업로드와 관련이 있는데, 아두이노를 이용해 개발할 경우 따로 눌러줄 필요는 없습니다.

두 번째 예제 : 무선 인터넷 클라이언트 테스트

다음으로 역시 기본 예제를 이용하여 무선 인터넷 기능을 테스트하겠습니다. 미리 주어진 웹 주소로 접속하여 웹 페이지 정보를 가져와서 시리얼 모니터에 출력하는 프로그램입니다.

ESP8266 플랫폼을 설치하면 관련 예제까지 같이 설치됩니다. 위와 같이 “BasicHttpClient” 예제를 실행하겠습니다.

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("SSID", "PASSWORD");

실행에 앞서 프로그램 소스 34, 35행 정도에 위 소스가 있습니다. 35행을 꼭 자신의 무선랜 환경에 맞게 수정해 줍니다.

이 예제는 미리 지정된 웹 주소에 접속하여 받아온 웹 페이지 데이터를 시리얼 모니터에 출력합니다. 접속하는 웹 페이지는 위와 같습니다.

무선랜 접속 정보 외에 수정할 사항이 없으므로 바로 업로드하였고, 위 그림은 시리얼 모니터에 출력된 결과입니다. 보통 웹 브라우저에 표시되는 태그 정보가 그대로 출력되었습니다. 시리얼 모니터의 통신 속도 설정이 맞지 않으면 제대로 표시되지 않으므로 꼭 확인하시기 바랍니다.

세 번째 예제 : 인터넷 서버 테스트

세 번째 예제도 기본 예제이며 웹 페이지를 통해 내장된 LED를 켜고 끌 수 있도록 간단한 서버를 구현합니다. 이번 예제도 무선 랜 접속 정보 외에는 수정할 필요가 없습니다.

그림과 같이 “WIFIManualWebServer”를 불러 옵니다.

#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK  "your-password"
#endif

프로그램 12에서 15행에 위와 같은 코드가 있습니다. SSID와 패스워드를 수정합니다.

업로드 후에 프로그램이 실행되면서 시리얼 모니터에 위와 같이 출력됩니다. 서버가 시작되었으므로 해당 아이피로 접속하여 LED를 제어할 수 있습니다.

스마트 폰을 이용해 웹 서버에 접속하였습니다. GPIO 즉, LED가 연결된 16번 핀이 현재 “LOW” 값이며 켜고 끄기 위하여 각각 링크를 클릭하라고 표시하고 있는데, NodeMCU 보드의 빨간색 LED는 Pull-Up 되어 있습니다. 따라서 GPIO 16번이 “LOW” 일 때 LED가 켜지고 “HIGH”일 때 꺼집니다. 실제로 테스트 해보면 위 예제의 텍스트와는 반대로 동작함을 확인할 수 있습니다. 어쨌든 서버 기능 테스트는 제대로 수행하였습니다.

여기까지 이번 프로젝트에서 사용할 NodeMCU 보드에 대해 소개하였습니다. 연재 첫 번째 글은 여기서 마치고 매 연재마다 하나씩 추가하며 프로젝트를 완성하겠습니다. 다음 글에선 터틀 시계의 디스플레이 역할을 할 Adafruit 사의 LED 세그먼트에 대해 알아보겠습니다.


Comments