1. 程式人生 > 其它 >ESP32 DevKitC 編譯燒寫 AliOS Things

ESP32 DevKitC 編譯燒寫 AliOS Things

作者簡介:

邵國際,計算機專業大四學生,擅長動手,熱衷物聯網。用技術表達自我,雖然是個玩過微控制器的渣渣,但一直想做出好玩有趣的東西(軟/硬體),並享受其中的樂趣。目前在深圳增長見識、學習嵌入式開發技術中。

AliOS Things 是一款由阿里巴巴開發的輕量級物聯網作業系統。具備極致效能,極簡開發、雲端一體、豐富元件(包括實時作業系統核心,連線協議庫、檔案系統、libc介面、FOTA、Mesh、語音識別)、安全防護等關鍵能力,並支援終端裝置連線到阿里雲IoT雲服務平臺。可廣泛應用在智慧家居,智慧城市,工業等領域,降低物聯網終端開發門檻,使萬物互聯更容易,終端裝置上雲更簡單。

專案地址:alibaba/AliOS-Things: AliOS Things released by Alibaba is an open-source implementation of operating system (OS) for Internet of Things (IoT).

在嵌入式實時作業系統大家族中,常見的 µC/OS-III、FreeRTOS 等 RTOS 嚴格意義上只能算一個 kernel(僅包含 OS 基本服務),隨著物聯網時代到來,出現了像 AliOS Things、RT-Thread 這些「時髦」的作業系統,大佬們在實時核心的基礎上增加了大量元件,囊括通訊協議棧、低功耗管理、安全加密演算法、FOTA(遠端韌體升級)等功能,可以說目的十分明確 —— 直奔物聯網。

更多關於物聯網作業系統的知識,可以參考何小慶老師的 PPT 物聯網作業系統研究與思考.pdf


ESP32

物聯網的大潮下,MCU 迎來一個新的發展機遇。繼 ESP8266 之後,樂鑫在 2015 年底又推出了更強大的 ESP32 系列 WiFi 晶片,從引數描述可以看出:

ESP32 SoC 為雙核 32 位 MCU,主頻高達 240 MHz,計算效能可達 600 DMIPS,採用 40 nm 工藝,整合 520 KB SRAM,16 MByte flash。工作電壓 2.2 V to 3.6 V。ESP32 專為移動裝置、可穿戴電子產品和 IoT 應用而設計,擁有業內最高水平的低功耗晶片的所有特徵,例如精細分辨時鐘門控、省電模式和動態電壓調整等。ESP32 SoC工作溫度範圍從-40°C 到 +125°C。此外,ESP32 還集成了先進的自校準電路,實現了動態自動調整,可以消除外部電路的缺陷以及適應外部條件的變化。

早在 2016 年樂鑫 ESP32 和阿里雲物聯網系統 YoC 已經有了合作。去年 10 月份的雲棲大會上阿里提出了 AliOS Things,不久之後專案開源便支援了 ESP32,同時為開發者提供了許多開發工具。

ESP32 DevKitC 開發板

ESP32-DevKitC 是搭載了樂鑫最新的 ESP-WROOM-32 模組的 MINI 開發板,能夠輕鬆地插接到麵包板,板子包含了使用者所需的最小系統,只需連上 USB 線,即可進行開發。此外還具有 USB-UART 轉換器 ,復位和下載模式按鈕,LDO 穩壓器 和微型 USB 聯結器 。每個 GPIO 都可供開發者使用。

開發板購買地址:ESP32-DevkitC (Core board開發板)發票不含快遞費-淘寶網

那如何把 AliOS Things 編譯燒寫到 ESP32 DevKitC 呢?來不及解釋了,趕緊上車!


所需工具

在 Windows 下進行基於 AliOS Things 開發 ESP32 應用需要準備

  • 安裝有 Windows、Linux 或者 Mac 作業系統的 PC
  • 用於編譯 ESP32 應用程式的工具鏈
  • AliOS Things SDK —— 包含 ESP32 的 API 和用於操作工具鏈的指令碼
  • 編寫 C 語言程式的文字編輯器,例如 VS Code
  • ESP32 開發板,例如 ESP32-DevKitC

開發步驟

  1. 安裝 Visual Studio Code
  2. 安裝 alios-studio 擴充套件
  3. 獲取 AliOS Things SDK(Github 專案原始碼)
  4. 下載 ESP32 工具鏈
  5. 配置 SDK path,新建 helloworld 工程
  6. 編譯、構建專案
  7. 燒寫 bin 韌體

Step 1:安裝 VS Code、alios-studio 擴充套件

專案 Wiki 已經有詳細軟體安裝說明文件,按照步驟把 VS Code 和 alios-studio 擴充套件裝好即可:AliOS Things Studio · alibaba/AliOS-Things Wiki


Step 2:獲取 AliOS Things SDK 和 ESP32 工具鏈

下載 aos 原始碼

SDK 即專案倉庫原始碼,從 Github 上 Download Zip 或 Clone 到本地,拷貝到 D:AliOS-Things-master 目錄下(目錄自定)。

下載 ESP32 工具鏈

樂鑫 ESP-IDF 文件中詳細描述瞭如何搭建 ESP32 開發環境,我們需要工具鏈 Windows all-in-one toolchain 用於編譯原始碼。

直接下載官方提供的 zip 包即可:https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20171123.zip

同樣解壓到 D:msys32 目錄下,SDK 和 Toolchain 用於後續配置 VS Code 開發環境。


Step 3:配置 SDK path 與 Toolchain path

開啟裝好 aos-studio 擴充套件的 VS Code,點選右下角邊狀態列上的 Create Project 新建工程按鈕,首次使用會彈出配置 SDK Path 的視窗,把剛才下載的 SDK 目錄 D:AliOS-Things-master 和 ToolChain 目錄 D:msys32optxtensa-esp32-elfbin 複製到兩個 path 文字框中, SDK Version 會自動識別。

修改 alios-studio Toolchain 判斷規則(專案完善後可跳過此步)

此步驟非必須,由於我目前使用的 v1.1.2 版本的 SDK 尚未完善,多少會存在一些小 bug。比如對所新增 Toolchain path 的合法性判斷,目前只校驗了 arm Toolchain,所以對 ESP32 的 xtensa 工具鏈會誤報非法路徑。

阿里工程師在 issue [AliOS-studio][ESP32] tool chain path. · Issue #55 · alibaba/AliOS-Things 裡給出了臨時解決方法 —— 把 C:Users使用者名稱.vscodeextensionsalios.alios-studio-0.6.6srcyang-sdkmain.js 檔案中以下判斷語句註釋掉:

if (options.toolChain && !fsPlus.existsSync(path.join(dir, `arm-none-eabi-gcc${process.platform === 'win32' ? '.exe' : ''}`))) {
    return {error: 1, msg: 'path is not a tool chain directory!'};}

修改完畢後重啟 VS Code,按 Ctrl+Shift+P 快捷鍵調出命令模式,輸入 alios-studio: set SDK 繼續配置,可正常新增 Toolchain path。


Step 4:新建 helloworld 工程

繼續點選新建工程按鈕,這回我們終於看到了待選工程模板,勾選 helloworld 工程,滾到下面填寫工程儲存目錄(不能帶中文),目標板卡選 esp32devkitc,最後點 Submit 按鈕確認提交。

新建工程需要把 sdk 賦值到工程資料夾,比較耗時,請耐心等待。完成後 VS Code 會新開啟一個資料夾檢視視窗,表示一個 alios-studio 工程。在左側的目錄中開啟 helloword.c 檔案,其中application_start 函式是應用程式的入口。helloworld 程式的執行現象是在串列埠以 5 s 的間隔列印除錯字串。

新建工程視訊演示:AliOS Things Tutorial: 1 Hello World 應用


Step 5:編譯、構建專案

點選視窗下方狀態列上的 Build 按鈕開始編譯、構建專案,期間會輸出相應資訊。如果 SDK 和工具鏈路徑配置 ok 的話專案是可以成功編譯的。經過 67.57 s 的漫長等待,終於 Build 完了……

編譯生成的檔案在工程的 out 目錄下,outhelloworld@[email protected] 是要燒到板子上的韌體。


Step 6:燒寫 bin 韌體

韌體燒錄是相對獨立的過程,原理適用於所有 bin 檔案。燒寫 ESP32 韌體可以通過圖形介面的 ESPFlashDownloadTool 軟體或者 Python 命令列工具 esptool,兩者都十分好上手,下面分別說明燒錄方法。

bin 檔案燒錄地址

在燒寫前需要準備 3 個 bin 檔案,分別是載入程式(bootloader.bin)、分割槽表(custom_partitions.bin)和使用者程式([email protected])。

載入程式和分割槽表的 bin 檔案在 SDK 目錄 D:AliOS-Things-masterplatformmcuesp32bsp 下,使用者程式 bin 由 alios-studio 編譯得到。3 個 bin 檔案燒錄地址如下:

bin 檔案

燒錄地址

bootloader.bin

0x1000

custom_partitions.bin

0x8000

[email protected]

0x10000

系統啟動時會從 0x1000 地址處開始執行,載入程式讀取分割槽表確定記憶體分佈及啟動規則,然後執行使用者程式程式碼。因此全部 bin 都要燒到正確的地址程式才能正常執行,這一點需要特別注意。

PS:bootloader.bin 和 custom_partitions.bin 首次必須燒寫,之後僅燒使用者 bin 即可。

使用 ESPFlashDownloadTool 工具燒錄

ESPFlashDownloadTool 工具可在 Tools - 樂鑫 Flash 下載工具下載,開啟軟體後選擇 ESP32 DownloadTool,設定不同韌體及對應地址、晶振頻率、SPI 模式、Flash大小,波特率(決定燒寫速度),如下圖所示:

將 ESP32 DevKitC 開發板用 Micro-USB 線與電腦連線,安裝串列埠驅動,在燒寫軟體中選擇對應 COM 號,點選 Start 按鈕開始下載。

提示:大部分電腦在點選 Start 後會自動復位 ESP32 DevKitC 進入下載模式,如果出現一直等待的情況,請嘗試按住 Boot 鍵不放再下載,或者按住 BooT 鍵的的同時按一下 EN 鍵再鬆開。

使用 esptool 工具燒錄

esptool 是採用 Python 語言編寫的開源工具(原始碼:espressif/esptool: ESP8266 and ESP32 serial bootloader utility),提供方便易用的命令列方式進行操作,常用操作命令:

單個 bin 寫 flash 命令:

格式:esptool.py --port 串列埠號 write_flash 地址 檔名.bin

示例:esptool.py --port COM4 write_flash 0x1000 my_app-0x01000.bin

多個 bin 寫 flash 命令:

格式:esptool.py --port 串列埠號 write_flash 地址1 檔名1.bin 地址2 檔名2.bin

示例:esptool.py --port COM4 write_flash 0x00000 my_app.elf-0x00000.bin 0x40000 my_app.elf-0x40000.bin

esptool.py 在 D:AliOS-Things-masterplatformmcuesp32esptool_pyesptool 目錄下,可通過「計算機 - 屬性 - 高階系統設定 - 環境變數」新增到系統環境變數 Path 中(分號隔開後貼上路徑),以便在命令列中直接使用。

在 CMD 中敲入以下命令,將 bootloader.bin、custom_partitions.bin 和 [email protected] 三個檔案下載到 Flash 對應地址。

esptool.py --port COM30 --baud 921600 write_flash 0x1000 D:AliOS-Things-masterplatformmcuesp32bspbootloader.bin 0x8000 D:AliOS-Things-masterplatformmcuesp32bspcustom_partitions.bin 0x10000 E:CodeBaseESP32AliOS-Thingshelloouthelloworld@[email protected]

指令碼實現

每次輸命令太麻煩?將以下程式碼儲存為批處理指令碼 upload.bat ,並拷貝到工程目錄 hello 下,最後在 VS Code 內建的終端中執行指令碼實現一鍵燒錄:

for /f "delims=" %%t in ('dir /A:-D /S /B out*@esp32devkitc.bin') do set binPath=%%t

esptool.py --port COM30 --baud 921600 write_flash 0x1000 D:AliOS-Things-masterplatformmcuesp32bspbootloader.bin 0x8000 D:AliOS-Things-masterplatformmcuesp32bspcustom_partitions.bin 0x10000 %binPath%

韌體 bootloader.bincustom_partitions.bin 從 SDK 目錄獲取,使用者 bin 通過子目錄下搜尋 “@esp32devkitc.bin” 檔案字尾得到。


執行結果

點選 VS Code 下方的 Connect Device 按鈕(選好 COM 號,波特率 115200),通過 alios-studio 自帶串列埠工具連線開發板(或使用其他串列埠工具),如果收到 ESP32 每隔 5 s 發過來的除錯資訊,說明 helloworld 執行成功!

提示:如果板子不斷重啟列印錯誤資訊,請檢查韌體及燒寫地址的正確性。