ESP8266 활용 가이드 목차

.

MicroPython은 마이크로 컨트롤러용 파이썬 프로젝트입니다. 파이썬의 문법과 언어적 특성을 임베디드 환경에서 사용할 수 있도록 해주죠. 공식적으로는 전용 마이크로 파이썬 보드를 지원하는데 ESP8266 모듈에서 사용이 가능하도록 개발이 진행되는 중입니다. 아직 실험적인 단계이며 공식 보드가 제공하는 기능들을 모두 지원하진 않지만 GPIO 제어, WiFi 연결, low-level socket 형태의 인터페이스를 통해 인터넷 접근이 가능합니다.

아직 I2C, SPI 등등의 하드웨어 파트는 지원하지 않습니다. ESP8266 지원이 잘 마무리 되길 바랍니다만 결과는 장담할 수 없을듯…

.

펌웨어 빌드

참고 : https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/build-firmware

ESP8266 모듈에서 마이크로 파이썬 사용을 위해서는 펌웨어를 탑재해야 합니다. 펌웨어를 얻는 최고의 방법은 직접 소스코드를 빌드해서 만드는 것!! 왜냐면 아직 실험적인 단계라 문제도 많고 업데이트도 잦기 때문에 필요한 업데이트가 있을 때 소스코드를 받아 직접 빌드하는게 빠르기 때문입니다.

테스트 용도로 펌웨어를 올려보고 싶은 경우라면 미리 빌드된 펌웨어를 사용해도 무방합니다.

마이크로 파이썬 펌웨어 빌드를 위해서는 ESP open SDK toolchain 을 설치해서 ESP8266 프로세서를 위한 컴파일 환경을 갖춰야 합니다. OS마다 이 환경을 맞춰주는 것이 까다롭기 때문에 virtual machine 을 이용해서 가상의 linux 기반 개발환경을 돌리는 방법을 사용하는 것이 좋습니다.

우선 필요한 파일들을 다운로드 합니다.

  • VirtualBox – 가상머신.
  • Vagrant – VirtualBox 커맨드 라인 wrapper.
  • Git – Git 프로젝트 관리 툴 다운로드.

Git Bash 커맨드창에서 아래 명령어를 실행하면 ESP8266 용 마이크로 파이썬 코드를 다운로드 합니다.

  • git clone https://github.com/adafruit/esp8266-micropython-vagrant.git
  • cd esp8266-micropython-vagrant

아래 명령으로 가상머신을 실행합니다.

  • vagrant up

리눅스 커맨드 터미널을 실행합니다. 쉘 프롬프트가 떠야합니다.

  • vagrant ssh
  • vagrant@vagrant-ubuntu-trusty-64:~$

SDK 소스코드를 아래 링크에서 다운로드합니다. 다운로드 후 가상 머신 – 리눅스로 파일들을 옮겨줍니다.

소스코드가 있는 경로로 이동하고

  • cd ~/esp-open-sdk

컴파일 실행

  • make STANDALONE=y

컴파일 완료되면 아래처럼 뜹니다.

...
Xtensa toolchain is built, to use it:
export PATH=/home/vagrant/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain

마이크로 파이썬 빌드를 위한 환경이 갖춰졌습니다. SDK 경로를 path로 설정해서 저장해둡니다.

  • echo “PATH=$(pwd)/xtensa-lx106-elf/bin:\$PATH” >> ~/.profile

패스 적용을 위해 로그아웃 후 재 접속

  • exit
  • vagrant ssh

마이크로 파이썬용 펌웨어 컴파일 준비가 완료되었습니다. 마이크로 파이썬 소스코드를 다운로드 하고 가상머신 – 리눅스로 옮겨둡니다.

해당 경로로 들어가서 빌드합니다.

  • cd ~/micropython/esp8266
  • make

정상적으로 완료되면 아래처럼 보입니다.

LINK build/firmware.elf
text data bss dec hex filename
304096 1332 53776 359204 57b24 build/firmware.elf
Create build/firmware-combined.bin
('flash ', 52800)
('padding ', 12736)
('irom0text', 252672)
('total ', 318208)

빌드가 성공하면 아래 경로에 파일이 생성됩니다.

  • ./build/firmware-combined.bin

이 펌웨어 파일을 ESP8266 모듈에 올려야 합니다. 일단 파일을 가상환경에서 꺼내기 위해 공용 폴더로 옮기고 가상환경 종료

  • cp ./build/firmware-combined.bin /vagrant/
  • vagrant halt

.

펌웨어 업데이트

펌웨어 바이너리를 모듈에 올리는 방법은 다양합니다. 커맨드창에서 esptool.py 를 이용해서 올릴수도 있고 flashing 전용 프로그램을 사용해도 됩니다. 여기서는 flashing 전용 프로그램인 nodemcu-flasher Tool (Windows Only)을 사용하겠습니다.

아래 경로에서 nodemcu-flasher Tool 파일들을 다운로드합니다.

펌웨어 업데이트 툴이 준비되면 아래 순서로 진행합니다.

  • 32-bit binary 또는 64-bit binary 폴더에 있는 실행파일을 실행함
  • 앞서 마이크로 파이썬 소스코드 빌드해서 만든 firmware-combined.bin 펌웨어 파일을 준비함
  • Config 탭에서 첫 번째 입력란에 펌웨어 파일을 선택. Flash 메모리 주소는 0x00000 상태로 놔둠.
  • Operation 탭으로 돌아가서 COM 포트를 선택.
  • 펌웨어 업로드 하기 전에 반드시 ESP8266 모듈을 펌웨어 업데이트 모드로 맞춰둘 것. (모듈마다 이 방법이 조금씩 다름)
  • Flash 버튼을 눌러 펌웨어 write 작업을 진행.

esp8266-reflash-firmware

step_4_flash_nodemcu

.

마이크로 파이썬 사용법

ESP8266 모듈에 COM 포트 – Serial 통신으로 접근하기 위해서는 Putty(Windows) 프로그램을 사용해서 Serial 접속을 해야 합니다. Putty 실행 후 Serial 접속으로 설정하고, COM 포트를 선택해서 Putty 콘솔창을 오픈하면 아래처럼 쉘 프롬프트가 뜹니다.

  • >>>

여기에 원하는 파이썬 코드를 넣으면 ESP 모듈이 해석해서 실행하고 결과를 바로 알려줍니다.

  • >>> print(“Hello world!”)
  • Hello world!

예를 들어 1부터 10까지 출력하는 코드를 넣으면…

  • >>> for i in range(1, 11):
  • … print(“Number {0}”.format(i))

아래처럼 출력됩니다.

Number 1
Number 2
Number 3
Number 4
Number 5
Number 6
Number 7
Number 8
Number 9
Number 10
>>>

아래 링크를 참고하면 마이크로 파이썬 언어에 대해 더 상세하게 알 수 있습니다.

.

GPIO 제어

ESP8266 모듈의 GPIO를 제어하고 싶다면 아래처럼 해보세요. GPIO14 를 10회 on/off 시키는 예제입니다.

>>> import pyb
>>> pin = pyb.Pin(14, pyb.Pin.OUT_PP) # Set pin 14 as an output.
>>> for i in range(10):
... pin.value(0) # Set pin low (or use pin.low())
... pyb.delay(1000) # Delay for 1000ms (1 second)
... pin.value(1) # Set pin high (or use pin.high())
... pyb.delay(1000)

만약 무한루프를 돌리면 쉘로 멈출수가 없습니다. 이때는 모듈을  리셋해야 합니다.

14번 핀의 on/off 상태를 읽을 땐 아래 코드를 사용하면 됩니다.

>>> import pyb
>>> pin = pyb.Pin(14, pyb.Pin.IN)
>>> pin.value() # Read pin value, will show 0 when low (connected to ground).
0
>>> pin.value() # Read pin value again, will show 1 when high (connected to 3.3V).
1

.

WiFi 제어

아직 저수준의 소켓형 인터페이스만 구현된 상태라 기본적인 기능들만 됩니다. 추후 업데이트를 기다리던지 직접 개발해야 합니다;;;

아래 코드를 참고해서 테스트 해보세요.

>>> import esp
>>> 
>>> # Connect to a WiFi network.
>>> esp.connect('YOUR WIFI SSID NAME', 'YOUR WIFI SSID PASSWORD')
>>> 
>>> # Define function to print data received from socket.
>>> def socket_printer(socket, data):
>>> print(data)
>>> 
>>> # Create a socket and setup the print function.
>>> soc = esp.socket()
>>> soc.onrecv(socket_printer)
>>> 
>>> # Connect to adafruit.com at port 80.
>>> soc.connect(('207.58.139.247', 80))
>>> 
>>> # Send a request for the wifi test page.
>>> soc.send('GET /testwifi/index.html HTTP/1.0\r\n\r\n')
37
>>> b'HTTP/1.1 200 OK\r\nDate: Tue, 12 May 2015 18:44:49.........

dir() 함수를 이용해서 esp.socket 클래스의 함수들을 볼 수 있음

  • >>> dir(esp.socket)
  • [‘__del__’, ‘close’, ‘bind’, ‘listen’, ‘accept’, ‘connect’, ‘send’, ‘recv’, ‘sendto’, ‘recvfrom’, ‘onconnect’, ‘onrecv’, ‘onsent’, ‘ondisconnect’]

마이크로 파이썬과 PC에서 사용하는 파이썬의 차이는 아래 문서를 참고하세요.

  • https://github.com/micropython/micropython/wiki/Differences

.

스크립트 파일로 만들어서 자동 실행

마이크로 파이썬 코드를 미리 작성한 뒤 자동으로 실행되도록 설정할 수 있습니다. 다만 오직 하나의 파일만 컴파일해서 올릴 수 있으며 부팅할 때 자동 실행됩니다. 이렇게 하려면 펌웨어 소스코드를 수정해서 빌드하고, 펌웨어를 다시 모듈에 올려야 합니다.

  • vagrant up
  • vagrant ssh

마이크로 파이썬 소스코드에서 main.py 파일을 찾아서 수정합니다.

  • cd ~/micropython/esp8266/scripts/
  • nano main.py

아래 주석 부분을 찾으세요.

# This script is run on boot
......
......

이 아래에 원하는 파이썬 코드를 넣고 빌드를 다시하면 됩니다. 빌드가 끝나면 펌웨어를 다시 모듈에 업로드 하세요.

  • cd ~/micropython/esp8266
  • make

주의!!! 이 문서의 내용은 아직 테스트가 되지 않았습니다. 과정 중간에 얘기치 않은 문제가 발생할 수 있습니다.