认识ESP-IDF
ESP-IDF 是乐鑫科技为其 ESP32 系列芯片提供的官方开发框架。这个框架主要用于开发、构建和部署基于ESP32的物联网(IoT)应用。
程序开发的本质是控制寄存器,之所以使用IDF是因为寄存器太过复杂,使用IDF可以简化开发过程,提高开发效率。
ESP-IDF 的编译过程主要基于 Make 或 CMake 构建系统,它自动化地处理源代码的编译、链接和生成最终的可执行文件或固件镜像。
了解目录结构、编译系统、配置文件以及API
components: 提供了模块化、可配置、可重用和可扩展的代码组织方式,使得 ESP32 和其他Espressif 芯片的开发变得更加高效和灵活
docs: ESP-IDF 相关的文档和指南,旨在帮助开发者更好地理解和使用 ESP-IDF
examples: 为开发者提供了丰富的学习资源、原型开发工具和功能演示。
tools: 提供了开发 ESP-IDF 项目所需的各种工具和脚本,帮助开发者更高效地完成开发、构建和部署任务
ESP32 工程有如下重要概念
①:项目(Project)特指一个目录,其中包含了构建可执行应用程序所需的全部文件和配
置,以及其他支持型文件,例如分区表、数据/文件系统分区和引导程序。
②:项目配置 保存在项目根目录下名为 sdkconfig的文件中,可以通过 idf.py menuconfig 进
行修改,且一个项目只能包含一个项目配置。
③:应用程序是由 ESP-IDF 构建得到的可执行文件。一个项目通常会构建两个应用程序:
项目应用程序(可执行的主文件,即用户自定义的固件)和引导程序(启动并初始化项目应用
程序)。
④:组件(Components)是模块化且独立的代码,会被编译成静态库(.a 文件)并链接到
应用程序。部分组件由 ESP-IDF 官方提供,其他组件则来源于其它开源项目。
⑤:目标(Target)特指运行构建后应用程序的硬件设备。ESP-IDF 当前仅支持 esp32 和
esp32s2 以及 esp32s3 这三个硬件目标。
请注意,以下内容并不属于项目的组成部分:
①:ESP-IDF 并不是项目的一部分,它独立于项目,通过 IDF_PATH 环境变量(保存 esp-
idf 目录的路径)链接到项目,从而将 IDF 框架与项目分离。
②:交叉编译工具链并不是项目的组成部分,它应该被安装在系统 PATH 环境变量中。
项目工程分析
顶层项目 CMakeLists.txt 文件:由它负责实现构建系统的其余部分。
顶层项目 sdkconfig 文件:由它负责配置项目的构建选项。
顶层项目 main 目录:由它负责存放项目应用程序的源码文件。它包含两个文件,它们分别为 CMakeLists.txt 和 mian.c文件。
其中 main.c定义了程序入口函数 app_main(),而 CMakeLists.txt文件是将组件添加到构建
系统中,如下所示:
idf_component_register(SRCS “main.c”
INCLUDE_DIRS “.”)通过调用 idf_component_register 函数,开发者可以将组件添加到构建系统中。
其中 SRCS 变量指定了组件的源码文件,INCLUDE_DIRS 变量指定了组件的头文件目录。
顶层项目 components 目录:由它负责存放项目应用程序的源码文件。
**总结:**子层的 CMakeLists.txt文件负责将对应层的组件整合进构建
系统当中,而 sdkconfig 文件则用于设置构建过程中所需的多种配置选项(该编译哪些代码,不
该编译哪些代码)。同时,顶层的 CMakeLists.txt 文件不仅指定了 CMake 的版本,还通过引用
ESP-IDF 路径下的 project.cmake 文件来指导整个项目的构建流程。这些文件共同协作,确保项
目能够顺利构建和配置。最终,项目构建完成后会生成一个 build 文件夹,其中包含了临时目标
文件、库文件以及最终输出的二进制文件。
分区表
分区表是 ESP-IDF 中的一个重要概念,它用于定义应用程序在设备上的存储布局。分区表
定义了应用程序的各个部分在设备上的位置和大小,以及它们的读写权限。
组件使用
组件的添加
在 VS Code 项目工程中添加 IDF 组件注册表中的组件十分便捷。您只需按下“Ctrl+Shift+P”
快捷键快速进入命令面板,或者通过菜单栏的“查看”选项,选择“命令面板”来打开它。随后,
在命令面板中输入“ESP-IDF: Show Component Registry”即可展示出组件注册表,具体操作如图所示。
在搜索框中,我们可以方便地查找开发者所需的组件。请注意,下载 ESP-IDF 注册表中的组件需要在联网环境下进行,
因此请确保您的电脑已连接到网络,以便顺利下载所需的组件。
在上图中,首先选择适合的组件版本,随后点击“install”按钮以安装 Button组件。
组件的使用
在完成组件的安装后,我们可以在项目工程中直接使用该组件。在 VS Code 项目工程中,
我们只需在 main 目录下的 CMakeLists.txt 文件中添加如下代码即可使用 Button组件:
idf_component_register(SRCS "main.c"
INCLUDE_DIRS ".")
idf_component_get_property(button_include_dir button INCLUDE_DIR)
target_include_directories(${COMPONENT_TARGET} PRIVATE
${button_include_dir})
在上述代码中,我们首先通过 idf_component_register 函数将 main.c 文件添加到项目
中,然后通过 idf_component_get_property 函数获取 Button组件的头文件目录,最后通
过 target_include_directories 函数将头文件目录添加到项目中。
组件的卸载
如果您不再需要某个组件,您可以通过按下“Ctrl+Shift+P”快捷键快速进入命令面板,
或者通过菜单栏的“查看”选项,选择“命令面板”来打开它。随后,在命令面板中输入“ESP-IDF:
Show Component Registry”即可展示出组件注册表。