目录

基于VSCode搭建ESP-IDF开发环境

乐鑫官方提供的VSCode插件Espressif IDF实在是称不上好用。实际上,基于VSCode手动搭建的ESP-IDF的开发环境可以获得与插件几乎相同的使用体验。

安装前的准备工作

  • ESP-IDF在Windows中仅仅依赖GitPython3,其他如工具链、Cmake等工具,ESP-IDF均会自行安装并使用自己的版本。因此,在开始一切之前,请先下载GitPython3,直接选择最新版本即可。

  • 若您未安装Visual Studio Code,请前往微软官网进行下载并安装。同时,请在VSCode中安装C/C++插件

  • 在开始之前,强烈建议您同时安装Windows Terminal以提升使用PowerShell终端的体验。

获取ESP-IDF

使用Git在线获取

ESP-IDF可以在乐鑫官方的GitHub仓库中获取。对于非尝鲜的场景,强烈建议切换到一个release分支,而不是使用尚未稳定的master分支。在本文中,假定ESP-IDF的安装路径为D:\Programs\esp-idf,版本为v4.3

git clone --recursive -b release/v4.3 https://github.com/espressif/esp-idf.git

使用离线安装包安装

除了使用Git获取ESP-IDF之外,还可以使用官方提供的离线安装包来安装,方法请参照官方教程,此处不再赘述。若非特殊情况,仍建议使用Git获取,可以免去许多麻烦。

配置ESP-IDF

更改工具安装路径

除了ESP-IDF源码本身之外,为了配置及编译工程,还需要安装工具链等工具,安装这些工具的脚本已经包含在了ESP-IDF仓库中。这些工具默认将安装在用户文件夹(C:\Users\%USERNAME%\)下的.espressif目录中,需要占用超过2GB的空间。

若不希望在系统盘存放它们,可以在运行安装脚本之前,设置环境变量IDF_TOOLS_PATH为存放工具的目录。

设置环境变量

在系统设置中设置环境变量的操作请自行搜索,在此不再赘述。

除此之外,也可以通过修改PowerShell的profile.ps1文件来达到仅在PowerShell内对环境变量进行修改的效果。该文件的作用类似于Linux下的.bashrc文件,其中的命令将在每次PowerShell启动时被执行。

profile.ps1文件在用户文件夹的文档\WindowsPowerShell目录中,完整路径为C:\Users\%USERNAME%\Documents\WindowsPowerShell\profile.ps1。若WindowsPowerShell目录以及profile.ps1不存在,请手动创建它们。

powershell中设置环境变量的命令为$env:NAME=VALUE。例如,若要将存放ESP-IDF工具的目录设置为D:\Programs\esp-tools,可以向profile.ps1中加入此命令:

$env:IDF_TOOLS_PATH="D:\Programs\esp-tools"

更改ccache缓存路径

除此之外,ESP-IDF还会使用ccache来进行编译缓存以提升重新编译的速度。ccache缓存的默认路径同样在系统盘中,若希望将缓存路径更改外其他目录,可以在上述环境变量的基础上,新增CCACHE_DIR环境变量,指向新的ccache缓存路径。

$env:CCACHE_DIR="D:\Programs\ccache"

安装工具

在配置好环境变量后,进入存放ESP-IDF的路径,打开PowerShell并执行install.ps1即可进行工具的下载与安装。

可能遇到的问题
  • 若执行install.ps1时只有Installing ESP-IDF tools的提示而没有安装动作,请检查GitPython3的安装。

  • 若执行install.ps1时提示“在此系统上禁止运行脚本”,则需要在设置-更新和安全-开发者选项中允许脚本执行。

https://img.yuanze.wang/posts/esp-idf-vscode-tutorial/allow-powershell-scripts.png
允许脚本执行

配置环境并编译例程

安装完毕后,还需要设置编译工程的环境,ESP-IDF同样使用脚本来完成这一操作。在PowerShell中执行ESP-IDF目录下的export.ps1即可自动配置编译环境。

https://img.yuanze.wang/posts/esp-idf-vscode-tutorial/export-success.jpg
环境配置成功

配置完成后,在这个终端窗口内就可以编译ESP-IDF的工程了。尝试一下编译hello_world例程,是不是可以编译成功呢?

cd examples\get-started\hello_world
idf.py build

快速配置环境

在编译时,每次重新打开PowerShell都需要进入ESP-IDF的安装路径执行export.ps1来配置编译环境。为了简化操作,可以将执行脚本的命令的别名添加到前述的profile.ps1中,快速执行profile.ps1来配置环境变量并使用此变量来配置编译环境。

下面提供了一个示例,在profile.ps1中添加下述指令后,对于新打开的PowerShell窗口,只需执行idf32即可快速配置好环境。

Set-Alias -Name idf32 -Value D:\Programs\esp-idf\export.ps1

在VSCode中开发

上述操作完毕后,ESP-IDF就已经安装完毕了。接下来,在VSCode中打开项目文件夹,此处仍以esp-idf\examples\get-started\hello_world工程为例。

在VSCode内打开Powershell

Ctrl+`打开VSCode中的终端,此时终端会切换到当前项目的目录中。请检查终端是否为Powershell,若不是,请在右上角切换。

编译工程

在配置之前,首先需要对工程进行一次编译。

idf32
idf.py build

编译完毕后,编译器会自动在build路径下生成编译指令文件,该文件中包含了工程所有的头文件信息,C/C++插件可以使用这个文件中的信息来配置代码高亮及跳转功能。

技巧
此文件在CMake配置阶段生成,只要工程的CMakeLists.txt无误便可以完成配置。即使工程编译失败,该文件也可以被正确的创建。

配置C语言插件自动补全

编译指令文件生成之后,打开任意一个C语言文件,稍等一会右下角便会弹出

是否要使用compile_commands.json文件为此文件夹自动配置IntelliSense?

的提示,选是即可。之后,VSCode会弹出选项,询问要使用哪一个compile_commands.json文件来配置包含路径,请选择build/compile_commands.json,该文件为用户app的编译指令文件,另一个则为bootloader的编译指令文件。

https://img.yuanze.wang/posts/esp-idf-vscode-tutorial/configure-compile-commands.jpg
使用编译指令文件自动配置包含路径

配置完成编译指令文件后,可以发现还有一些代码出现了红色波浪线。这是因为除了IDF的包含路径之外,一些C语言的标准库,例如printf函数等,是随着编译器同时分发的,还需要配置编译器的路径才能让C/C++插件找到这些标准库的头文件。

点击VSCode右下角的C/C++配置按钮(默认状态显示的是Win32),选择编辑配置(UI),进入IntelliSense配置菜单。在编译器菜单中,输入编译器可执行文件的路径即可。

需要注意的是,编译器的路径需要根据所使用的芯片型号对应的编译器路径进行更改。对于ESP32来说,其编译器可执行文件为ESP-IDF工具路径下的tools\xtensa-esp32-elf\esp-2021r2-8.4.0\xtensa-esp32-elf\bin\xtensa-esp32-elf-gcc.exe。将该路径中的反斜杠\全部更改为正斜杠/或双反斜杠\\后,复制到VSCode设置项的输入框即可。

对于ESP32其他系列的芯片如ESP32-C3,请将编译器路径更改为对应芯片的编译器的路径。

快速配置新的工程

对于ESP32其他系列的芯片如ESP32-C3,请将编译器路径更改为对应芯片的编译器的路径。

配置完成后,在不更改编译器的安装路径的前提下,只需要复制工程路径下.vscode\c_cpp_properties.json文件到新的工程根目录中的对应位置,便可以自动完成上述配置。

下面提供一个已经配置完毕的c_cpp_properties.json文件,只需要更改编译器路径compilerPath并放置到.vscode\下即可直接被VSCode读取,免去前述的配置步骤。

{
    "configurations": [
        {
            "name": "ESP32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "cStandard": "c11",
            "compilerPath": "D:/Programs/esp-tools/tools/xtensa-esp32-elf/esp-2021r2-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

实用操作

完全配置完毕后,便得到了一个可以开发ESP32项目的VSCode环境。只要使用VSCode打开项目文件夹,便可以使用代码高亮以及代码补全功能,并且在嵌入式终端中可以使用完整的idf.py工具。

idf.py工具使用技巧

idf.py工具的指令支持同时输入多个,若输入多个指令,idf.py将会按照正确的顺序执行它们。对于一个新打开的工程,可以使用

idf.py -b 921600 flash monitor

来启动idf.py工具,此时该工具将会编译并使用921600波特率烧录,在烧录完毕后会自动启动串口监视器。按下Ctrl+]可以退出监视器。

在终端中监视器保持打开的时候,若对代码做出了编辑,可以保存代码后,在终端窗口中按下Ctrl+T激活菜单后,再按Ctrl+A一键重新编译、重新烧录app并继续进行串口监视,也可以按下Ctrl+R来复位芯片。

https://img.yuanze.wang/posts/esp-idf-vscode-tutorial/develop-esp32-in-vsode.jpg
在VSCode中进行ESP32开发

在VSCode内置终端中运行menuconfig
若需要在VSCode内置终端中运行menuconfig,则需要注意由于VSCode默认的按键映射的问题,方向键在menuconfig中是失效的,只能使用vim风格的H/J/K/L键来进行←/↓/↑/→的导航操作。

更新ESP-IDF

若想更新ESP-IDF,进入安装路径,打开Git Bash,执行下述操作即可。

git pull
git submodule update --recursive

更新完成后,在编译工程前,请先完整清理工程。

idf.py fullclean build

进阶:添加ESP-ADF支持

ESP-ADF是作为ESP-IDF的扩充包发行的。按照前文配置好ESP-IDF并获取ESP-ADF后,只需要将ADF_PATH加入环境变量中即可使用ESP-ADF提供的扩充功能。

此处使用PowerShell的profile文件来添加环境变量,完整配置后的profile.ps1文件内容如下。

$env:IDF_TOOLS_PATH="D:\Programs\esp-tools"
$env:ADF_PATH="D:\Programs\esp-adf"
D:\Programs\esp-idf\export.ps1

附录:网络访问问题

由于众所周知的原因,在中国大陆地区访问Github以及下载工具会比较困难。若您在本地已经设置好了网络代理工具,可以在Powershell终端中执行

$env:HTTPS_PROXY="http://127.0.0.1:7890"

来应用它。此处的端口号7890请根据您的代理工具的实际端口进行更改。