앞에서 아두이노 IDE 를 사용한 ESP8266 개발은 코드 하나 고칠때마다 컴파일, 펌웨어 업로드, 디바이스 재부팅 및 실행 과정을 거쳐야 합니다. 물론 IDE 에서 많은 부분을 대신해주기는 하지만, 빠른 개발과 테스트가 반복되어야 하는 IoT 의 생산성 측면에서 보자면 큰 단점입니다. 웹 개발에서 Ruby, Python, Node.js 등 인터프리터 언어 및 프레임웍이 도입되어 생산성을 높인 것처럼, ESP8266 개발에서도 MicroPython 을 사용하면 쉽고 간단하게 ESP8266 을 활용해볼 수 있습니다.

본 연재글에서는 ESP8266 개발보드인 NodeMCU V2 와 MicroPython 을 사용하여 다음 주제를 다룹니다.

  1. MicroPython 을 ESP8266 에 설치
  2. MicroPython 테스트와 네트워크 및 WebRepl 설정
  3. 기본 GPIO 제어 및 온도 센서 인식
  4. ESP8266 을 Watson IoT 에 연동하여 NodeMCU 로 제어

MicroPython 설치

MicroPython 펌웨어 다운받기

MicroPython 은 오픈소스로 공개되어 있어 원하는대로 직접 빌드할 수 있습니다. 일단 튜토리얼을 위해서 다음 링크에 미리 빌드되어 있는 펌웨어를 다운받아도 됩니다.

  • http://micropython.org/download#esp8266 링크에서 가장 위의 펌웨어를 다운받습니다. 2017년 말 기준으로 http://micropython.org/resources/firmware/esp8266-20171101-v1.9.3.bin 펌웨어가 가장 최신의 안정 펌웨어 입니다.
  • 최신 기능을 사용하고 싶으면 매일 빌드되는 날짜별 빌드를 사용할 수 있습니다.
  • 플래시 메모리가 512KB 인 모듈을 위한 512k 펌웨어도 있습니다.
  • 시리얼 연결을 하지 않아도 네트워크로 펌웨어를 업데이트 가능한 OTA 펌웨어도 제공됩니다. 아직 개발단계라 안정적이지는 않습니다.

esptool 설치

esptool 은 ESP8266 부트로더와 통신해서 펌웨어를 관리할 수 있는 유틸리티입니다. Python 으로 짜여 있으며 Python 2.7이상, Python 3.4 에서 사용 가능합니다.

  1. MicroPython 을 위해 Python 이 별도로 필요하지는 않지만, esptool 을 사용하려면 Python 이 필요합니다.

    1. Windows 에서 Python 이 설치되어 있지 않은 경우엔 https://www.python.org/downloads/ 에서 취향에 따른 Python 을 설치합니다. 잘
      모르겠으면 Python 3.x 최신 버전을 추천합니다. 설치시 Add Python x.x to PATH 옵션을 체크하는 것이 좋습니다.

      python364_32bit.png

    2. MacOSX 이나 Linux 경우 Python 이 이미 설치되어 있어 사용하면 됩니다.

  2. Python 패키지 관리자인 pip 를 설치해야 합니다.

    1. Windows 경우 위의 설치 과정에서 pip 가 같이 설치됩니다.
    2. 맥 OS X 경우 sudo easy_install pip 명령어로 설치하면 됩니다.
    3. Linix 는 다음 링크를 참조합니다.
  3. cmd 프롬프트나 터미널에서 다음 명령어로 esptool 을 설치합니다.

    • pip install esptool
    • 권한 문제로 설치되지 않는다면 sudo pip install esptool 를 사용합니다.
  4. python -m esptool 명령어로 esptool 이 설치되었는지 확인합니다.

    esptool.png

NodeMCU 시리얼 연결

NodeMCU V2 는 CP2102 칩셋, V3 는 CH340 칩셋 으로 시리얼-USB 연결이 구현되어 있습니다. 드라이버 설치 과정과 실제 보드 크기 외에 크게 차이나지는 않으나, 본 글에서는 NodeMCU V2 기준으로 설명합니다.

  1. 다음 링크에서 적절한 드라이버를 다운받고 설치합니다. Linux 는 드라이버를 별도로 설치할 필요가 없습니다.

  2. NodeMCU 를 랩탑과 연결하고 인식되었는지 확인합니다.

    1. Windows 는 장치 관리자에서 시리얼 포트를 확인합니다. 아래 예제에서는 COM3 로 인식되었고, 이 포트 번호를 기억해야 합니다.

      cp2102_windows.png

    2. 맥 OS X 에서는 /dev/cu.SLAB_USBtoUART 디바이스가 생성되었는지 확인하면 됩니다.

      cp2102_mac.png

    3. Linux 에서는 /dev/ttyUSB0 디바이스가 생성되었는지 확인하면 됩니다.

      cp2102_linux.png

  3. python -m esptool --port <장치이름> flash_id 명령어로 가능한 flash 크기와 자치 번호를 확인합니다.

    1. Windows: python -m esptool --port COM3 flash_id (장치 관리자에서 보이는 COM 포트 번호를 입력해야 합니다.)

      flash_id_win.png

    2. 맥 OS X: python -m esptool --port /dev/cu.SLAB_USBtoUART flash_id

      flash_id_mac.png

    3. Linux: python -m esptool --port /dev/ttyUSB0 flash_id

      flash_id_linux.png

  • 혹시 시리얼 연결이 잘 진행되지 않을 때는 USB 케이블을 바꿔보는 것도 좋습니다.

MicroPython 펌웨어 설치

다운받았던 펌웨어를 esptool 을 이용하여 NodeMCU 에 기록합니다. Windows 나 Linux 에서도 시리얼 USB 장치 이름만 변경하면 되므로, 공통 부분은 맥 OS X 기준으로 설명합니다.

  1. 다음 명령어로 기존 메모리를 삭제합니다.

    • python -m esptool --port /dev/cu.SLAB_USBtoUART erase_flash
    • 개발 환경에 따라 장치이름은 변경해야 합니다.
  2. 다음 명령어로 다운받은 MicroPython 파일을 NodeMCU 에 업로드합니다.

    • python -m esptool --port /dev/cu.SLAB_USBtoUART --baud 230400 write_flash -fm dio 0 esp8266-20171101-v1.9.3.bin
    • 자주 기록한다면 --baud 230400--baud 460800 혹은 --baud 921600 으로 변경하면 더 빨리 기록이 가능하지만, 에러 가능성이 있습니다. 혹시 연결이 불안정한 상황이면 --baud 115200 으로 시리얼 속도를 더 낮출 수도 있습니다.

    write_flash.png

  3. NodeMCU 에 시리얼 콘솔로 접속해 본 후 Enter 키를 눌러 >>> 프롬프트가 표시되는지 확인합니다. 보드의 RST 버튼을 눌러 부팅 화면을 확인할 수도 있습니다.

    1. Windows 에서는 putty 를 사용하여 접속하는 것이 편리합니다.

      1. 다음 링크에서 putty 를 다운받아 설치합니다.

      2. putty 를 실행 후 Connection typeSerial 을 선택하고 Serial line 에는 장치 이름을, Speed 에는 115200 을 입력합니다.

        putty_config.png

      3. CategoryConnectionSerial 탭에서 Flow controlNone 으로 변경합니다.

        putty_serial.png

      4. Open 을 눌러 콘솔을 엽니다.

        putty_nodemcu.png

    2. 맥 OS X, Linux 는 다음 screen 명령어를 사용하면 됩니다.

      • screen /dev/tty.SLAB_USBtoUART 115200
      • screen 이 설치되어 있지 않다면, sudo yum install screen 혹은 sudo apt install screen 등으로 설치 가능합니다.
      • screen 을 종료하려면 CTRL-A, K 키를 차례로 입력 후, Really kill this window [y/n] 라고 물어볼 때 y 를 입력하면 됩니다.
      • 맥 OS X 는 screen 작동 중 RST 버튼을 누르면 화면은 표시되지만 키 입력이 되지 않을 수 있습니다. 이런 경우는 screen 을 종료하고 다시 실행하면 해결됩니다.
      • screen 이 동작하는 도중 USB 케이블을 분리하면 screen 이 종료됩니다. 맥 OS X 의 터미널은 이런 경우 키 입력이 제대로 표시되지 않으니, 터미널을 닫고 다시 열어야 합니다.
        boot_mac.png

토론 참가

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