基于VSCode搭建ESP-IDF开发环境
乐鑫官方提供的VSCode插件Espressif IDF实在是称不上好用。实际上,基于VSCode手动搭建的ESP-IDF的开发环境可以获得与插件几乎相同的使用体验。
安装前的准备工作
-
ESP-IDF
在Windows中仅仅依赖Git
与Python3
,其他如工具链、Cmake
等工具,ESP-IDF
均会自行安装并使用自己的版本。因此,在开始一切之前,请先下载Git与Python3,直接选择最新版本即可。 -
若您未安装
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
的提示而没有安装动作,请检查Git
与Python3
的安装。 -
若执行
install.ps1
时提示“在此系统上禁止运行脚本”,则需要在设置-更新和安全-开发者选项中允许脚本执行。
配置环境并编译例程
安装完毕后,还需要设置编译工程的环境,ESP-IDF同样使用脚本来完成这一操作。在PowerShell中执行ESP-IDF目录下的export.ps1
即可自动配置编译环境。
配置完成后,在这个终端窗口内就可以编译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
的编译指令文件。
配置完成编译指令文件后,可以发现还有一些代码出现了红色波浪线。这是因为除了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来复位芯片。
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
请根据您的代理工具的实际端口进行更改。