esp-idf 的 vscode 编译环境搭建
手动搭建 esp32 的 vscode 开发环境,虽然 vscode 有 esp-idf 的插件,但是有些卡顿,用起来没有终端灵活
v4.4 官方文档:https://docs.espressif.com/projects/esp-idf/zh_CN/v4.4
🌐 安装 vscode、python3、git
- vscode: https://code.visualstudio.com/
- python3: https://www.python.org/
- git: https://git-scm.com/
🔽 获取 esp-idf
- v4.4
git clone -b v4.4 --recursive https://github.com/espressif/esp-idf.git
- 如果需要切换版本,可以使用以下命令,避免重新下载,
-b vx.x.x
代表版本号的选择
git fetch
git checkout vx.x.x
git submodule update --init --recursive
🔑 安装 esp-idf
如果不想安装到C盘,可以安装前设置 IDF 工具路径环境变量IDF_TOOLS_PATH
(每次都重新设置), powershell 可以通过profile.ps1
文件来实现自动加载
- powershell
$env:IDF_TOOLS_PATH="F:\MyEnv\esp_env\idf_env"
- cmd
set IDF_TOOLS_PATH=F:\MyEnv\esp_env\idf_env
powershell
如果不能运行 .ps1 脚本:管理员运行命令set-ExecutionPolicy RemoteSigned
即可。
运行
install.ps1
或install.bat
安装即可- powershell
./install.ps1
- cmd
./install.bat
🔨 调用 esp-idf ( 绝对路径 )
- powershell
F:\MyEnv\esp_env\esp-idf-v4.4\export.ps1
- cmd
F:\MyEnv\esp_env\esp-idf-v4.4\export.bat
- 写一个自定义的启动脚本
espidf.ps1
$env:IDF_TOOLS_PATH="F:\MyEnv\esp_env\idf_env"
F:\MyEnv\esp_env\esp-idf-v4.4\export.ps1
- 调用结果
- 编译一个工程来测试
cd $env:IDF_PATH/examples/get-started/hello_world
idf.py build
💎 vscode 调用 ( 编写工作区文件 )
🔱 默认终端
- 在工作区文件
Proj.code-workspace
添加一个自定义终端
{
"terminal.integrated.profiles.windows": {
"ESP-IDF": {
"source": "PowerShell",
"icon": "terminal",
"args": [
"-noe",
"-nologo",
"espidf.ps1"
]
}
}
}
- 设置为默认终端
{
"terminal.integrated.defaultProfile.windows": "ESP-IDF",
}
💥 自动补全
由于 esp-idf 使用的编译器属于
gcc
类编译器,在 vscode 中只需配置编译器路径、工作区目录、和 cmake 导出的compile_commands.json
即可
根据 esp-idf 编译器路径可知编译器位于 $env:IDF_TOOLS_PATH\编译器名字\版本\编译器名字\编译器名字-gcc.exe
gcc 路径 ( 切换编译器时只需切换
C_Cpp.default.compilerPath
配置项即可 ){ "idf.path" : "F:/MyEnv/esp_env/esp-idf-v4.4", "idf.tools" : "F:/MyEnv/esp_env/idf_env/tools", "idf.gcc.varsion" : "esp-2021r1-8.4.0", "idf.patch.version" : "esp-2021r2-patch2-8.4.0", "idf.tools.esp32" : "${config:idf.tools}/xtensa-esp32-elf", "idf.tools.esp32rv" : "${config:idf.tools}/riscv32-esp-elf", "idf.tools.esp32s2" : "${config:idf.tools}/xtensa-esp32s2-elf", "idf.tools.esp32s3" : "${config:idf.tools}/xtensa-esp32s3-elf", "idf.gcc.esp32" : "${config:idf.tools.esp32}/${config:idf.patch.version}/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe", "idf.gcc.esp32rv" : "${config:idf.tools.esp32rv}/${config:idf.patch.version}/riscv32-esp-elf/bin/riscv32-esp-elf-gcc.exe", "idf.gcc.esp32s2" : "${config:idf.tools.esp32s2}/${config:idf.patch.version}/xtensa-esp32s2-elf/bin/xtensa-esp32s2-elf-gcc.exe", "idf.gcc.esp32s3" : "${config:idf.tools.esp32s3}/${config:idf.patch.version}/xtensa-esp32s3-elf/bin/xtensa-esp32s3-elf-gcc.exe", "C_Cpp.default.compilerPath": "${config:idf.gcc.esp32}", }
cmake 导出文件
{ "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json", }
工作区目录
{ "C_Cpp.default.includePath": [ "${workspaceFolder}/**" ], }
Proj.code-workspace
总配置
{
"folders": [
{
"path": "."
}
],
"settings": {
/* 文件排除 */
"files.exclude": {
// 文件夹
"**/.settings": true,
"**/Debug": true,
"**/Objects": true,
"**/objects": true,
"**/Listings": true,
"**/listings": true,
"**/Output": true,
"**/output": true,
// 文件
"**/*.map":true,
"**/.config*":true,
"**/.project*":true,
"**/.cproject*":true,
},
/* 编码 */
"files.encoding": "utf8",
/* 字体 */
"editor.fontFamily": "Consolas, OPPOSans",
/* 自定义 Shell */
"terminal.integrated.profiles.windows": {
"ESP-IDF": {
"source": "PowerShell",
"icon": "terminal",
"args": [
"-noe",
"-nologo",
"espidf.ps1"
]
}
},
"C_Cpp.errorSquiggles": "Disabled",
/* 默认 Shell */
"terminal.integrated.defaultProfile.windows": "ESP-IDF",
/* 代码风格 */
"C_Cpp.clang_format_style": "{ BasedOnStyle: Google, IndentWidth: 4 }",
/* 补全模式 */
"C_Cpp.default.intelliSenseMode": "gcc-x86",
/* c/cpp 标准 */
"C_Cpp.default.cppStandard": "c++14",
"C_Cpp.default.cStandard": "c99",
/* c/cpp 宏 */
"C_Cpp.default.defines": [],
/*//!自定义编译器路径 ( 实现补全时 gcc 类编译器只需指定编译器路径与工程目录的包含 ) */
"idf.path" : "F:/MyEnv/esp_env/esp-idf-v4.4",
"idf.tools" : "F:/MyEnv/esp_env/idf_env/tools",
"idf.gcc.varsion" : "esp-2021r1-8.4.0",
"idf.patch.version" : "esp-2021r2-patch2-8.4.0",
"idf.tools.esp32" : "${config:idf.tools}/xtensa-esp32-elf",
"idf.tools.esp32rv" : "${config:idf.tools}/riscv32-esp-elf",
"idf.tools.esp32s2" : "${config:idf.tools}/xtensa-esp32s2-elf",
"idf.tools.esp32s3" : "${config:idf.tools}/xtensa-esp32s3-elf",
"idf.gcc.esp32" : "${config:idf.tools.esp32}/${config:idf.patch.version}/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe",
"idf.gcc.esp32rv" : "${config:idf.tools.esp32rv}/${config:idf.patch.version}/riscv32-esp-elf/bin/riscv32-esp-elf-gcc.exe",
"idf.gcc.esp32s2" : "${config:idf.tools.esp32s2}/${config:idf.patch.version}/xtensa-esp32s2-elf/bin/xtensa-esp32s2-elf-gcc.exe",
"idf.gcc.esp32s3" : "${config:idf.tools.esp32s3}/${config:idf.patch.version}/xtensa-esp32s3-elf/bin/xtensa-esp32s3-elf-gcc.exe",
"C_Cpp.default.compilerPath": "${config:idf.gcc.esp32}",
/* c/cpp 包含 */
"C_Cpp.default.includePath": [
"${workspaceFolder}/**"
],
"C_Cpp.default.forcedInclude": [
],
"C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json",
},
}
- 配置完成的样子
编写一键编译脚本
build.ps1
echo "" echo "idf.py.exe build" echo "" idf.py.exe build echo "" echo "idf.py.exe --port com24 --baud 921600 flash" echo "" idf.py.exe --port com24 --baud 921600 flash echo "" echo "idf.py.exe --port com24 --monitor-baud 921600 monitor" echo "" idf.py.exe --port com24 --baud 921600 monitor
调用即可