使用微軟Visual Studio Code編寫Arduino程式(三):ESP8266和ESP32控制板

本文將介紹在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”資料夾的內容:

“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”,並在其中存入編譯過程的暫存檔。

Posts created 483

2 thoughts on “使用微軟Visual Studio Code編寫Arduino程式(三):ESP8266和ESP32控制板

  1. 有一個我自己踩到的坑,就是開了不同專案之後,visual code會根據arduino.json去決定編譯的專案,並不會自動依照目前顯示的檔案作為要編譯的專案。

    切換專案有兩個方式,第一個是按下F1,輸入Arduino: Select Sketch指令,然後選擇專案檔案。另外更直覺的是狀態列/status bar右下角會有xxx.ino的檔案名稱,點下去後會有列表,可以選擇不同的檔案。

    兩個方式都會讓visual code自動更新arduino.json去調整要編譯的專案

發佈留言

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

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top