jollen.org

Jollen 的 Blog
Jollen's email: jollen # jollen.org
more:  Jollen's Training

使用 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 開發模式有:

  1. Microcontrollers 搭配 ESP8266 WiFi Module,使用 microcontrollers 來控制 ESP8266,例如:Arduino + ESP8266

  2. 使用官方的 ESP8266-RTOS-SDK,使用 FreeRTOS 來開發 ESP8266 的應用程式,ESP8266 WiFi Module 可以做為主動方(即不需要 microcontroller 即可單獨執行)

  3. 使用 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:

純手工打造說明:技術專欄文章為 Jollen 原創,內容皆為人工撰寫,無 AI 生成。轉載請註明出處與作者,並全文引用。轉載時請在文章開頭或結尾明顯處註明「本文出處:https://www.jollen.org,已取得原作者同意並授權使用。」
訂閱電子報:不定期 Jollen's Blog 精選文章隨 Moko365 電子報寄送;請透過 Moko365 電子報訂閱(可隨時取消)。

Copyright(c) 2001–2016 www.jollen.org. All rights reserved.
Last update: 2026-07-22