.

2015년 5불도 채 되지 않는 저렴한 가격으로 선풍적인 인기를 얻은 ESP8266 WiFi 모듈이 후속제품 ESP32를 베타테스트 중입니다. ESP8266은 기본이 되는 WiFi 통신 뿐 아니라 GPIO를 통한 센서 제어 등 마이크로 컨트롤러로서의 기능도 더해짐으로써 굉장한 인기를 얻었습니다. ESP8266 Arduino IDE, NodeMCU 가 대표적인 프로젝트입니다.

올해 들어서 ESP8266의 차기작인 ESP32의 베타테스트 관련 소식들이 해외에서 공개되고 있습니다. ESP32는 ESP8266을 대체하는 제품으로서가 아니라 한층 업그레이드 된 기능으로 새로운 포지션을 구축할 계획을 가지고 있습니다. 특히 WiFi 뿐 아니라 Bluetooth 4.2도 지원할 계획이라 그 쓰임새가 훨씬 다양해질 것으로 기대됩니다. CPU는 ESP8266 과 유사하게 32bit Xtensa® LX6 를 사용하지만 듀얼코어 프로세서입니다!! 그리고 128KB ROM과 416KB SRAM 을 장착하면 플래시 메모리는 64MB까지 외부 칩으로 연결합니다.

esp32-block-diagram
Block diagram from the ESP32 spec sheet.

36 개의 GPIO 핀을 가지고 있는데  아래와 같은 기능들과 맵핑됩니다.

  • Analog-to-Digital Converter (ADC) – Up to 16 channels of 12-bit SAR ADC’s. The ADC range can be set, in firmware, to either 0-1V, 0-1.4V, 0-2V, or 0-4V – no more weird 0-1V ADC!
  • Digital-to-Analog Converter (DAC) – Two 8-bit DAC’s to produce true analog voltages
  • Pulse-Width Modulation (PWM) – Up to 16 channels of PWM-capable pins for dimming LEDs or controlling motors
  • Touch Sensor – 10 GPIOs feature capacitive sensing; make a 10-key buttonpad!
  • UART – Two UART interfaces, one is used to load code serially. They feature flow control, and support IrDA too!
  • I2C, SPI, I2S – There are two I2C and four SPI interfaces to hook up all sorts of sensors and peripherals, plus two I2S interfaces if you want to add sound to your project.

보시면 아시겠지만, 32비트 마이크로 컨트롤러 급을 사용한다면 굳이 아두이노 제로를 선택할 필요가 없을 정도입니다. 가격과 기능(특히 WiFi-BT 통신!!) 모두 빠지지 않고 수 많은 커뮤니티의 지원을 받는 상황이기 때문에 아두이노-ESP32-라즈베리파이로 천하를 3분 할 수 있지 않을까 기대합니다.

ESP31B 는 베타테스트 용으로 출시할 ESP32와 거의 유사한 것으로 알려져 있습니다. 그리고 4MB flash 메모리와 함께 ESP31B를 품은 ESP-WROOM-03 모듈이 베타테스트에 사용되고 있습니다. 아래 이미지와 같이 GPIO 가 제공되며 통신을 위한 안테나 등 동작에 필요한 모든 회로를 갖추고 있습니다.

esp32-wroom-03-2
v01 of an ESP31B-WROOM-03 graphical datasheet

베타테스트를 위해 ESP32 RTOS SDK 가 제공됩니다. WiFi, peripheral interface, system function 등이 제공되지만 아직 블루투스 관련 지원은 되지 않는 상태라 합니다.

ESP32 펌웨어 컴파일을 위한 toolchain 셋업이 문제가 생기는 경우는 미리 컴파일된 윈도우용 파일들을 사용할 수 있습니다.

그리고 Eclipse C/C++ 개발환경에 toolchain을 연동할 수 있습니다.

아직 Eclipse 를 이용한 펌웨어 개발에 익숙치 않다면 Arduino IDE를 이용한 개발을 할 수도 있습니다. 이미 이 방법은 ESP8266 모듈을 위해 개발된 성공적인 프로젝트입니다. ESP32는 ESP8266과 상당부분 system, GPIO, WiFi function call 이 일치하기 때문에 ESP8266 Arduino IDE를 ESP32 용으로 사용할 수 있습니다. 관련된 프로젝트가 아래 링크에서 진행 중입니다.

ESP32는 3.0~3.6V 전원이 필요한데 꽤 전류를 많이 잡아먹는걸로 알려져 있습니다. 충분한 전류가 공급되지 않으면 Serial로 쓰레기 데이터가 전송되며 부팅 후 곧 멈추는 현상이 발생합니다.

ESP8266처럼 Serial 통신으로 펌웨어 업데이트가 가능하기 때문에 3.3V FTDI 모듈만 있으면 개발환경을 꾸밀 수 있습니다. 하지만 펌웨어 업데이트 할 때 ESP32 모듈에 리셋 신호를 주는 방법이 필요하기 때문에 몇몇 GPIO 핀을 부트모드를 설정하는데 사용합니다. 아래 표의 내용을 참고하세요.

GPIO Determining the Boot Mode
Pin Default Run Mode Download Mode
IO0 Pull-up 1 0
TXD0 Pull-up 1 x
IO2 Pull-down x 0
IO5 Pull-up 1 x

ESP32 basic hookup - fritzing diagram

ESP32는 ESP8266의 대체품이 아니라 독자적인 시장을 형성할 것으로 기대되는 모듈입니다. 특히 IoT 구현을 위한 마이크로 컨트롤러로서의 역할을 제대로 할 수 있을 것 같습니다. Bluetooth 기능까지 품은 ESP32 모듈이 안정화만 된다면 ESP32 만으로도 정말 다양한 작품들이 나올 수 있을겁니다.

참고자료