--- tags: MicroPython, ESP8266 robots: Python, MicroPython, ESP8266 lang: zh-tw --- # 如何編譯 ESP8266 的 MicroPython 韌體 ## 準備 Linux 環境 我使用的是 Debian Linux: 1. 安裝以下套件: ```bash= sudo apt install make unrar-free autoconf automake libtool libtool-bin gcc g++ gperf \ flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial \ sed git unzip bash help2man wget bzip2 ``` ## 下載並編譯 esp-open-sdk 1. 下載 SDK: ```bash git clone --recursive https://github.com/pfalcon/esp-open-sdk ``` 1. 如果想要使用不同版本的 ESP8266 SDK, 必須修改 Makefile 檔, 找到以下變數位置: ```makefile # Vendor SDK version to install, see VENDOR_SDK_ZIP_* vars below # for supported versions. VENDOR_SDK = 2.1.0-18-g61248df ``` 再往下可以找到支援的 SDK 版本, 例如: ```makefile VENDOR_SDK_DIR_2.1.0-18-g61248df = ESP8266_NONOS_SDK-2.1.0-18-g61248df VENDOR_SDK_ZIP_2.1.0 = ESP8266_NONOS_SDK-2.1.0.zip VENDOR_SDK_DIR_2.1.0 = ESP8266_NONOS_SDK-2.1.0 VENDOR_SDK_ZIP_2.0.0 = ESP8266_NONOS_SDK_V2.0.0_16_08_10.zip VENDOR_SDK_DIR_2.0.0 = ESP8266_NONOS_SDK_V2.0.0_16_08_10 VENDOR_SDK_ZIP_1.5.4 = ESP8266_NONOS_SDK_V1.5.4_16_05_20.zip ... ``` 只要將 VENDOR_SDK= 之後改成你要的版本編號就可以了。 3. 建置過程中, 有個地方會檢查 bash 版本是否大於 3.1, 但若是 5.X 版卻會被當成不符合, 所以要修改 crosstool-NG/configure.ac 檔案, 找到以下這行: ```bash |$EGREP '^GNU bash, version (3\.[1-9]|4)') ``` 改成加上 `5`: ```bash |$EGREP '^GNU bash, version (3\.[1-9]|4|5)') ``` 就可以了。 3. 編譯 SDK ```bash= cd esp-open-sdk make ``` 建置時間有點久, 請耐心等候。 :::info make 過程中會去其他地方下載必要的元件, 有可能因為下載位址改變或是其他原因出錯, 我曾經遇到以下錯誤: ``` [ERROR] >> Error happened in: do_expat_get[scripts/build/companion_libs/210-expat.sh@12] ``` 這是因為它到 sourceforge 下載 [expat-2.1.0.zip](http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.zip) 檔案, 但因為 [expat](https://sourceforge.net/projects/expat/) 這個專案現在已經搬到 [github]() 了, 所以這個位址已經沒有該檔案, 可以先自行到[github 下載](https://github.com/libexpat/libexpat/releases/download/R_2_1_0/expat-2.1.0.tar.gz)後, 複製到 /crosstool-NG/.build/tarballs/ 下重新 make 即可。 ::: 3. 建置完成後, 會看到類似這樣的訊息, 提醒您要輸出路徑才能執行對應的工具: ```bash= ..... Xtensa toolchain is built, to use it: export PATH=/home/meebox/code/esp-open-sdk/xtensa-lx106-elf/bin:$PATH Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain ``` 請自行在 shell 中下達指令, 或是改在 .profile 等設定檔中輸出路徑都可以: ```bash export PATH=原 git 路徑/esp-open-sdk/xtensa-lx106-elf/bin:$PATH ``` ## 建置 MicroPython 韌體 1. 下載 MicroPython 韌體: ```bash git clone --recursive https://github.com/micropython/micropython.git ``` 3. 建置 mpy Python 編譯器: ```bash make -C mpy-cross ``` 1. 建置 ESP8266 的子模組: ```bash make -C ports/esp8266 submodules ``` 1. 建置 MicroPython 韌體: ```bash cd ports/esp8266 make ``` 1. 建置完成會在 ports/esp8266/build-GENERIC/ 下 firmware-combined.bin 檔: ```bash ... LINK build-GENERIC/firmware.elf text data bss dec hex filename 586680 1020 66376 654076 9fafc build-GENERIC/firmware.elf Create build-GENERIC/firmware-combined.bin esptool.py v1.2 flash 32960 padding 3904 irom0text 554776 total 591640 md5 2c449d5b010f731ebab35447bd35f9f4 ``` 這個建置過程不會太久。