使用 ESP8266 做為 FreeRTOS 的學習與開發環境
.作者:jollen/
.日期:January 27, 2016 7:02 PM
根據 2016 CES 的 IoT 產業新聞分析:WiFi Module 正以出乎意料外的速度,佔領 IoT 市場,並且 RTOS 與 HTML5 扮演重要的主流 IoT 技術。本文介紹如何使用 ESP8266 做為 FreeRTOS 的學習環境。
本文章採用 Markdown 語法撰寫(why?),若無法完整閱讀全文,請點擊這裡。
前言
ESP8266 是 Espressif(樂鑫信息科技有限公司) 所開發的一款 WiFi 模組,ESP8266 WiFi Module 受到開發者與自造社群的喜愛。目前可見的 ESP8266 開發模式有:
-
Microcontrollers 搭配 ESP8266 WiFi Module,使用 microcontrollers 來控制 ESP8266,例如:Arduino + ESP8266
-
使用官方的 ESP8266-RTOS-SDK,使用 FreeRTOS 來開發 ESP8266 的應用程式,ESP8266 WiFi Module 可以做為主動方(即不需要 microcontroller 即可單獨執行)
-
使用 NodeMCU 的 ESP8266 firmware,使用 Lua script 的方式來開發 ESP8266 應用程式;ESP8266 WiFi Module 可以做為主動方(即不需要 microcontroller 即可單獨執行)
如果要把 ESP8266 做為 FreeRTOS 的學習平台,倒底要選擇那一個 SDK 呢?
開始學習 FreeRTOS
要將 ESP8266 做為 FreeRTOS 的學習平台,如果要練習修改或閱讀 FreeRTOS kernel 程式碼,就要使用開源的 FreeRTOS 版本。以下是使用 ESP8266 做為 FreeRTOS 學習或實驗平台的要點:
- 要使用 Open Source 的 FreeRTOS 原始碼
- 要有 ESP8266 的 Portable Layer 實作,例如 pvPortMalloc()
由 SuperHouse 社群所維護的 ESP8266 SDK 正好能滿足上述要點。此外,使用 FreeRTOS 在 ESP8266 平台上,打造 IoT 應用程式時,則是要滿足以下基本條件:
- 使用 lwip 做為 TCP/IP Stacks
- 具備 CoAP 的支援
- 硬體控制部份,最好有一個 Component-based 的程式設計模式
為了方便起見,WoT.City 發起 rtos-wot 計畫,將上述開源計畫整合成一個 FreeRTOS distribution,目標是維護一個用於學習 FreeRTOS + IoT 的 FreeRTOS 特別版本(distribution)。
安裝 FreeRTOS 開發環境
以下是開發環境的架設教學,教學內容以 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 Toolchain 的安裝,接下來就可以開始編譯 rtos-wot 了。
編譯 FreeRTOS Application Firmware
安裝 pyserial 套件:
$ git clone https://github.com/pyserial/pyserial.git
$ cd pyserial/
$ sudo python setup.py install
下載 rtos-wot 原始碼:
$ git clone https://github.com/wot-sdk/rtos-wot
編輯 include/ssid_config.h 檔案,設定 WiFi 的 SSID 與密碼:
#define WIFI_SSID "<the-SSID>"
#define WIFI_PASS "<your-passworld>"
完成後,挑選一個 RTOS 應用程式,並進行 firmware 編譯:
$ cd examples/blink
$ make
編譯完成後,在目前的應用程式路徑下,得到以下二個檔案:
- firmware/0x00000.bin
- firmware/0x20000.bin
將以上二個檔案燒錄至 ESP8266 更新即可,指令如下:
$ make flash ESPPORT=/dev/cu.SLAB_USBtoUART
使用 Linux 環境的讀者,請另行參考這篇文章的說明。
使用 esptool 更新 ESP8266 Firmware
如果要使用 esptool.py 工具,手動更新 firmware 檔案的話,指令如下:
$ esptool.py -p /dev/cu.SLAB_USBtoUART --baud 115200 write_flash -fs 32m -fm dio -ff 40m 0x20000 ./firmware/0x20000.bin 0x00000 ./firmware/0x00000.bin
在 Mac 下使用 esptool.py 更新 NodeMCU firmware 時,需額外加上 -fm 與 -fs 二個參數。
關於 RTOS WoT 計畫
本文使用的 RTOS WoT 版本,是專為 ESP8266 製作的 FreeRTOS 學習、教學與實驗平台。RTOS WoT 的目標是打造一個 Web of Things 的 RTOS SDK。
RTOS WoT 也在 RTOS Application Layer 做了一些加強,請參考以下文章:
Reference
- http://www.allaboutcircuits.com/projects/guts-of-the-iot-part-1-building-nodemcu-from-source-for-the-esp8266/
留言與討論
Tags: