ESP8266 & NodeMCU 開發入門 (Part 5) - 編譯並更新 NodeMCU Firmware

本文介紹,如何自行更新 NodeMCU 或 Wio Link 的 firmware。以下教學以 Mac 環境為主。

安裝 ESP Open SDK

在 MacOS 系統建置 ESP8266 的編譯環境。首先,確認是否已安裝 Xcode command line tools:

$ xcode-select --install

再使用 homebrew 安裝所需的套件:

$ brew tap homebrew/dupes
$ brew install binutils coreutils autoconf automake wget gawk libtool gperf gnu-sed --with-default-names grep bison libvorbis
$ export PATH=/usr/local/opt/gnu-sed/libexec/gnubin:/usr/local/opt/gperf/bin:$PATH

製作一個 "case-sensitive"(可區分大小寫檔名)的虛擬磁碟,大小是 8GB:

$ hdiutil create ./eos.dmg -volname "esp-open-sdk" -size 8g -fs "Case-sensitive HFS+"

將 ESP8266 Open SDK 下載至此虛擬磁碟:

$ hdiutil mount ./eos.dmg
$ cd /Volumes/esp-open-sdk
$ git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
$ cd eos-open-sdk

編譯 "separated SDK":

$ make STANDALONE=n

編譯完成後的畫面:

Xtensa toolchain is built, to use it:

export PATH=/Volumes/esp-open-sdk/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

Espressif ESP8266 SDK is installed. Toolchain contains only Open Source components  
To link external proprietary libraries add:

xtensa-lx106-elf-gcc -I/Volumes/esp-open-sdk/esp-open-sdk/sdk/include -L/Volumes/esp-open-sdk/esp-open-sdk/sdk/lib  

根據畫面提示,修改 PATH 環境變數:

$ export PATH=/Volumes/esp-open-sdk/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

完成 ESP8266 SDK 的安裝,接下來就可以開始編譯 NodeMCU firmware 了。

編譯 NodeMCU Firmware

這裡提供一份事先編譯好的 NodeMCU firmware,可至node-wot下載。再依照以下說明,將 0x00000.bin0x10000.bin 檔案燒錄至 NodeMCU 即可。

先安裝 pyserial 套件:

$ git clone https://github.com/pyserial/pyserial.git
$ cd pyserial/
$ sudo python setup.py install

下載 NodeMCU firmware 原始碼:

$ git clone https://github.com/nodemcu/nodemcu-firmware

編輯 app/include/user_config.h 檔案,將以下這一行的註解移除:

#define DEVKIT_VERSION_0_9 1

完成後開始編譯:

$ make

編譯完成後,得到以下二個檔案:

  • bin/0x00000.bin
  • bin/0x10000.bin

將以上二個檔案燒錄至 NodeMCU 更新即可。在 Linux 環境編譯 NodeMCU firmware,請另行參考這篇文章(#1)說明。

更新 NodeMCU Firmware

使用 NodeMCU firmware 的 esptool.py 工具,將編譯好的 firmware 檔案,下載至 NodeMCU。在 Mac 下使用 esptool.py 更新 NodeMCU firmware 時,需額外加上 -fm-fs 二個參數:

$ cd /Volumes/esp-open-sdk/nodemcu-firmware
$ ./tools/esptool.py --port /dev/cu.SLAB_USBtoUART write_flash -fm=dio -fs=32m 0x00000 bin/0x00000.bin 0x10000 bin/0x10000.bin

Reference