?>

Hard Copy World

HCW

ESP8266, ESP32

Home > Learning >

ESP8266, ESP32

ESP8266 활용 가이드 - ESP8266 SDK 로 펌웨어 만들기

페이지 정보

작성자 최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일16-01-13 12:46 조회6,582회 댓글4건

본문

 

ESP8266 활용 가이드 목차

 

 

ESP8266 개발사인 ESPRESSIF 에서는 ESP8266 SDK를 오픈소스로 배포하고 있습니다. 여기에는 펌웨어를 만들고 올리기 위한 툴, 컴파일러가 포함되어 있으며 펌웨어를 만들기 위한 소스코드도 담겨 있습니다. 소스코드에는 WiFi 통신 제어를 위한 코드들이 담겨있기 때문에 다른 프로젝트, 펌웨어 개발의 기본이 됩니다.

ESP8266 SDK를 활용하기 위해서는 ESP8266 모듈과 FTDI 모듈이 기본으로 필요합니다. 제 경우에는 ESP-201 모듈에 기반한 ESP8266 Development Kit 보드가 있어서 이걸 대신 사용했습니다. 어떤 ESP8266 모듈을 사용하더라도 유사하게 진행할 수 있습니다.

esp8266-development-board(ESP8266 Development Kit)

 

 

펌웨어 업데이트 모드 (Flashing mode)

 

ESP8266 모듈은 3개의 GPIO 핀의 상태에 따라 동작 모드가 결정됩니다. 아래 표는 GPIO0, GPIO2(CH_PD, CHIP), GPIO15(MTDO) 핀의 상태에 따른 모드 설정입니다.

  • Value[15-0-2] ==> Decimal Value Meaning
  • 000 ==> 0 Remapping … details unknown.
  • 001 ==> 1 Boot from the data received from UART0. Also includes flashing the flash memory for subsequent normal starts.
  • 010 ==> 2 Jump start
  • 011 ==> 3 Boot from flash memory
  • 100 ==> 4 SDIO low speed V2
  • 101 ==> 5 SDIO high speed V1
  • 110 ==> 6 SDIO low speed V1
  • 111 ==> 7 SDIO high speed V2

여기서 실질적으로 쓰이는 모드는 [001], [011] 입니다.

  • [001] 모드는 UART 통신으로 flash 메모리에 프로그램을 올리는데 사용 (펌웨어 업데이트)
  • [011] 모드는 일반적인 동작 모드로 flash 메모리로부터 boot 됨.

 

따라서 ESP8266 SDK 를 이용해서 펌웨어를 만들고, 모듈에 업데이트하기 위해서는 아래와 같이 Flashing 모드로 만들어 줘야 합니다.

flashing 모드 (펌웨어 업데이트)

  • GPIO0(IO0) : GND로 연결
  • GPIO15(IO15) : GND로 연결
  • CH_PD(CHIP) : 3.3V (HIGH)로 연결
  • ==> ESP8266 Development Kit을 사용하는 경우 우측 7,8번(K1, K2) 스위치를 on 하면 됨

일반 동작 모드

  • GPIO0(IO0) : 3.3V로 연결 (+10k 저항)
  • GPIO15(IO15) : GND로 연결
  • CH_PD(CHIP) : 3.3V (HIGH)로 연결
  • ==> ESP8266 Development Kit을 사용하는 경우 우측 7번(K1) 스위치를 on

 

 

ESP-01 모듈의 경우는 Flashing 모드로 들어가기 위해 아래와 같이 연결하면 됩니다.

esp8266-reflash-firmware

 

 

 

Eclipse, ESP8266 SDK 를 이용한 개발환경 설정 (Windows 환경)

 

준비물

  • ESP8266 모듈
  • FTDI 모듈
  • 테스트용 LED-저항
  • 기타 잡다한 회로 부품들

연결방법

  • 앞 챕터에서 설명한대로 Flashing 모드로 연결

참고사이트

 

주의!!! 각종 프로그램을 설치할 때, 설치 경로에 2바이트 문자나 공백이 들어가지 않도록 할 것. 오류가 발생할 수 있습니다.

 

1. Windows 용 Unofficial Development Kit for Espressif ESP8266 (147Mb) 다운로드 및 인스톨. 아래 도구들이 포함되어 있음.

  • Unofficial GCC compiler for SoC Xtensa LX106.
  • Official Espressif ESP8266 SDK v1.5.0
  • Documentation for SoC ESP8266.
  • Examples in the firmware source code in C language.
  • Additional tools for working with boards based on the ESP8266.

설치할 때 Component 선택 화면에서 full installation(전체설치) 선택할 것.

 

2. Java Runtime x86 (jre-7uXX-windows-i586.exe) 다운로드 및 설치

  • 자바 런타임 설치 방법은 인터넷 검색하면 쉽게 찾을 수 있음. 설치 후 path 환경설정까지 할 것.
  • 32비트, 64비트 버전을 OS에 맞게 선택할 것

 

3. Eclipse Mars (혹은 기타 버전) 설치.

  • C++ 통합개발환경(IDE)으로 Eclipse 사용
  • C/C++ 지원하는 파일을 받아 설치할 것 (eclipse-cpp-mars-R-win32.zip)

4. MinGW 다운로드 및 설치. (Windows용 GNU SW tool 모음)

5. MinGW 추가 모듈을 설치(84Mb). 아래 링크에서 파일을 받아 스크립트(install-mingw-package.bat) 실행.

6. install-mingw-package.bat 스크립트가 이상없이 실행되어야 함.

 

7. 이클립스 실행

8. 프로젝트 호출 및 빌드 

이클립스 창에서 [File -> Import -> General -> Existing Project into Workspace]를 선택하면 프로젝트를 불러올 수 있음.

  • 앞서 설치한 ESP8266 SDK 폴더 안에 예제파일들이 있음.
  • C:\Espressif\examples 폴더에 있는 blinky 예제를 불러옴.
  • blinky 프로젝트 - 마우스 오른키 - Build project 로 빌드
  • 이상없이 컴파일이 완료되면 firmware 폴더에 바이너리가 생성될 것임
  • Makefile을 클릭해서 오픈한 뒤 아래 코드를 찾아 값을 자신의 환경에 맞게 바꿔줌. 특히 COM 포트가 정확히 맞아야 함.

 

ESPPORT ?= COM5
# Baud rate for programmer
BAUD ?= 115200

 

9. 펌웨어 업로드

[Windows - Show View - Make Target] 항목을 선택, Make Target 윈도가 표시될 것임.

  • 여기서 방금 우리가 오픈해서 빌드한 blinky 프로젝트를 선택해서 펼침
  • 동그라미 아이콘과 함께 all, clean, flash, flashinit, flashonefile 빌드 옵션들이 표시됨
  • 각 빌드 옵션을 더블클릭하면 해당 빌드 옵션을 실행함.
  • 여기서 all 을 선택해서 빌드하고, flash를 선택하면 빌드한 바이너리를 앞서 수정한 COM 포트로 업로드 해줌
  • 당연히 ESP8266은 flashing 모드 상태로 연결되어 있어야 함.
  • (baudrate, 통신 속도는 어떻게 선택하든 별 문제 없는 듯, 필자는 115200으로 사용중)

13_eclipse_open_projects_esp8266_flash

 

10. 새로운 프로젝트를 생성할 때는 아래 순서로

  • File > New > C Project 메뉴로 새 프로젝트 생성
  • Makefile project 선택
  • [프로젝트 우클릭 - C/C++ General - Paths and Symbols] 선택 후
  • ESP8266 include 폴더를 프로젝트에 Add (C:\Espressif\ESP8266_SDK\include)
  • 프로젝트에 user 폴더와 include 폴더를 생성해 줌
  • include 폴더에 user_config.h 파일을 생성해서 넣어줌
  • user 폴더에 user_main.c 파일을 생성해서 넣어줌
  • Makefile 생성 (C:\Espressif\example 폴더에서 복사해서 사용할 것)
  • Makefile에서 아래 코드 수정 자신의 환경에 맞게 수정

 

ESPPORT ?= COM5
# Baud rate for programmer
BAUD ?= 115200
  • [Windows - Show View - Make Target] 항목을 선택, Make target에 생성한 프로젝트 추가
  • ==> 이렇게 수동으로 프로젝트 생성 후 (경우에 따라) 몇 가지 추가 작업을 해야 빌드가 성공함.
  • 이 과정이 복잡하고 잘 안되기도 하기 때문에
  • ==> 간편하게 C:\Espressif\example 폴더에서 예제를 복사해서 사용 권장

 

 

 

펌웨어 업로드

 

펌웨어가 생성되면 윈도우 커맨드 창을 연 뒤 프로젝트 폴더로 이동해서 esptool 로 업로드 가능. 아래 명령어 이용

  • c:/Espressif/utils/esptool.exe -p COM5 -b 115200 write_flash -ff 40m -fm qio -fs 4m 0x00000 firmware/0x00000.bin 0x40000 firmware/0x40000.bin

NodeMCU devKit 보드의 경우 아래 명령어로 바이너리 업로드 가능

  • esptool -cp COM15 -cd nodemcu -cb 115200 -ca 0x00000 -cf myApp_0x00000.bin

커맨드 방식으로 업로드 하는 것은 불편하므로 NodeMCU flasher 툴을 권장함

 

Win32 또는 Win64용 exe 파일 실행 후 Config에서 바이너리 선택, Advanced/Operation 탭에서 설정 맞춘 후 업로드

Programming_LUA_firmware_config_1-1

step_4_flash_nodemcu

 

 

디버깅

 

ESP8266 SDK 에서는 디버깅을 위해 os_printf() 함수를 제공. 이 함수를 이용해 메시지를 프린트 하면 UART1 TX (GPIO2) 핀을 통해 메시지가 출력됨. 따라서 별도의 FTDI 모듈을 연결해서 PC에서 디버깅 메시지를 볼 수 있음. 즉, 2개의 FTDI 모듈을 통해 하나는 flash 업로드용으로 하나는 디버깅용으로 사용하길 권장.

 

 

 

참고자료

ESP-201

esptool

Eclipse 다운로드

MinGW

 

[이 게시물은 최고관리자님에 의해 2016-01-24 15:13:22 Communication module에서 복사 됨]

추천 0
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

Makefile 에서 SPI_SIZE_MAP 을 2로 설정하면 flash 8MB로 설정되나보네요. 좋은 정보 감사합니다.
=======================================================
# SPI_SIZE_MAP
# 0 : 512 KB (256 KB + 256 KB)
# 1 : 256 KB
# 2 : 1024 KB (512 KB + 512 KB)
# 3 : 2048 KB (512 KB + 512 KB)
# 4 : 4096 KB (512 KB + 512 KB)
# 5 : 2048 KB (1024 KB + 1024 KB)
# 6 : 4096 KB (1024 KB + 1024 KB)
SPI_SIZE_MAP ?= 2
=======================================================
근데 ESP-12 모듈은 플래시 사이즈가 4MB인데 이때는 어떤 옵션을 사용해야 할까요? 2번 옵션으로 가능할까요?

김건수님의 댓글

김건수 이름으로 검색 댓글의 댓글 작성일

2번을 선택하면 8메가비트라서 바이트로는 1메가바이트가 됩니다.(대충보면 좀 헷갈리죠 ^^ 저도 ESP-07 쉴드를 뜯어서 부품명으로 확인했습니다.)
ESP-12는 플래쉬가 32메가비트(4메가바이트)라서 4번이나 6번을 선택하면 됩니다.
플래쉬사이즈에 따라서 FOTA펌웨어가 조금 다른건지(아직 확인은 못했음)  아니면 다른 이유가 있는건지 플래쉬를 다른 크기로 나눠서 쓰는 이유는 좀 더 확인이 필요한 것 같습니다.
보기 편하게 단위를 한글로 적었습니다.