【碼農】Eclipse 與 ESP-IDF 整合開發

    ESP32-D0WDQ6_322016_P6W255

    在前一篇「親手打造任天堂遊樂器」文章中提到了跳脫 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 的工作就完成了。相當簡單。

    螢幕快照 2017-10-10 上午4.08.50

    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 可啟動程式表示安裝完成。

    螢幕快照 2017-10-10 上午4.21.56

    二、專案環境建置

    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) 把藍芽打開。

    螢幕快照 2017-10-10 上午4.31.29

    打開藍芽的動作很重要,不然待會用的藍芽範例會編譯失敗!

    其他部分例如 SPI 的速度、USB 埠…等,請參考前一篇文章「親手打造任天堂遊樂器」一文,依照個人需求自行設定。設定完後執行一次 make 指令,ㄧ定要能編譯成功,接著再回到 Eclipse。

    2. 下載 C++ 藍芽範例

    執行以下指令:

    cd ~/esp
    git clone https://github.com/nkolban/esp32-snippets.git
    cd esp32-snippets
    git checkout 8c11102b25379a2675fcc16d1954c19926fbf807

    螢幕快照 2017-10-10 上午4.55.50  

    3. 將 C++ 藍芽範例複製到 ESP-IDF 範本檔專案 (esp32test):

    • esp32test 底下建立一個目錄 components
    • 藍芽範本檔 esp32-snippets/cpp_utils 複製到 esp32test/component
    • esp32-snippets/cpp_utils/tests/BLE Tests/*.cpp 複製到 esp32/main/底下

    螢幕快照 2017-10-10 上午5.05.33

    螢幕快照 2017-10-10 上午5.06.03

     

    4. 執行 Eclipse -> 預設 workspace [launch],然後 File -> New -> Makefile Project with Existing Code

    螢幕快照 2017-10-10 上午4.49.11

    接著選擇剛剛下載的範例檔,按 Flinish 。

    螢幕快照 2017-10-10 上午4.50.51

    5. 專案有幾個地方需要設定,進入設定的方式:

    點擊在專案上(反白)–> Project —>Properties

    螢幕快照 2017-10-10 上午5.09.52

    或是在專案上按滑鼠右鍵 –> 最下方的 Properties

    有幾個地方要設定:

    • C/C++ General / Paths and Symbols,選 Import Settings ,檔案選 ~/esp/esp32-snippets/eclipse/c_includes.xml,

    螢幕快照 2017-10-10 上午5.16.11

    視窗會關閉,左邊專案的 Includes 會出現一串目錄名稱。再執行一次專案 -> Properties -> C/C++ General / Paths and Symbols 查看是否有設定完成。

    螢幕快照 2017-10-10 上午5.19.34

    • 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 存檔會帶入實際值:[變數],再叫出來編輯刪掉最後的變數改成正確即可。

    螢幕快照 2017-10-10 上午5.24.02  

     

    • C/C++ General Preprocessor Include:CDT GCC Built-in Compilier Settings 打勾, Command 最前面的 ${COMMAND} 改成 xtensa-esp32-elf-gcc。

    螢幕快照 2017-10-10 上午5.32.27

    6. 最後整理一下專案的檔案,把複製過來後多餘的檔案刪掉

    • 刪掉 main/main.c
    • 刪掉 components/cpp_utils 底下的 BLE XML 與  tests 兩個目錄

    7. 專案右鍵 -> Refresh,專案右鍵 -> Index -> Rebuild,專案右鍵 Build Targets -> create…,填入 all ->OK。

    螢幕快照 2017-10-10 上午5.41.43

    8. 在 all 點兩下即可編譯。

    三、藍芽功能範例

    main.cpp 內的 app_main 是韌體程式的進入點,

    螢幕快照 2017-10-10 上午5.46.12  

    要切換不同的藍芽功能只需解除該行的標記即可。上述設定若正確的話,IDE 的變數名稱會反綠,滑鼠移過去也會自動彈出對應的物件宣告內容,相當的方便。

    螢幕快照 2017-10-10 上午5.47.38

    Build Targets 新增一個 flash 就能進行編譯後燒錄韌體的動作。燒錄的速度與埠號位址則必須透過 make menuconfig 才能設定。

    至於藍芽範例的說明,請參考原作者的教學影片

     

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *