본 시리즈는 ESP8266 기반의 IoT 개발을 다룹니다. 첫번째 글에서는 ESP8266 의 특징과, 어떤 하드웨어, 소프트웨어가 있는지 소개합니다.

ESP8266 은 뭔가요?

ESP8266 은 아두이노 기반의 개발이 가능한 마이크로 프로세서와 Wi-Fi 모듈이 결합된 칩입니다. ESP8266 이 급격한 인기를 끈 이유는 작은 크기와 $2 정도의 낮은 가격 외에도 개발 도구인 SDK 가 공개되어 자유롭게 프로그래밍을 할 수 있다는 점이 가장 크다고 할 수 있겠습니다. 사진의 조그만 칩이 ESP8266 입니다.

esp8266_1_chip.png

Wi-Fi 모듈과 IoT

아두이노의 기반인 AVR 자체는 이미 오랫동안 사용되어 온 하드웨어입니다. 하지만 아두이노의 IDE 통합 개발 환경에서 간단히 프로그래밍하고 USB 를 통해 작성한 코드를 업로드가 가능해지면서 프로그래밍의 영역이 작은 장치 (Thing) 으로 쉽게 확장될 수 있었습니다. 하지만 이러한 장치를 인터넷에 연결하려면 (IoT: Internet of Thing) Bluetooth, Wi-Fi, LTE 등의 통신 프로토콜 확장이 가능한 추가 모듈이 필요했습니다. ESP8266 은 원칩으로 MCU 와 Wi-Fi 가 통합되어 간단한 IoT 개발을 가능하게 해줍니다.

크기와 가격

Linux 를 올릴 수 있는 라즈베리파이3는 정가가 $35에 불과하지만 Linux 를 올릴 수 있고 Wi-Fi, Bluetooth 가 내장되어 있어 IoT 입문에 좋습니다. 하지만 여러개 부담없이 구입하여 확장하기에는 가격적인 부담이 있고, 성능이 좋은 만큼 배터리로 작동하기 어려울 만큼 전기도 많이 소비합니다. 이럴 때 ESP8266 은 좋은 대안이 됩니다. 예를 들어 거실과 방 3개의 온도를 측정하고 에어컨을 컨트롤하고 싶다면, 라즈베리파이로는 10만원이 넘는 재료비가 필요하지만 ESP8266 은 총합 만원으로도 가능하고, 배터리로 동작시킬 수도 있습니다.

ESP-01, ESP-12E 이런것도 ESP8266 인가요?

ESP8266 칩 자체에 MCU, RAM, Wifi, IO 등이 내장되어 있지만, 실제로 프로그래밍하고 사용하려면 플래시 메모리, 안테나가 필요하고 GPIO 를 확장해야 합니다. 이렇게 ESP8266 을 바로 사용 가능하게 한 모듈이 ESP-01, ESP-02, …, ESP-12 등이 있습니다.

ESP-01

esp8266_1_esp01.png

가장 간단한 ESP8266 모듈입니다. 8개의 핀이 있지만 전원, 통신, 제어용 빼고 나면 실제 GPIO 는 한개 정도만 사용할 수 있습니다. 최대 512KB 플래시에 한가지 디지털 입출력만 사용하는 환경에서 간단한 회로를 구성할 수 있습니다. 보통 붉은색 전원 LED 가 사용됩니다.

ESP-12

esp8266_1_esp12.png

금속 쉴드로 ESP8266 칩을 차폐하여 FCC 인증을 받고, 충분한 갯수의 GPIO 를 확보한 모듈입니다. 가장 보편적으로 쓰이지만, 핀 간격이 2mm 라서 빵판이나 컨넥터를 연결하기 어려우니 필요에 따라 아래와 같은 확장 보드를 연결하여 사용하면 사용이 편합니다. ESP-12E 와 ESP-12F 가 흔한데, 기판 색과 안테나 패턴 정도만
달라 큰 차이는 없습니다. 전원은 보통 파란색 LED 입니다.

esp8266_1_esp12_ext.png

기타 모듈

양산 환경에 따라 세라믹 안테나를 사용하는 ESP-03, 외부 안테나 연결이 가능한 ESP-07 등이 있으며 ESP-14 모듈은 STM8003 MCU 가 추가되어 있어 더 다양한 프로그래밍이 가능합니다. 자세한 모듈별 설명은 다음 링크를 참고하시면 좋습니다.
http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family

esp8266_1_esp14.png

점점 더 모르겠는데.. 그래서 뭘 사서 개발하면 되나요..?

위 모듈들은 개발용으로는 좋지 않습니다. ESP8266 은 3.3V 입력을 받는데, USB 나 아두이노나 5V 가 기본이기 때문에 입력 전압을 내려주거나 별도 전원을 따야 합니다. 프로그램을 짜서 올릴래도 USB-serial 컨버터를 써야 하고요. 그래서 아래와 같은 개발 보드들을 사용하는 것이 좋습니다. 가격은 모듈보다 살짝 더 비싼 정도입니다.

NodeMCU

micro USB 로 PC 에 연결하기만 하면 모든 개발이 가능합니다. 납땜 없이 빵판에 바로 꽂을 수도 있으니 확장도 쉽습니다. 눈썰미가 좋은 분은 눈치채셨겠지만, ESP-12 모듈에 USB-serial 칩을 장착하고 5V 를 3.3V 로 내려 공급하게 해주는 개발 보드입니다. RST 버튼을 누르면 초기화가 가능하고, FLASH 버튼으로 부팅시 플래시 모드로 진입시킬 수도 있습니다. 리셋 및 플래시 기능을 소프트웨어적으로 처리 가능해서 손 안대고도 새 펌웨어 기록이 가능합니다. ESP8266 개발을 시작한다면 첫 개발 모듈로 선택하셔도 좋습니다.

esp8266_1_NodeMCU_v2.png

NodeMCU 는 v2 와 v3 가 있는데, 아래가 v3 입니다. 사이즈가 더 커서 불편한데다, v2 에서는 USB-serial 변환으로 CP2102 칩을 쓰지만 v3 는 CH340 칩을 써서 맥에서 드라이버 설치가 더 까다롭습니다. 가능하면 v2 를 쓰시는 것을 추천드립니다.

esp8266_1_NodeMCU_v3.png

D1 mini

NodeMCU 와 비슷한데 크기는 더 작습니다. 확장핀이 기본 접합되어 있지 않아 확장을 위해서는 납땜을 해야 하지만, 필요한 핀만 사용할 수 있습니다. RTC, 배터리, 릴레이 등 쉴드가 많이 출시되어 있어 고급 사용자에게 적합합니다.

esp8266_1_WeMos_D1_mini.png

ESP8266 은 어떤 언어로 개발할 수 있나요?

AI-Thinker

esp8266_1_ai_thinker.png

아두이노와 ESP8266 을 연동하는 예제에서 AT 커맨드를 보내는 것을 볼 수 있는데, 그때 사용하는 펌웨어입니다. 일반적인 ESP8266 모듈에 기본 탑재되는 펌웨어로 모뎀에서 사용하는 AT 커맨드를 확장하여 Wi-Fi 기본 통신 기능을 사용합니다. 별도 개발 용도로 사용되지는 않습니다.

NodeMCU Lua

eLua 스크립트를 ESP8266 에서 사용할 수 있게 하는 펌웨어입니다. 펌웨어를 업로드한 후에는 별도 펌웨어 기록 없이 lua 스크립트만 변경하여 프로그램이 가능하여 편리합니다.

https://github.com/nodemcu/nodemcu-firmware

MicroPython

Python 을 ESP8266 으로 일부 포팅하여 기본적인 Python 문법과 모듈을 사용 가능하게 한 프로젝트입니다. 다양한 Python 모듈이 추가로 제공되며 화면과 같은 webrepl 콘솔이 기본 제공되어 시리얼 연결 없이 쉽게 시작할 수 있습니다.

esp8266_1_webrepl.png

https://github.com/micropython/micropython/tree/master/esp8266

Arduino

esp8266_1_Arduino.png

AVR 개발도구로 널리 쓰이는 아두이노 툴도 ESP8266 을 지원합니다. 코드만 업로드하고 인터프리터로 실행 가능한 MicroPython 이나 Lua 에 비해 C, C++ 로 개발된 펌웨어를 매번 컴파일하고 업로드해서 실행결과를 봐야 하는 단점이 있지만, 기존에 .ino 형태로 배포되는 아두이노 스케치를 활용할 수 있고 결과물이 가볍고 빠르다는 장점이 있습니다.

그러면 어떤 ESP8266 개발은 어떤 소프트웨어로 하면 되나요?

ESPlorer

GUI 에서 Lua, MicroPython 개발이 가능한 IDE 입니다. 파일 관리나 하드웨어 관리를 마우스로 편하게 할 수 있습니다.

https://developer.ibm.com/kr/wp-content/uploads/sites/98/ESPlorer-panels.png

https://esp8266.ru/esplorer/

esptool

Python 기반의 펌웨어 관리툴입니다. Python 이 설치되어 있다면 pip install esptool 만으로 완료되어 간단합니다. 새로운 펌웨어 설치, 펌웨어 삭제 등 부트로더에 관련된 기능들이 제공됩니다.

https://github.com/espressif/esptool

토론 참가

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