在前一篇「親手打造任天堂遊樂器」文章中提到了跳脫 Arduino IDE 的舒適圈,使用官方的 ESP32 SDK(ESP-IDF)開發工具來製作模擬器韌體的方法。然而面對動輒成千上萬行程式碼,分布在數百甚至上千個檔案,若想單靠基本的文字編輯搭配官方 SDK 來進行開發,恐怕得先練就一番過人的毅力才行。最好的方式是在官方 SDK 的基礎上建置出友善的開發與編譯環境,這篇文章在說明如何使用 Eclipse 這套強大、免費,但設定有點複雜的 IDE 工具,整合官方的 ESP-IDF SDK 進行 ESP32 韌體的開發,並以網路上的 C++ 藍芽功能為操作範例。
以後不一定常用到,怕自己忘記所以趕緊寫下來做紀錄。
一樣是 Ubuntu 作業系統為例,前提是必須先依照前一篇文章「親手打造任天堂遊樂器」內容說明的方式,建置出可用 make 指令編譯韌體的 Toolchain 與 ESP-IDF 設置。條件如下:
- 開機後打開終端機,進入專案目錄後,直接執行 make 可完整跑完編譯動作。
- 執行 make menuconfig 可呼叫編譯設定畫面。
- ESP-IDF 最好是 v2.1 版,Toolchain 最好是 xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0(如前一篇文章所示。)
若以上兩個條件沒有達到,那麼做出來的 Eclipse IDE 開發環境就會有問題。Windows 版本可參考這裏。
一、安裝 Eclipse IDE
1. 下載 Eclipse 和 JAVA SE
網路安裝包:http://www.eclipse.org/downloads/
離線安裝包:http://www.eclipse.org/downloads/eclipse-packages/,選 C/C++ 這一項。
兩者擇一即可。而 Eclipse 依賴 JAVA 才能運作,所以也得下載安裝 JAVA。和 Eclipse 一樣都有對應不同作業系統的版本。
Oracle JAVA SE:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. 安裝 Eclipse 與 JAVA SE
將下載的 Eclipse 解壓縮到 ~/eclipse 目錄下。再將 JAVA 解壓縮到 ~/eclipse/jre 目錄下,安裝 Eclipse 的工作就完成了。相當簡單。
3. 編輯 ICON
gedit .local/share/applications/eclipse.desktop
然後把下面的內容貼上
[Desktop Entry]
Name=Eclipse
Type=Application
Exec=/home/[帳號名稱]/eclipse/eclipse
Terminal=false
Icon=/home/[帳號名稱]/eclipse/icon.xpm
Path=/home/[帳號名稱]/eclipse
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE;
Name[en]=Eclipse
登出再登入後,桌面啟動欄就會出現 ICON(紅色粗體字要改成自己的帳號名字)。點 ICON 可啟動程式表示安裝完成。
二、專案環境建置
Toolchain / ESP32-IDF / Eclipse IDE 都安裝完成了,接下來是操作透過 ESP32 韌體開發專案檔的設定,把這三個工具串連起來。
1. 下載 ESP-IDF 基本範本檔專案 (esp-idf-template -> esp32test)
cd ~/esp
git clone https://github.com/espressif/esp-idf-template.git esp32test
cd esp32test
然後一定要執行一次
make menuconfig
「make menuconfig」指令最終會產生 build/include/sdkconfig.h,然而 Eclipse IDE 並沒有把這個動作整合進來,但是在 Eclipse 開發環境下某些程式代碼又必須連結 sdkconfig.h 參數檔,所以在目前使用 Eclipse 開發 ESP32 韌體的話,還是得 Eclipse <-> make menuconfig 兩者之間交互使用。
待會要用到的 ESP32 藍芽功能範例也是依賴 sdkconfig.h ,少個這個檔案會影響 Eclipse 的即時偵錯功能。先前就是沒注意這個現象,導致 make clean 之後少了 sdkconfig.h 檔,專案在 Eclipse 下出現大量錯誤訊息而卡關多日。
執行 make menuconfig 之後出現 ESP-IDF 的設定畫面,以這篇文章的例子來說,需用到藍芽功能,所以到 Component -> Bluetooth (NEW) 把藍芽打開。
打開藍芽的動作很重要,不然待會用的藍芽範例會編譯失敗!
其他部分例如 SPI 的速度、USB 埠...等,請參考前一篇文章「親手打造任天堂遊樂器」一文,依照個人需求自行設定。設定完後執行一次 make 指令,ㄧ定要能編譯成功,接著再回到 Eclipse。
2. 下載 C++ 藍芽範例
執行以下指令:
cd ~/esp
git clone https://github.com/nkolban/esp32-snippets.git
cd esp32-snippets
git checkout 8c11102b25379a2675fcc16d1954c19926fbf807
3. 將 C++ 藍芽範例複製到 ESP-IDF 範本檔專案 (esp32test):
- esp32test 底下建立一個目錄 components
- 藍芽範本檔 esp32-snippets/cpp_utils 複製到 esp32test/component
- esp32-snippets/cpp_utils/tests/BLE Tests/*.cpp 複製到 esp32/main/底下
4. 執行 Eclipse -> 預設 workspace [launch],然後 File -> New -> Makefile Project with Existing Code
接著選擇剛剛下載的範例檔,按 Flinish 。
5. 專案有幾個地方需要設定,進入設定的方式:
點擊在專案上(反白)--> Project --->Properties
或是在專案上按滑鼠右鍵 --> 最下方的 Properties
有幾個地方要設定:
- C/C++ General / Paths and Symbols,選 Import Settings ,檔案選 ~/esp/esp32-snippets/eclipse/c_includes.xml,
視窗會關閉,左邊專案的 Includes 會出現一串目錄名稱。再執行一次專案 -> Properties -> C/C++ General / Paths and Symbols 查看是否有設定完成。
- C/C++ Build:Use default build command 取消打勾。
- C/C++ Build/Environment:新增三個變數:
- BATCH_BUILD = 1
- PATH = $PATH:$HOME/esp/xtensa-esp32-elf/bin (意思即與環境變數一樣)
- IDF_PATH = ~/esp/esp-idf
在輸入 PATH 與 IDF_PATH 有個小技巧:變數跟值填入相同,OK 存檔會帶入實際值:[變數],再叫出來編輯刪掉最後的變數改成正確即可。
- C/C++ General Preprocessor Include:CDT GCC Built-in Compilier Settings 打勾, Command 最前面的 ${COMMAND} 改成 xtensa-esp32-elf-gcc。
6. 最後整理一下專案的檔案,把複製過來後多餘的檔案刪掉
- 刪掉 main/main.c
- 刪掉 components/cpp_utils 底下的 BLE XML 與 tests 兩個目錄
7. 專案右鍵 -> Refresh,專案右鍵 -> Index -> Rebuild,專案右鍵 Build Targets -> create...,填入 all ->OK。
8. 在 all 點兩下即可編譯。
三、藍芽功能範例
main.cpp 內的 app_main 是韌體程式的進入點,
要切換不同的藍芽功能只需解除該行的標記即可。上述設定若正確的話,IDE 的變數名稱會反綠,滑鼠移過去也會自動彈出對應的物件宣告內容,相當的方便。
Build Targets 新增一個 flash 就能進行編譯後燒錄韌體的動作。燒錄的速度與埠號位址則必須透過 make menuconfig 才能設定。
至於藍芽範例的說明,請參考原作者的教學影片
留言列表