[筆記] ESP32 在 VS Code 開發環境的編譯與除錯


準備工作

1) 安裝 Visual Studio Code (VS Code),並安裝其他 C/C++ 插件。
2) 安裝 Python 套件
3) 下載並執行 Setup ESP-IDF Tools:檢查電腦系統的環境,並幫我們把編譯的工具鏈 tool chain 安裝起來。
4) 在 VS Code 安裝 ESP-IDF 插件,點選插件後,看到下圖一並設定路徑後,點擊安裝 ESP-IDF。安裝 v4.2 版本後,會詢問是否下載安裝工具鏈,如果系統已經有安裝,那就設好路徑即可。最後,再安裝 python 虛擬環境給 ESP-IDF,便完成整個環境設定。

圖一:ESP-IDF 擴充插件

建立專案

1) 從 ESP-IDF 選範例專案:按 F1 後,上方的選單輸入 "ESP-IDF: Show Examples Projects",出現下圖二的範例專案列表,我們可以從中選一個範例來創建,例如我從當中選了 blink 或 hello_word。按下右上方的創建,就會在左半邊出現專案。

圖二:ESP-IDF 範例專案的列表

2) 編譯專案:按 F1 後,上方的選單輸入 "ESP-IDF: Build your project",VS Code 環境就會開發進行編譯的工作,在下方的欄位會顯示編譯的過程。
3) 設定模組型號:按 F1 後,上方的選單輸入 "ESP-IDF: Device configuration",彈出選項後,我們選擇 EPS32 為裝置的型號。
4) 電腦接上 ESP32 模組:按 F1 後,上方的選單輸入 "ESP-IDF: Select port to use",在 VS Code 會自動彈出 COM port 讓我們選擇,點選 EPS32 連接的 COM 即可。
5) 燒錄程式碼到 ESP32:按 F1 後,上方的選單輸入 "ESP-IDF: Select Flash Method and Flash",彈出選項 JTAG 或 UART,我們選擇 UART 為下載燒錄的方式 (前面我們已經設定 COM 了)。下載燒錄的方式設好了,下次只要按 F1 後,上方的選單輸入 "ESP-IDF: Flash (UART) your project" 也一樣會進行燒錄。成功後,我們能看到下圖三的結果。

圖三:下載燒錄程式碼的過程

6) 觀察 ESP32 模組:下載 blink 程式後,我們想要看看程式碼裡面有 printf 輸出的顯示情況,按 F1 後,上方的選單輸入 "ESP-IDF: Monitor your device",下方的輸出欄位就會看到每秒顯示輸出的結果。
        走過上面每個步驟後,個人心得在 VS Code 開發環境和使用 Arduino IDE 環境下編譯 ESP32 模組都很類似,在 VS Code 下要瀏覽 SDK 函數的定義比較方便且快速,此外 VS Code 還能接上除錯器,進行斷點除錯。

       最近遇到 VS Code 和 ESP-IDF extension 版本升級後,編譯過程出現失敗,看起來是 IDE 環境變數沒設定正確,所以按下 F1 選擇 "Configure ESP-IDF extension",讓系統重新把環境變數再設定好,這樣編譯才能成功。

Debug 除錯

1) 先準備一個 ESP-prog JTAG 除錯的板子,下圖四說明開發 EPS32 的流程概念。本文前半段說明的是圖四的下半邊流程,如:編譯、下載燒錄、監看輸出結果,這缺點就是無法一步一步的控制程式碼行走和設定斷點。而圖四的上半邊流程是除錯的方式,需要一塊 JTAG 除錯仿真器,圖右上方的方塊所示。

圖四:燒錄 監看 除錯 EPS32 的方塊圖

2) 接上 ESP-prog JTAG 到 ESP32 板子:JTAG 的四根接腳 (TMS、TCK、TDI、TDO) 接到 ESP32 的四根腳 (GPIO14、GPIO13、GPIO12、GPIO15)。另一邊,將 ESP-prog 接上電腦,電腦的裝置要看到兩個 "Dual RS232-HS" 接口,如果沒有看到,那代表驅動程式沒有安裝,需要下載 "Zadig" 驅動。
3) 安裝 OpenOCD 工具:如果依照前面安裝方式,在安裝 ESP-IDF 工具時,這個 OpenOCD 已經安裝進去了,我們可以輸入 "OpenOCD --version" 命令確認有沒有 OpenOCD 工具,正常情況下會返回版本號。好的,現在 ESP-prog 的 USB 已經接上電腦,另一端 JTAG 也接上 ESP32 板子,按 F1 後,上方的選單輸入 "ESP-IDF: Device configuration",彈出選項後,我們選擇 "OpenOcd Config Files",設定板子型號 (ESP-WROOM-32)。再按下 F1,上方的選單輸入 "ESP-IDF: OpenOCD Manager",輸出欄位就可以看到 OpenOCD 連線的結果,如下圖所示。

圖五:ESP-prog 透過 OpenOCD 連線後的結果

4) 斷點與除錯:當我們按下 F5 debug 後,VS Code 運行指標會停在程式碼的 app_main( ),那就代表我們成功設定好除錯環境了。可以再試著設定斷點,看看程式運行會不會停在斷點處?正如下圖所示。

圖六:除錯畫面與斷點

參考資料



留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[應用] 藍芽 BLE client/server 架構:BLE remote controller

[筆記] Visual Studio 遠端偵錯的設定步驟

[模組] 無線資料傳輸:nRF905 和 nRF24L01 (以 Arduino 為控制器)

[應用] STM32 DFU (Device Firmware Upgrade)