ESP8266 펌웨어를 만들 때 Eclipse 개발 환경 + ESP8266 SDK 조합을 사용하는 것이 기본입니다. 하지만 ESP8266 SDK 에서 제공하는 WiFi, GPIO 컨트롤 함수는 이미 관련 경험이 있는 분이 아니라면 눈에 익지도 않고 어렵습니다.

Sming은 이런 단점을 보완하고자 상대적으로 쉽고 익숙한 아두이노 스타일로 고효율 개발이 가능하도록 만들어진 ESP8266 용 프레임워크입니다. 쉽게 얘기하면, 기존 ESP8266 SDK 를 수정, 보완해서 아두이노 스타일 코딩이 가능하도록 해주며 유용한 WiFi 컨트롤 함수와 유틸리티 함수들을 제공해줍니다.

공식 페이지에서 소개하는 Sming의 특징은 아래와 같습니다.

  • 빠르고 사용자 친화적인 개발을 지원
  • 아두이노 스타일로 GPIO 컨트롤 가능
  • Native firmware를 만들기 때문에 고성능, 효율적 메모리 사용
  • 아두이노 라이브러리와 호환
  • 무선 펌웨어 업데이트 지원 (rBoot OTA firmware updating)
  • Built-in file system: spiffs
  • Built-in powerful network and wireless modules
  • Built-in JSON library: ArduinoJson
  • HTTP, AJAX, WebSockets 지원
  • MQTT 프로토콜 지원 (libemqtt 기반)
  • LWIP stack 기반 네트워킹
  • 단순하고 파워풀한 하드웨어 API wrapper
  • Espressif NONOS SDK 1.4.0 & 1.5.0 기반

아두이노 스타일의 코딩과 라이브러리 지원이 매력적일 뿐 아니라 네트워킹 관련 모듈들이 사용 가능해서 굉장히 유용합니다.

개발환경 설정 방법

공식 프로젝트 페이지에서 개발환경 설정 방법이 제공됩니다. 리눅스, MacOS 를 사용하시는 분은 아래 링크에서 상세 매뉴얼을 찾으실 수 있습니다.

여기서는 윈도우 7 – 64bit를 기준으로 설명합니다.

Chocolatey 를 이용해 설치를 합니다. [윈도우 – 보조 프로그램 – 명령 프롬프트(cmd.exe)] 에서 마우스 오른쪽 키를 누르고 [관리자 권한으로 실행] 합니다. 그리고 아래 명령어로 최신 Chocolatey를 설치합니다. Chocolatey는 apt-get 같은 패키지 매니저입니다.

  • @powershell -NoProfile -ExecutionPolicy unrestricted -Command “iex ((new-object net.webclient).DownloadString(‘https://chocolatey.org/install.ps1’))” && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

Package repository를 설정해줍니다.

  • choco sources add -name kireevco -source ‘https://www.myget.org/F/kireevco-chocolatey/’

Sming 을 설치합니다.

  • choco install sming -y -source ‘https://www.myget.org/F/kireevco-chocolatey/’

이 단계는 시간이 꽤나 오래 걸립니다. 느긋하게 기다리시고, 설치 패키지 중 에러가 난 것이 있는지 확인합니다. 만약 설치 중 에러가 있다면 아래 링크를 참고해서 수동 설치를 해야합니다. (고난의 길을 걸으셔야 합니다.)

이상의 과정이 제대로 진행되었다면 아래 프로그램들이 설치됩니다.

  • Java Runtime 8
  • Eclipse C/C++ (source)
  • Unofficial Espressif Development Kit for Windows (source)
  • Mingw & required packages (source)
  • Latest stable version of Sming (source)
  • Spiffy (source)

예제 최신 파일들을 설치합니다.

  • choco install sming.examples -y -source ‘https://www.myget.org/F/kireevco-chocolatey/’

예제 파일은 아래 경로에 설치됩니다.

  • C:\tools\sming.examples

ESP8266 SDK는 아래 경로에 설치됩니다.

  • C:\Espressif

Sming 프레임워크 파일들은 아래 경로에 설치됩니다.

  • C:\tools\sming\Sming

MinGW (윈도우용 GNU 컴파일 도구)는 아래 경로에 설치됩니다.

  • C:\tools\mingw64
  • 만약 MinGW를 별도로 설치한다면 [C:\MinGW] 에 설치됩니다.

이 단계까지 에러 메시지 없이 왔다면 개발환경 준비는 다 된 것입니다.

아래 단계를 추가로 실행해보면서 환경 설정을 마무리 합니다. 아래 단계는 앞선 과정에서 빠진 부분이 있나 확인하는 단계이므로 이미 설정되어 있을 수도 있습니다.

명령 프롬프트에서 아래 명령으로 디렉토리 링크를 생성합니다.

  • mklink /d c:\Espressif\sdk c:\Espressif\ESP8266_SDK

몇 가지 패스 설정을 해줘야 합니다. [내 컴퓨터 – 마우스 오른키 – 속성 – 고급 시스템 설정]을 누릅니다. 그리고 [시스템 속성 창 – 고급 탭 – 환경 변수]를 선택합니다. [시스템 변수 – Path] 를 열어서 아래 두 경로가 설정되어 있는지 확인하고 없다면 넣어줍니다. (GNU 컴파일 도구가 있는 폴더 설정)

  • C:\tools\mingw64\bin;
  • C:\tools\mingw64\msys\1.0\bin;

[시스템 변수]에 아래 항목이 있는지 확인하고 없으면 만들어줍니다. (ESP8266 프레임워크 소스코드 및 Sming 경로 설정, 마지막에 슬래시[/] 들어가지 않도록 주의!!)

  • 변수 : ESP_HOME, 값 : c:\Espressif
  • 변수 : SMING_HOME, 값 : C:\tools\sming\Sming

rBoot 동작을 위해서 esptool2 가 필요합니다. 아래 링크에서 exe 파일을 다운로드 받습니다.

이 파일을 아래 경로에 넣어줍니다. (폴더가 없으면 생성)

  • C:\Espressif\utils

바탕화면에 이클립스 아이콘이 보이실겁니다. 이클립스를 실행합니다. 그리고 아래 순서대로 Sming 프레임워크 소스코드를 불러와서 라이브러리를 빌드해줘야 합니다.

  • Eclipse 실행
  • [File -> Import -> General -> Existing Project into Workspace] 선택
  • [Select root directory] 라인에서
  • SmingFramework 프로젝트 폴더를 선택 (C:\tools\sming\Sming)
  • 프로젝트에서 마우스 오른쪽 키 – Build

이 빌드가 성공해야 Sming 라이브러리가 생성되고, 다른 예제 프로젝트를 빌드했을 때 에러가 발생하지 않습니다. 이제 가장 기본이 되는 Basic_Blink 예제를 불러와서 빌드 테스트를 해보면 됩니다.

  • [File -> Import -> General -> Existing Project into Workspace] 선택
  • [Select root directory] 라인에서
  • Basic_Blink 프로젝트 폴더를 선택 (C:\tools\sming.examples\samples\Basic_Blink)
  • 프로젝트에서 마우스 오른쪽 키 – Build

여기서 문제가 발생할 수도 있습니다. 이럴땐 Makefile-user.mk 파일을 열어 빌드 설정을 바꿔줘야 합니다. 아래처럼 주석을 해제해줍니다. 그리고 [COM_PORT] 항목은 자신의 ESP8266 모듈이 연결된 COM 포트로 적어줘야 합니다.

## Add your source directories here separated by space
MODULES = app
EXTRA_INCDIR = include

## COM port parameter is reqruied to flash firmware correctly.
## Windows: 
COM_PORT = COM3

## Com port speed
COM_SPEED	= 115200

## Configure flash parameters (for ESP12-E and other new boards):
SPI_MODE = dio

## SPIFFS options
DISABLE_SPIFFS = 1
# SPIFF_FILES = files

프로젝트 빌드가 성공하면 [프로젝트 폴더\out\firmware] 폴더안에 *.bin 파일들이 생깁니다. 이 파일을 ESP8266에 업로드하면 됩니다.

13_eclipse_open_projects_esp8266_flash

이클립스의 오른쪽 섹션에 보면 [Make Target] 탭이 있습니다. 여기서 [flash] 를 선택하면 업로드가 가능합니다. 앞서 Makefile-user.mk에서 COM 포트를 지정해줬으니 해당 COM 포트로 업로드 합니다.

주의!!! 빌드 중 아래처럼 에러가 발생하는 경우는 Espressif SDK를 재설치 해보세요. 최신 Espressif SDK 는 링크에서 받으실 수 있습니다

c:\tools\sming\sming\smingcore\platform\station.h:36:25: error: 'SC_TYPE_ESPTOUCH_AIRKISS' was not declared in this scope
SCT_EspTouch_AirKiss = SC_TYPE_ESPTOUCH_AIRKISS
make: *** [out/build/app/application.o] Error 1

주의!!! 아래처럼 빌드 에러가 발생하는 경우는 Sming framework 이 제대로 빌드되지 않아서 입니다. Sming framework 소스 (C:\tools\sming\Sming) 를 import 해서 빌드가 성공해야 Sming 라이브러리가 생성되어 빌드에러가 발생하지 않습니다.

c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.1.0/../../../../xtensa-lx106-elf/bin/ld.exe: cannot find -lsming
collect2.exe: error: ld returned 1 exit status
make: *** [out/build/app.out] Error 1

개발 환경이 갖추어지면 [C:\tools\sming.examples] 폴더에 있는 예제들을 불러와 테스트 해볼 수 있습니다. Sming framework에서 제공하는 예제들을 주제별로 모아 테스트 한 문서가 있으니 참고하세요.

참고자료