ESP-IDF 简介

ESP-IDF(Espressif IoT Development Framework)是乐鑫(Espressif Systems)为 ESP 系列芯片开发的物联网开发框架。它支持 ESP32、 ESP32-S、 ESP32-C 和 ESP32-H 系列 SoC,基于C/C++语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序。


一、 ESP-IDF 特点:

  • 免费开源:ESP-IDF 相关资源已在 GitHub 上免费开放

  • 专业稳定:发布版本均经过严格测试,确保稳定,便于快速量产

  • 功能丰富:集成大量软件组件,包括 RTOS、外设驱动、网络栈、协议栈及应用助手

  • 多 IDE 支持:支持 Eclipse、VSCode 等 IDE,易于上手

  • 文档完善:提供详尽的组件文档和设计文档,帮助开发者理解功能和选型

  • 跨平台:支持

二、 自动化构建系统

Windows、Linux、macOS,提供完整工具链、API、组件和工作流程

ESP-IDF 编译系统流程:

编译流程

  • 工程文件(C项目+中间组件+工具链)编译生成可执行文件

  • 可执行文件下载到 ESP32 芯片

  • 芯片通过监控器向开发者提供实时反馈

编译系统

  • 基于 Make 或 CMake 构建系统

  • 自动化处理编译、链接、生成固件镜像

  • 通过命令行触发,类似 Linux 开发方式

主要缺点

  • 学习曲线陡峭:需要理解目录结构、编译系统、配置文件和 API

  • 编译过程繁琐:大型项目编译时间长,影响开发效率

  • 缺乏图形界面:命令行操作对部分开发者不够直观

  • 配置复杂:sdkconfig 配置选项多,配置错误可能导致失败

使用乐鑫官方支持的 IDE 进行开发,提高开发效率

VS Code/Eclipse/Espressif-IDE 等 IDE 的开发 ESP-IDF 程序流程图

ESP-IDF 在 VS Code 集成环境

  • 代码编辑与智能提示:提供代码高亮、语法检查、自动补全,以及 ESP-IDF 特定函数和 API 的智能提示

  • 构建与调试:集成 idf.py build 等命令,支持通过 launch.json 配置断点、单步执行、查看变量等调试功能

  • 项目管理与配置:支持多项目管理切换,可通过 settings.json 为每个项目设置特定的构建和调试选项

  • 集成终端与日志:内置终端执行 ESP-IDF 命令,方便查看构建日志和调试输出

三. ESP-IDF 库框架结构

1.源码库

目录 功能描述 核心作用
components 提供模块化、可配置、可重用和可扩展的代码组织方式 核心组件库 • 包含驱动、协议栈、RTOS等 • 支持自定义组件扩展 • 实现代码跨项目复用
docs 包含 ESP-IDF 相关的文档和指南 知识文档中心 • 提供入门指南和API参考 • 支持本地化文档查阅 • 可离线浏览
examples 为开发者提供丰富的学习资源、原型开发工具和功能演示 示例代码库 • 涵盖各功能的完整项目 • 可作为新项目模板 • 快速上手最佳实践
tools 提供开发 ESP-IDF 项目所需的各种工具和脚本 开发工具链 • 包含构建、烧录、调试工具 • 提供一键式命令工具 • 提升开发部署效率

每款乐鑫芯片在不同 ESP-IDF 版本中的支持状态如下表所示

2. IDF 工程简介

ESP-IDF 工程采用"组件"式设计,由多个独立组件组成,包括:

  • 基础库(libc、ROM bindings 等)

  • 驱动(Wi-Fi、传感器等)

  • 协议栈(TCP/IP)

  • 操作系统(FreeRTOS)

  • 服务组件(Web 服务器等)

  • 主程序(main 组件,包含入口函数)

构建系统
  • 基于 CMake,支持自定义配置

  • 组件间存在依赖关系,确保有序协作

  • 构建系统在 ESP-IDF 目录、项目目录、用户组件目录中查找所有组件

  • 通过菜单系统配置每个组件

  • 配置完成后自动编译,生成最终固件

项目组成部分
  • 项目:包含构建可执行应用程序所需的全部文件和配置,以及分区表、数据/文件系统分区、引导程序等支持文件

  • 项目配置:保存在项目根目录的 sdkconfig 文件中,通过 idf.py menuconfig 修改,每个项目只有一个配置文件

  • 应用程序:ESP-IDF 构建得到的可执行文件,包括项目应用程序(用户自定义固件)和引导程序(启动并初始化项目应用程序)

  • 组件:模块化独立的代码,编译成静态库(.a 文件)并链接到应用程序,由 ESP-IDF 官方或开源项目提供

  • 目标:运行构建后应用程序的硬件设备,当前支持 esp32、esp32s2、esp32s3

  • ESP-IDF:独立于项目,通过 IDF_PATH 环境变量链接,实现 IDF 框架与项目分离

  • 交叉编译工具链:安装在系统 PATH 环境变量中,不属于项目组成部分

sample_project

D:\ESP32\Espressif\frameworks\esp-idf-v5.1.2\examples\getstarted\sample_project

  1. 顶层 CMakeLists.txt
  • CMake 构建系统的主文件,设置项目全局 CMake 变量

  • 导入 /tools/cmake/project.cmake 实现构建系统

  • 指定项目名称

cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)

project(myProject)

  1. main 目录(特殊组件)
  • main.c:定义程序入口函数 app_main()

  • CMakeLists.txt:将组件添加到构建系统

idf_component_register(SRCS "main.c"

INCLUDE_DIRS ".")

  • SRCS:源文件列表(.c、.cpp、.cc、.S 等)

  • INCLUDE_DIRS:头文件搜索路径

  • REQUIRES:依赖库设置(可选)

  1. sdkconfig
  • 项目配置文件

  • 执行 idf.py menuconfig 时创建或更新

  • 保存所有组件配置信息

  1. 构建流程
  • 子层 CMakeLists.txt:将组件整合进构建系统

  • sdkconfig:设置构建配置选项(控制编译哪些代码)

  • 顶层 CMakeLists.txt:指定 CMake 版本,引用 project.cmake 指导构建流程

  • build 目录:构建完成后生成,包含临时目标文件、库文件、最终二进制文件

四 安装 ESP-IDF

乐鑫官方的 Windows 安装下载中心下载 ESP32- IDF 安装包

右键选择<以管理员身份运行>运行

简体中文安装

许可协议

修复不成功, 安装软件打开时没有使用管理员权限打开,可以手动修改注册表来支持长路径:打开注册表 HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPath sEnabled 设置为 1

全部源码编译后可几十 G 的大小占用,我们在 D 盘下创建 ESP32\Espressif 文件夹来保存 ESP32-IDF 库安装过程

idf.py build 指令,说明环境安装成功

环境变量

添加IDF_TOOLS_PATH 和IDF_PATH 环境变量

安装 USB 虚拟串口驱动

CH343P 芯片的驱动程序

ESP-IDF 命令构建或编译系统

  1. 构建系统:基于 CMake 生成适用于不同目标平台的构建文件,处理编译和链接步骤

  2. 菜单配置:idf.py menuconfig 提供文本用户界面,用于选择目标硬件、设置编译选项、启用或禁用组件

  3. 烧录和调试:支持将构建好的二进制文件烧录到目标设备(idf.py -p PORT flash),可与 GDB 等调试器配合使用

  4. 清理和重新构建:提供清理构建文件功能,确保从头开始重新构建项目

  5. 项目模板和示例:与 ESP-IDF 提供的项目模板和示例代码配合使用,快速启动项目

  6. 扩展性:允许开发者添加自定义构建步骤和脚本,满足特定项目需求

1. 创建新工程(create-project)

idf.py create-project --path <path> <project_name> 用于快速创建新项目目录结构和模板文件。

参数说明

  • --path:指定创建工程的位置(必须在文件夹路径下)

  • project_name:项目工程名称

使用示例

idf.py create-project --path C:\Users\ATK\Desktop\test_1 led

2. 创建新组件(create-component)

idf.py create-component <component_name> 创建一个包含基本文件集的新组件,一般用于存放第三方组件或驱动程序。

参数说明

  • component_name:组件名称

使用方法

  1. 使用 cd 命令进入工程路径

  2. 执行 idf.py create-component <component_name> 创建组件

组件通常存放在 component 文件夹中,用于存储第三方组件或用户驱动代码。

3. 设置目标芯片(set-target)

idf.py set-target <target> 用于设置工程的目标芯片。新建工程默认为 ESP32,如需使用其他芯片(如 ESP32-S3),需使用此命令重新指定。

参数说明

  • target:目标芯片,可通过 idf.py --list-targets 查看支持的芯片类型

使用方法

idf.py --list-targets # 查看支持的芯片类型

idf.py set-target esp32s3 # 设置目标芯片为 ESP32-S3

4,编译工程

"idf.py build"

5,监控项目

idf.py monitor"命令用来监控当前项目。

6,配置项目

idf.py menuconfig

7,下载代码

把编译出来的可执行文件烧录到 ESP32-S3 芯片当中

idf.py -p COM9 flash

8,清除编译文件

idf.py clean

这个命令主要用于清理构建目录中的构建输出文件。 不会删除 CMake 的配置输出和其他相关文件

idf.py fullclean

删除整个 build 目录下的所有内容,包括所有的 CMake 配置输出文件。

相关推荐
羽获飞2 小时前
从零开始学嵌入式之STM32——27.基于STM32F103C8T6MCU的寄存器方式实现按键调整PWM占空比,调整输出功率
stm32·单片机·嵌入式硬件
学嵌入式的小杨同学2 小时前
STM32 进阶封神之路(十五):DHT11 单总线实战 —— 温湿度检测从时序解析到代码落地(库函数 + 寄存器)
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·pcb工艺
RFID舜识物联网3 小时前
RFID技术重构医疗试剂管理:从“人工时代”到“智能时代”的跨越
大数据·人工智能·科技·物联网·安全
QYQ_11273 小时前
嵌入式学习——51单片机
嵌入式硬件·学习·51单片机
2501_937721753 小时前
stm32
stm32·单片机·嵌入式硬件
DLGXY3 小时前
STM32(二十五)——修改主频、睡眠模式、停机模式、待机模式
stm32·单片机·嵌入式硬件
BackCatK Chen3 小时前
2026年STM32新品密集发布:C5系列量产上市,低功耗无线MCU同步迭代
stm32·单片机·嵌入式硬件·stm32c5·mcu新品·stm32wl3r
最概然3 小时前
单片机也能玩依赖注入?
单片机·嵌入式硬件
bing_feilong4 小时前
ubuntu22.04: 安装ROS2并测试
嵌入式硬件·机器人