本文將介紹在VS Code中編輯ESP8266和ESP32控制板的方法,在此之前,Arduino IDE必須先安裝好對應的開發工具軟體。
安裝ESP32控制板的開發環境
透過Arduino官方IDE的「控制板管理員」,可新增非官方控制板的開發工具(編譯和上傳軟體)。以新增「ESP32控制板」的支援為例,請先在Arduino IDE的主功能表,選擇「檔案→偏好設定」,點擊「額外的開發板管理員網址」欄位右邊的按鈕:

輸入ESP32控制板的「開發板管理網址」:https://dl.espressif.com/dl/package_esp32_index.json(若要查閱開發板管理員的網址,請點擊此面板底下的網址)。

按下「確定」鈕關閉面板後,選擇「工具→開發板→開發板管理員」,搜尋“esp32”關鍵字,再點擊「安裝」搜尋到的工具軟體:

等它下載完畢,Arduino IDE就具備開發ESP32控制板的功能了。在筆者的電腦上,新增的工具軟體都存放在“C:\Users\用戶名稱\AppData\Local\Arduino15\”路徑底下。
編輯VS Code的c_cpp_propertise.json檔
如果Arduino的程式資料夾裡面已經有“.vscode”資料夾和.json設置檔,就不需要在VS Code中執行初始化(initialize)命令,直接修改c_cpp_propertise.json即可。
底下是我的ESP32設定內容,「編譯器路徑(compilerPath)」屬性不用填寫,故略。
{
"name": "ESP32",
"includePath": [
"${workspaceFolder}/**",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.2/cores/esp32/**",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.2/libraries/**",
"C:/Users/${env:Username}/Documents/Arduino/libraries/**"
],
"defines": [
"USBCON",
"ARDUINO=10809"
],
"forcedInclude": [
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.2/variants/d32/"
],
"intelliSenseMode": "clang-x64",
"cStandard": "c11",
"cppStandard": "c++17"
}
上面的“includePath”(引用路徑)屬性值,要填入ESP32專屬的程式庫路徑,“forcedInclude”(強制引用)屬性,也要填入對應的控制板接腳的設置檔(pins_arduino.h)路徑。
底下是安裝ESP8266和ESP32控制板工具之後,“packages”資料夾的內容:

不同控制板的設定內容可以寫在同一個c_cpp_propertise.json檔,這個設定內容包含Arduino Uno, Wemos D1 mini (ESP8266)和ESP32三個控制板:
{
"configurations": [
{
"name": "Arduino Uno",
"includePath": [
"${workspaceFolder}/**",
"C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino",
"C:/Program Files (x86)/Arduino/tools/**",
"C:/Program Files (x86)/Arduino/hardware/arduino/avr/**",
"C:/Program Files (x86)/Arduino/hardware/tools/**",
"C:/Program Files (x86)/Arduino/libraries/**",
"C:/Users/${env:Username}/Documents/Arduino/libraries/**"
],
"forcedInclude": [
"C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino/Arduino.h"
],
"defines": [
"USBCON",
"ARDUINO=10809"
],
"intelliSenseMode": "clang-x64",
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "Wemos D1 Mini",
"includePath": [
"${workspaceFolder}/**",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp8266/tools/**",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.4.2/**",
"C:/Users/${env:Username}/Documents/Arduino/libraries/**"
],
"defines": [
"USBCON",
"ARDUINO=10809"
],
"forcedInclude": [
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/Arduino.h",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.4.2/variants/d1_mini/pins_arduino.h"
],
"intelliSenseMode": "clang-x64",
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "ESP32",
"includePath": [
"${workspaceFolder}/**",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.2/cores/esp32/**",
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.2/libraries/**",
"C:/Users/${env:Username}/Documents/Arduino/libraries/**"
],
"defines": [
"USBCON",
"ARDUINO=10809"
],
"forcedInclude": [
"C:/Users/${env:Username}/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.2/variants/d32/"
],
"intelliSenseMode": "clang-x64",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
如果你的ESP8266或ESP32控制板的類型或工具程式版本和筆者不一樣,請自行修改上面的程式庫路徑。
修改控制板類型
更換控制板,“.vscode”資料夾裡的arduino.json也要修改,但是我們大多無須手動編輯它。
按下F1功能鍵,在「命令面板」中輸入“Arduino: Change Board Type”(更改控制板類型)命令,選擇新的控制板類型,此例為Wemos D1 mini板:

VS Code將自動修改arduino.json檔。
c_cpp_propertise.json裡面包含三個控制板的設置,請點擊VS Code程式編輯器視窗右下角的「設置名稱」(此例為“Arduino Uno”):

VS Code將列舉設置檔裡面的全部設置名稱,請從中選擇的正確的控制板選項(此例為”Wemos D1 mini”):

如此,執行「驗證」或「上傳」程式碼時,VS Code才能引用到正確的程式庫和工具軟體。
設定暫存編譯程式的資料夾
把Wemos D1 mini控制板接上電腦時,VS Code出現底下的提示,告訴我目前連接的控制板跟指定的不同,是否要修改,我按下“Yes”。

按下「驗證」鈕編譯程式成功,但「輸出」面板出現如下的訊息,提醒我們要設定一個暫存編譯程式檔的路徑,否則每次驗證程式都會多花一些時間。

假設我們將此暫存資料夾命名為“build_temp”,和Arduino程式專案資料夾放在同一個路徑,我們不需要手動新增暫存資料夾。

請自行修改“.vscode”裡的arduino.json,在其中加入“output”: “../build_temp”欄位,“../”代表「目前所在位置的上一層」。

存檔之後再重新編譯程式碼,VS Code將自動新增暫存資料夾“build_temp”,並在其中存入編譯過程的暫存檔。

有一個我自己踩到的坑,就是開了不同專案之後,visual code會根據arduino.json去決定編譯的專案,並不會自動依照目前顯示的檔案作為要編譯的專案。
切換專案有兩個方式,第一個是按下F1,輸入Arduino: Select Sketch指令,然後選擇專案檔案。另外更直覺的是狀態列/status bar右下角會有xxx.ino的檔案名稱,點下去後會有列表,可以選擇不同的檔案。
兩個方式都會讓visual code自動更新arduino.json去調整要編譯的專案
感謝分享!