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 才能設定。

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

 

arrow
arrow

    benjenq 發表在 痞客邦 留言(0) 人氣()