반응형









Ubuntu 14.04에서 작업을 진행했습니다. 64비트 운영체제를 기준으로 진행합니다. 




1. VirtualBox 설치

sudo apt-get install dkms


wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -


sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian trusty contrib" >> /etc/apt/sources.list.d/virtualbox.list'


sudo apt-get update


sudo apt-get install virtualbox-5.0




2. vagrant 설치

https://www.vagrantup.com/downloads.html 에서 데비안을 위한 32비트 또는 64비트 패키지를 다운로드 가능한데 현재 최신버전이 1.8.1입니다.


wget https://releases.hashicorp.com/vagrant/1.8.1/vagrant_1.8.1_x86_64.deb

sudo dpkg -i vagrant_1.8.1_x86_64.deb




3. git 설치

sudo apt-get install git




4. 가상 머신 준비

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

cd esp8266-micropython-vagrant



가상머신을 활성화합니다.

vagrant up



가상머신에 접속하기 위한  터미널을 열어줍니다.

vagrant ssh


다음과 같은 프롬프트가 보이게 됩니다.

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




5. ESP Open SDK 컴파일

앞 단계에서 이미 SDK 소스 코드가 이미 esp-open-sdk 서브디렉토리에 다운로드 된 상태입니다.

경로만 이동하여 컴파일을 진행하면 됩니다. 


cd ~/esp-open-sdk

make STANDALONE=y



컴파일이 완료되면 PATH에 경로를 추가해주어야 합니다.

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


PATH를 적용하기 위해서는 가상머신을 로그아웃했다가 다시 로그인해야 합니다.

exit

vagrant ssh




6. MicroPython 펌웨어 컴파일



1차 시도....

자동으로 소스코드가 다운로드 되어 있어서 디렉토리를 이동하여 진행해봅니다.


cd ~/micropython


git submodule update --init


cd esp8266



아래와 같은 에러가 발생했습니다..


vagrant@vagrant-ubuntu-trusty-64:~/micropython/esp8266$ make

Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.

Generating build/frozen.c

mkdir -p build/genhdr

Generating build/genhdr/mpversion.h

GEN build/genhdr/qstr.i.last

In file included from ../lib/axtls/ssl/ssl.h:75:0,

                 from ../py/../extmod/modussl.c:37:

../lib/axtls/ssl/tls1.h:43:21: fatal error: version.h: No such file or directory

 #include "version.h"

                     ^

compilation terminated.

make: *** [build/genhdr/qstr.i.last] Error 1

make: *** Deleting file `build/genhdr/qstr.i.last'





2차 시도...

에러가 나서 지우고 다시 소스코드를 다운로드 받아서 해봅니다.
https://www.youtube.com/watch?v=gBumLl6Phsc 댓글에 나와있는  해결책도 적용해봅니다.


git clone https://github.com/micropython/micropython.git

cd micropython/

git submodule update --init

cd esp8266

make axtls


make



에러 없이 컴파일이 제대로 되었습니다.





컴파일 완료 후 결과물을 호스트 PC로 복사하기 위해 다음 명령을 사용합니다.


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



터미널에서  로그아웃하고 가상머신을 종료합니다.

exit

vagrant halt



firmware-combined.bin 파일이 현재 폴더에 존재함을 확인 할 수 있습니다...






리눅스에서  펌웨어를 컴파일하고 윈도우로 재부팅해서 펌웨어를 업로드하는 것을 번거로우므로  리눅스에서 펌웨어를 업로드 할 수 있도록 준비합니다. 


sudo apt-get install python-pip


sudo pip install pyserial


git clone https://github.com/themadinventor/esptool.git

cd esptool

펌웨어를 현재 디렉토리로 복사해옵니다.
cp ../firmware-combined.bin .


이제 ESP8266과 USB TO TTL 컨버터를 아래 이미지처럼 연결합니다.



다음 명령을 사용하여 펌웨어를 업로드합니다.


sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 firmware-combined.bin





제대로 동작하는지 확인해보기 위해 ESP8266과 USB TO TTL 컨버터를 아래 이미지처럼 연결합니다.






시리얼포트에 접속하기 위해 다음 명령을 사용합니다.


 sudo miniterm.py /dev/ttyUSB0 115200



연결된 후 엔터를 치면 파이썬의 프롬프트인 >>>이 나타납니다. print 문으로 Hello도 출력해봅니다.








7. MicroPython 스크립트를 작성하여 펌웨어 컴파일하기

가상 머신을 활성화 하고 터미널에 접속합니다.

cd ~/esp8266-micropython-vagrant

vagrant up && vagrant ssh



main.py 파일을 열어서 

nano micropython/esp8266/scripts/main.py


아래 내용으로 작성합니다. 

1
2
3
4
5
6
7
8
9
from machine import Pin
import time
 
p2 = Pin(2, Pin.OUT)
while True:
    p2.high()
    time.sleep(1)
    p2.low()
    time.sleep(1)
cs




_boot.py 파일을 열어서 


 nano micropython/esp8266/scripts/_boot.py 



아래처럼 "import main"을  추가해줍니다.


1
2
3
4
5
6
7
8
9
10
11
import uos
from flashbdev import bdev
import main
 
try:
    if bdev:
        vfs = uos.VfsFat(bdev, "")
except OSError:
    import inisetup
    vfs = inisetup.setup()
 
cs


( main.py가 그냥은 업로드 되지 않아서  _boot.py에서 사용한다고 선언해서 main.py가  업로드 되도록 했습니다..)





펌웨어를 컴파일합니다.


cd micropython/esp8266


make clean


make



컴파일 완료 후 결과물을 호스트 PC로 복사하기 위해 다음 명령을 사용합니다.


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



터미널에서  로그아웃하고 가상머신을 종료합니다.

exit


vagrant halt





아래 처럼 연결하고 




새로 컴파일한 펌웨어를 업로드합니다...


cd esptool


 cp ../firmware-combined.bin .


sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 firmware-combined.bin





다시 아래처럼 연결하면 LED가 계속 깜빡이는 것을 확인 할 수 있습니다.


( GPIO 0에 LED를 연결하는 경우에는 처음부터 LED를 GPIO0에 연결하고 3.3V전원을 공급해도 올바르게 동작하지만....


GPIO 2의 경우에는 3.3V 전원을 먼저 공급해주고 나중에 LED를 GPIO 2에 연결해야 올바르게 동작하네요...)









기존에 가지고 있는 ESP8266모듈은 GPIO포트가 2개 밖에 없는데다가 위에서 봤듯이 문제가 발생하는 점도 있고해서.ㅠ


좀 더 많은 기능을 지원하는 NodeMCU v3를 조만간 구입해봐야겠습니다..

 

 












참고

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


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts