ESP-IDF教程1 开发环境
1、开发环境
对于 ESP32 系列芯片的开发环境主要有如下几种方式:
- ESP-IDF(Espressif IoT Development Framework)
- Arduino
- PlatformIO
ESP-IDF 是 Espressif 官方推出的开发框架,本系列教程将围绕 ESP-IDF 开发环境进行,其实际开发方式主要有如下几种:
- CMD
- IDE
- VS Code + ESP-IDF 插件
- Espressif IDE
CMD 的方式无图形化界面,通过 ESP-IDF 提供的 python 脚本进行编译、烧录等操作,比如:
- 使用
idf.py build命令编译工程 - 使用
idf.py -p COM8 flash monitor命令通过指定的 COM8 串口向芯片 FLASH 中烧录程序
CMD 的方式对新手不太友好,因此本系列教程主要使用 IDE 的方式进行开发。
1.1、VS Code + ESP-IDF 插件
- 下载 VS Code,VS Code 安装较为简单,一路下一步直到安装即可。
- 给 VS Code 配置 ESP-IDF 扩展
打开 VS Code -> 单击左侧扩展(Ctrl+Shift+X) -> 搜索 “ESP-IDF” -> 单击 “安装”

-> 打开安装好的 ESP-IDF 扩展 -> 在左侧列表 “Advanced" 中单击第一个配置 ESP-IDF 扩展 -> 选择 “EXPRESS” 安装模式

-> 选择下载服务器 -> ESP-IDF 版本 -> ESP-IDF 库路径 -> ESP-IDF 工具路径 -> 安装

-> 等待安装完成(漫长等待.............)

-> 最后安装一个中文扩展 -> 重启 VS Code -> 配置完成。

1.2、Espressif-IDE
下载 Espressif-IDE,下载第一个 Windows 平台下的通用在线安装助手

-> 下一步 -> 下一步 -> 下一步



-> 选择要安装的 ESP-IDF 版本,目前最新为 v5.4.1 -> 选择 ESP-IDF 安装路径

-> 选择 ESP-IDF Tools 安装路径

-> 勾选 Espressif-IDE -> 下一步 -> 安装


-> 中间弹出的驱动下载框点击确定即可 -> 完成


双击桌面上的 Espressif-IDE 打开软件,选择一个工作空间打开软件,至此安装成功

2、新建项目
2.1、VS Code + ESP-IDF 插件
VS Code 查看 -> 命令面板(Ctrl+Shift+P) -> ESP-IDF: 新建项目

-> 使用 ESP-IDF

-> 设置新项目的名称、路径、正确的板卡和 COM 口 -> 单击右下角 “选择模板” 按钮

-> 选择 “template-app” 模板 -> 创建工程 -> 单击创建成功消息框的 “Yes” 按钮或者自行打开设置的工程路径下的项目

在页面最下方的工具栏上选择要使用的端口,设置正确的乐鑫设备目标。
然后单击 “构建按钮” 编译整个项目,如果编译成功将出现内存类型使用汇总表,至此环境搭建完成。

2.2、Espressif-IDE
关闭欢迎页面 -> 创建一个新的乐鑫 IDF 项目 -> 使用其中一个模板创建项目 -> 选择 ”hello_world“ 项目 -> Finish

-> 单击上方工具栏设备旁边的 ⚙ 修改为合适的 ESP 目标(IDF 目标、开发板和串口号)-> Finish

-> 单击上方工具栏中的 编译整个项目,笔者出现如下 CMake 错误:
CMake Error at D:/soft/Espressif-IDE-ESP-IDF/tools/cmake/gdbinit.cmake:40 (file):
file FILE([TO_CMAKE_PATH|TO_NATIVE_PATH] path result) must be called with
exactly three arguments.
搜索发现 GitHub 上有人提交类似 Issues ,找到最后解决方法如下:
注释掉 D:/soft/Espressif-IDE-ESP-IDF/tools/cmake/gdbinit.cmake 文件中第 33、34 和 40 行

-> 再次构建整个项目 -> 将程序烧录至目标设备
如果构建成功将出现内存类型使用汇总表,烧录成功后将自动打开串口终端,至此环境搭建完成。


3、项目结构
以 VS Code 中搭建的 template-app 项目举例说明, template-app 项目是一个空的模板工程,主要包含以下文件:
- 1_empty
- .devcontainer : 容器,常与远程开发相关,可删除
- .vscode : VS Code 编辑器配置文件
- build : 构建项目后才会出现的目录,存放中间文件和最终产物,可删除
- main
- CMakeLists.txt : CMake 配置文件,告诉 CMake 构建系统如何编译和链接项目
- main.c : 项目的主要源代码文件
- .gitignore : 该文件用于指定 Git 在版本控制中忽略的文件或文件夹,可删除
- CMakeLists.txt : 顶层 CMake
- README.md : 项目说明文件,可以修改为自己的项目说明,可删除
- sdkconfig : SDK 配置文件
- sdkconfig.old : SDK 旧配置文件,方便回退上一个配置,可删除
开发者在开发简单项目时可以直接在 “main.c” 中编程,但后续增加项目难度时不可避免地需要使用某些驱动库,因此可以在项目中增加 “components” 文件夹专门用于放置第三方的驱动组件
由于 ESP-IDF 依靠 CMake 管理编译和链接项目,因此还需要对增加的驱动组件添加底层 CMake 文件,使其能编译进整个项目中,删除不必要的文件,最终空的模板项目文件目录如下:
- 1_empty
- .vscode
- components
- xxx
- xxx.c
- xxx.h
- CMakeLists.txt
- ......
- xxx
- main
- CMakeLists.txt
- main.c
- CMakeLists.txt
- sdkconfig
"components" 文件夹中的各个组件的底层 CMake 文件内容应该如下所示:
idf_component_register(SRCS "xxx.c"
INCLUDE_DIRS "."
# 如果组件需要 ESP 驱动库支持,请添加如下语句
REQUIRES driver)
4、项目操作
主要是对 ESP-IDF 扩展在 VS Code 最下方工具栏上添加的操作按键进行说明,某些次要项已省略,按照从左向右的顺序依次为:
- ...
- :选择当前项目文件夹
- ESP-IDF 版本
- :选择烧录方式
- 端口
- 设备目标
- ⚙:SDK 配置编辑器(menuconfig)
- ️:彻底清理整个项目的构建
- :构建整个项目
- :烧录程序
- ️:串口终端监视器
- 调试
- :++️
- ESP-IDF 终端
- ...
- 错误和警告数量
- ...
5、项目配置
项目配置有如下两种方式:
- SDK 配置编辑器
- menuconfig
SDK 配置编辑器进入方式有如下两种:
- VS Code 查看 -> 命令面板(Ctrl+Shift+P)-> 搜索 “ESP-IDF: SDK 配置编辑器” -> 打开后找到上方的搜索框
- 单击 VS Code 页面下方工具栏的 ”齿轮“ 按钮打开 SDK 配置编辑器(menuconfig)-> 打开后找到上方的搜索框
menuconfig 进入方式如下:
- 单击 VS Code 页面下方工具栏的 ”打开 ESP-IDF“ 终端 -> 输入
idf.py menuconfig启动图形化配置页面 -> 输入/进入搜索模式
以下内容仅点到为止,更多配置请自行浏览
5.1、CPU 频率
搜索 CPU_FREQ 配置 CPU 频率
5.2、FLASH 相关
搜索 “FLASH”
找到 FLASHMODE 配置 FLASH SPI 模式
找到 FLASHFREQ 配置 FLASH SPI 速度
找到 FLASHSIZE 配置 FLASH 大小
5.3、Partition Table 分区表
搜索 “PARTITION_TABLE“ 配置分区表
分区表用来对 ESP32 外部 SPI FALSH 内存进行区域划分,不同区域存储不同的数据,有如下几种类型:
- Single factory app, no OTA
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 24K,
phy_init, data, phy, 0xf000, 4K,
factory, app, factory, 0x10000, 1M,
- Single factory app (large), no OTA
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 24K,
phy_init, data, phy, 0xf000, 4K,
factory, app, factory, 0x10000, 1500K,
- Factory app, two OTA definitions
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 16K,
otadata, data, ota, 0xd000, 8K,
phy_init, data, phy, 0xf000, 4K,
factory, app, factory, 0x10000, 1M,
ota_0, app, ota_0, 0x110000, 1M,
ota_1, app, ota_1, 0x210000, 1M,
- Two large size OTA partitions
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 24K,
otadata, data, ota, 0xf000, 8K,
phy_init, data, phy, 0x11000, 4K,
ota_0, app, ota_0, 0x20000, 1700K,
ota_1, app, ota_1, 0x1d0000, 1700K,
以上几种类型均为预设类型,选择其中任意一项,保存并重新构建项目后,可以在 ESP-IDF 终端中输入 idf.py partition-table 查看对应的分区具体详情
- Custom partition table CSV
启用自定义分区表后,可以通过 ESP-IDF 提供的分区表编辑器进行编辑,打开方式如下:
VS Code 查看 -> 命令面板(Ctrl+Shift+P)-> 搜索 “ESP-IDF: 打开分区表编辑器 UI” -> 单击 ”Add New Row“ 增加一行分区 -> 单击 ”Save“ 保存自定义分区表
其中 Type 和 SubType 的可选类型固定,只能从以下几种中按需选择:
- Type
- app : 程序分区
- factory : 工厂应用
- ota_x : OTA 应用
- test : 测试数据
- data : 数据分区
- fat : FAT 文件系统
- ota : OTA 数据
- phy : 无线 PHY 校准数据
- nvs : 非易失性存储
- nvs_keys : NVS 密钥
- spiffs : SPIFFS 文件系统
- coredump : 核心转储
- app : 程序分区
5.4、FreeRTOS 相关
搜索 “FREERTOS_HZ” 配置 FreeRTOS 节拍时钟周期,一般设置其为 1000
6、组件注册表
组件注册表是乐鑫提供给开发者的一个在线平台,这个平台上托管许多组件,开发者可以在其中搜索自己想要的组件,并将其添加到自己的项目中,避免对组件的重复开发。
使用组件注册表主要有如下两种方式:
- CMD
- VS Code
6.1、CMD
- ESP Component Registry
- 搜索组件 xxx
- ESP-IDF 终端输入
idf.py add-dependency "xxx"添加组件 - 会在 main 文件夹下增加
idf_component.yml文件 - 重新构建项目后会自动下载组件到 managed_components 文件夹中
6.2、VS Code
- VS Code 查看 -> 命令面板(Ctrl+Shift+P)
- 搜索:"ESP-IDF: 乐鑫组件注册表"
- 搜索组件
- Install
- 安装成功后会自动下载组件到 managed_components 文件夹中
ESP-IDF教程1 开发环境的更多相关文章
- BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备
上一篇我们已经完成所有的准备工作,现在我们就开始动手,通过接下来的三篇文章创建第一个多维数据集. 传统的维度和多维数据集设计方法主要是基于现有的单源数据集. 在现实世界中,当开发商业智能应用程序时,很 ...
- Arduino可穿戴开发入门教程Arduino开发环境介绍
Arduino可穿戴开发入门教程Arduino开发环境介绍 Arduino开发环境介绍 Arduino不像我们使用的PC端操作系统一样,可以直接在操作系统中安装软件为操作系统编程.Arduino的软件 ...
- [译]Vulkan教程(03)开发环境
[译]Vulkan教程(03)开发环境 这是我翻译(https://vulkan-tutorial.com)上的Vulkan教程的第3篇. In this chapter we'll set up y ...
- 【强烈推荐,超详细,实操零失误】node.js安装 + npm安装教程 + Vue开发环境搭建
node.js安装 + npm安装教程 + Vue开发环境搭建 [强烈推荐,超详细,实操零失误] 原博客园地址:https://www.cnblogs.com/goldlong/p/8027997.h ...
- 勤拂拭软件 java web 开发教程(1) - 开发环境搭建
勤拂拭软件系列教程 之 Java Web开发之旅(1) Java Web开发环境搭建 1 前言 工作过程中,遇到不少朋友想要学习jsp开发,然而第一步都迈不出,连一个基本的环境都没有,试问,如何能够继 ...
- React Native入门教程 1 -- 开发环境搭建
有人问我为啥很久不更新博客..我只能说在学校宿舍真的没有学习的环境..基本上在宿舍里面很颓废..不过要毕业找工作了,我要渐渐把这个心态调整过来,就从react-native第一篇博客开始.话说RN也出 ...
- java web 开发教程(1) - 开发环境搭建
勤拂拭软件系列教程 之 Java Web开发之旅(1) Java Web开发环境搭建 1 前言 工作过程中,遇到不少朋友想要学习jsp开发,然而第一步都迈不出,连一个基本的环境都没有,试问,如何能够继 ...
- [分享]4412开发板Android教程——Android开发环境搭建
分享视频链接:http://pan.baidu.com/s/1o6tgEeQ 本文转载:www.topeetboard.com 下载和安装Android应用的开发环境 新建Android虚拟环境 An ...
- [Java 教程 02] 开发环境搭建
在上一篇文章对Java做了一个简单介绍之后,我想大家都已经对她有一个初步的认识了吧!那踏入正式学习使用Java之前,我们有一步是不得不做的,它是什么呢?没有错,就是我们本篇文章的标题所说,搭建Java ...
- Angular7教程-01-Angular开发环境配置
本教程基于angular7(2018-11-04) 1. 安装node.js 下载地址: http://nodejs.cn/download/ 下载对应自己操作系统的版本安装即可. 2.安装 angu ...
随机推荐
- manim边做边学--淡入淡出变换
今天介绍Manim中用于淡入淡出变换的3个动画类: FadeToColor:聚焦于对象颜色的平滑转换,通过渐变增强视觉效果 FadeTransform:实现不同对象之间的渐变替换,让元素转换更加连贯 ...
- 使用C#对Godot属性进行改写(其实是覆盖)
本文地址:https://www.cnblogs.com/oberon-zjt0806/p/14568221.html 背景 我还真没想到C#这个鬼东西还能这么用-- 起初是想通过某种办法改写一下La ...
- 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
在AI技术飞速发展的今天,大语言模型(LLM)的应用越来越广泛,但高昂的使用成本常常让个人开发者和小型团队望而却步.今天,我要为大家介绍一个非常实用的开源项目--DeepSeek-Free-API,它 ...
- el-radio-group初始化默认值后点击无法切换问题/vue中设置表单对象属性页面不同步问题
<el-radio-group v-model="ruleForm.type"> <el-radio :label="1">方案一< ...
- Thymeleaf 嵌套循环
<label th:each="role:${roles}" class="check-box"> <input th:each=" ...
- Java微信小程序登录接口获取openid
根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到code2accessToken的接口中 小程序登录方法 code2accessToken的方法中要求传入如下参数 ...
- autMan奥特曼机器人-青龙运行结果推送到autMan
一.使用到的autMan云插件为"青龙推送autMan"或"JD未来活动定时运行" 二选一即可,两都不可同时安装,有冲突 青龙推送autMan:这个插件仅用于将 ...
- 附039.Kubernetes_v1.32.2高可用部署架构二
部署组件 该 Kubernetes 部署过程中,对于部署环节,涉及多个组件,主要有 kubeadm .kubelet .kubectl. kubeadm介绍 Kubeadm 为构建 Kubernete ...
- vue - [04] 配置
关闭ESLint. 001 || ESLint (1)定义 ESLint是一个插件化的JavaScript代码检查工具.在vue项目中,它可以检查.vue文件中的JavaScript代码(包括脚本 ...
- WPF无边框的一个方案(保留默认窗口的拖动、阴影等效果)
使用 WindowStyle="None" AllowsTransparency="True" 的方式达成无边框的效果有很多无法忽视的缺陷,比如失去了拖动效果. ...