本文將介紹在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去調整要編譯的專案
感謝分享!