论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
程序人生
›
《ESP32-S3使用指南—IDF版 V1.6》第四章 熟悉ESP-IDF ...
《ESP32-S3使用指南—IDF版 V1.6》第四章 熟悉ESP-IDF
用户云卷云舒
金牌会员
|
2025-2-12 09:59:54
|
显示全部楼层
|
阅读模式
楼主
主题
899
|
帖子
899
|
积分
2697
第四章 熟悉ESP-IDF
1)实验平台:正点原子DNESP32S3开发板
2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6
3)购买链接:
https://detail.tmall.com/item.htm?&id=768499342659
4)全套实验源码+手册+视频下载地点:
http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html
5)正点原子官方B站:
https://space.bilibili.com/394620890
6)正点原子DNESP32S3开发板技能交流群:132780729
ESP-IDF是乐鑫科技为其ESP32系列芯片提供的官方开发框架。这个框架主要用于开发、构建和摆设基于ESP32的物联网(IoT)应用。我们要写步伐控制ESP32芯片,其实最终就是控制它的寄存器,使之工作在我们需要的模式下,ESP-IDF库将大部分寄存器的操作封装成了函数,我们只需要学习和掌握ESP-IDF库函数的结构和用法,就能方便地驱动ESP32工作,以节省开发时间。
本章将分为如下几个末节:
4.1 ESP-IDF简介
4.2 ESP-IDF库框架结构剖析
4.3 ESP-IDF与乐鑫芯片
4.4 IDF工程简介
4.1 ESP-IDF简介
ESP-IDF(Espressif IoT Development Framework)是乐鑫(Espressif Systems)为ESP系列芯片开发的物联网开发框架。它支持ESP32、ESP32-S、ESP32-C和ESP32-H系列SoC,基于C/C++语言提供了一个自给自足的SDK,方便用户在这些平台上开发通用应用步伐。
一、ESP-IDF特点:
(1)免费开源:ESP-IDF 相关资源已在 GitHub 上免费开放。
(2)专业稳固:ESP-IDF发布的版本均经过严格的测试流程,以确保版本稳固,客户可快速实现量产。
(3)功能丰富的软件组件:ESP-IDF 集成了大量的软件组件,包括 RTOS、外设驱动步伐、网络栈、多种协议实现技能以及常见应用步伐的使用助手。
(4)支持多种IDE开发:Eclipse 和 VSCode 等 IDE,确保其易于开发人员使用。
(5)丰富的文档和示例资源:ESP-IDF 提供细致的软件组件使用和计划文档,有助于开发人员充分理解 ESP-IDF功能,并从中挑选最适合构建其应用步伐的模块。
(6)支持Windows、Linux 和 macOS 系统平台上开发 ESP32 应用步伐提供工具链、API、组件和工作流程(本教程选择Windows系统下开
发)。
二、自动化构建系统:
开发者只需要通过简单的命令即可触发整个编译流程。下图为ESP-IDF编译系统流程:
图4.1.1 ESP-IDF编译系统流程
从上述图示可见,项目标工程文件通过集成C项目、中间组件以及工具链,共同编译生成可执行文件。随后,这个可执行文件被下载到ESP32芯片中。ESP32芯片可以或许通过其监控器功能,向开发者提供实时的反馈信息。这一流程使得开发者可以或许更有效地监控和管理ESP32芯片的运行状态,从而优化项目标开发过程。
ESP-IDF的编译过程主要基于Make或CMake构建系统,它自动化地处置惩罚源代码的编译、链接和生成最终的可执行文件或固件镜像。简单来讲,ESP-IDF可以使用命令的形式进行配置、编译、链接和构建项目,类似于linux的开发方式。整个编译过程通过构建系统自动化完成,开发者只需要通过简单的命令即可触发整个编译流程。
ESP-IDF虽然提供了强大的功能和灵活性,但使用命令编译和构造等操作也存在一些缺点。
①:学习曲线陡峭。对于初学者来说,ESP-IDF大概具有一定的学习难度。它需要一定的时间来理解其目录结构、编译系统、配置文件以及API等
②:编译过程繁琐。虽然ESP-IDF提供了命令来编译和构造项目,但编译过程大概会相对繁琐。特别是当项目规模较大大概依赖多个组件时,编译时间大概会延伸,这大概会影响开发服从。
③:缺乏图形化界面。虽然ESP-IDF提供了命令行工具来进行项目构建和调试,但缺乏图形化界面的支持大概会使得某些操作相对不便。对于一些开发者来说,图形化界面可以提供更直观和易于使用的操作体验。
④:配置复杂。ESP-IDF的配置文件(如sdkconfig)大概相对复杂,特别是对于初学者来说。需要正确配置各种选项和参数,以确保项目可以或许正确编译和运行。配置错误大概导致编译失败或运行时问题。
对于上述的问题,乐鑫科技提供了一个解决方案,那就是在集成开发环境下开发ESP-IDF,使得开发者更加快速的开发ESP32芯片。下面是乐鑫官方ESP-IDF支持的集成开发环境。
图4.1.2 ESP-IDF支持的集成开发环境
下图为VS Code/Eclipse/Espressif-IDE等IDE的开发ESP-IDF步伐流程图。
图4.1.3 开发应用步伐流程图
不难发现,图4.1.1的流程和图4.1.3的流程极为相似,唯一差别的是图4.1.3是基于IDE集成开发环境下开发的,但是它们的编译流程是一致的。
本教程中的所有例程都是基于VS Code IDE进行开发的。虽然并未提供基于Eclipse IDE的开发例程,但上图中展示的开发应用步伐流程同样实用于VS Code IDE的开发流程。这意味着,无论使用哪种IDE开发ESP-IDF,开发者都可以遵循这一流程来有效地进行应用步伐的开发。
三、ESP-IDF在VS Code集成开发环境开发具备那些特点
①:代码编辑与智能提示。安装了ESP-IDF扩展插件后,VSCode将提供代码高亮、语法查抄、自动补全等IDE功能,极大地进步了代码编辑的服从和正确性。插件还提供了对ESP-IDF特定函数和API的智能提示,帮助开发者更快地编写和调试代码。
②:构建与调试。ESP-IDF扩展插件集成了构建和调试功能,开发者可以直接在VSCode中执行idf.py build等命令来构建项目。还可以通过配置launch.json文件,开发者还可以在VSCode中设置断点、单步执行、查看变量值等调试功能,从而方便地进行步伐调试。
③:项目管理与配置。VSCode支持多项目管理,开发者可以方便地切换和管理差别的ESP-IDF项目。还通过VSCode中的配置文件(如.vscode/settings.json),开发者可以针对每个项目设置特定的构建和调试选项。
④:集成终端与日志查看。VSCode内置了终端功能,开发者可以直接在VSCode中打开终端并执行ESP-IDF相关的命令。还可以通过集成终端,开发者可以方便地查看构建日志、调试输出等信息,从而快速定位和解决问题。
VSCode与ESP-IDF之间的关系主要体如今VSCode为ESP-IDF提供了一个功能强大的集成开发环境,通过安装和使用ESP-IDF扩展插件,开发者可以更加高效地在VSCode中编写、构建、调试和摆设ESP32等Espressif芯片的应用步伐。
4.2 ESP-IDF库框架结构剖析
下面我们从gitee仓库下克隆ESP-IDF物联网开发框架的源代码,并在此分析各个文件的作用。克隆ESP-IDF源码库流程如下图所示。
图4.2.1 克隆ESP-IDF源码库
克隆成功后,在上图路径下找到esp-idf文件夹,此文件夹就是ESP-IDF物联网开发框架的源码库,如下图所示。
图4.2.2 ESP-IDF源码库部分截图
下面作者来讲解一下这些文件夹的作用及特点,如下表所示:
表4.2.1 esp-idf源码库的框架结构剖析
正如图4.1.1所示那样,在编译ESP32的例程时,确保components和tools目录的完整性是非常重要的。components目录包罗了项目所需的所有源代码和库文件,而tools目录则提供了编译和链接这些代码所需的工具链,这样才能做到自给自足的构建项目。
4.3 ESP-IDF与乐鑫芯片
每款乐鑫芯片都大概有差别版本,下表总结了乐鑫芯片在 ESP-IDF 各版本中的支持状态,其中“P” 代表已支持,“预览”代表现在处于预览支持状态。预览支持状态通常有时间限制,而且仅实用于测试版芯片。请确保使用与芯片相匹配的 ESP-IDF 版本。
表4.3.1 ESP-IDF与乐鑫芯片关系表
从上表可知:每款乐鑫芯片都大概有差别版本。建议参考[ESP-IDF 版本与乐鑫芯片版本兼容性],相识 ESP-IDF 版本与各芯片版本之间的兼容性,作者建议读者最好找到合适的ESP-IDF版本来开发自己的SoC芯片。
对于 2016 年之前发布的乐鑫芯片(包括 ESP8266 和 ESP8285),请参考[RTOS SDK]。
4.4 IDF工程简介
ESP-IDF工程,特别是ESP-IDF项目,可以看作是由多个差别组件集合而成的工程。这些组件包括ESP-IDF基础库(如libc、ROM bindings等)、Wi-Fi驱动、TCP/IP协议栈、FreeRTOS操作系统、网页服务器、各种传感器驱动(如湿度传感器驱动)以及负责将上述组件整合到一起的主步伐等。
ESP-IDF工程借助CMake的可自定义性,创新地采用了“组件”式的计划。整个工程由多个组件组成,每个组件都像是一块积木,共同构建起完整的工程结构。在这些组件中,有一个特殊的组件被称为“main”组件,它包罗了用户应用步伐的入口函数。
组件之间的关系主要以依赖关系为主,确保了它们之间的有序协作。每个组件都可以拥有单独的配置,这进一步增加了工程的灵活性和可定制性。在ESP-IDF中,用户可以明确地指定和配置每个组件。构建系统会在ESP-IDF目录、项目目录以及用户自定义的组件目录(如存在)中查找所有的组件。这一过程允许用户通过文本菜单系统对ESP-IDF项目中使用的每个组件进行配置。当所有组件的配置完成后,构建系统便会开始编译整个项目,确保所有组件可以或许按照预期的方式协同工作,从而生成最终的工程结果。这种计划不仅简化了工程的开发和维护,也进步了开发服从。
1,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 环境变量中。
2,ESP32项目工程分析
下面作者以sample_project示例(D:\ESP32\Espressif\frameworks\esp-idf-v5.1.2\examples\get-started\sample_project路径下找到)为例,来讲解基础工程的构建项目原理。sample_project工程目录如下图所示:
图5.3.9 test_1项目标文件结构
①:顶层项目 CMakeLists.txt 文件,这是 CMake 用于学习如何构建项目标主要文件,可以在这个文件中设置项目全局的 CMake 变量。顶层项目 CMakeLists.txt 文件会导入 /tools/cmake/project.cmake 文件,由它负责实现构建系统的别的部分。该文件最后会设置项目标名称,并定义该项目。每个项目都有一个顶层 CMakeLists.txt 文件,包罗整个项目标构建立置。默认情况下,项目 CMakeLists。 文件会非常小,如下代码所示:
/* 必须放在 CMakeLists.txt 文件的第一行,
它会告诉 CMake 构建该项目所需要的最小版本号。ESP-IDF 支持 CMake 3.16 或更高的版本 */
cmake_minimum_required(VERSION 3.16)
/* 会导入 CMake 的其余功能来完成配置项目、检索组件等任务 */
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
/* 会创建项目本身,并指定项目名称 */
project(myProject)
复制代码
②:main目录是一个特殊的组件,它包罗两个文件,它们分别为CMakeLists.txt和mian.c文件。
其中main.c定义了步伐入口函数app_main(),而CMakeLists.txt文件是将组件添加到构建系统中,如下图所示:
idf_component_register(SRCS "main.c"
INCLUDE_DIRS ".")
复制代码
通过调用 idf_component_register函数,开发者可以将组件添加到构建系统中。在此过程中,SRCS 代表源文件列表,其中包括 .c、.cpp、.cc、.S 等范例的文件,这些源文件都将被编译并整合进组件库中。另外,INCLUDE_DIRS 指的是目录列表,这些目录中的路径将被添加到所有需要该组件(包括主组件)的全局 include 搜索路径中,确保在编译过程中可以或许正确找到相关的头文件。留意:若该组件需要依赖其他的驱动代码,可使用REQUIRES设置依赖库,具体内容请参考ESP-IDF编程指南的组件依赖章节。
③:“sdkconfig” 项目配置文件,执行 idf.py menuconfig 时会创建或更新此文件,文件中保存了项目中所有组件(包括 ESP-IDF 本身)的配置信息。 sdkconfig 文件大概会也大概不会被添加到项目标源码管理系统中。
从上述内容可以得知以下总结:子层的CMakeLists.txt文件负责将对应层的组件整合进构建系统当中,而sdkconfig文件则用于设置构建过程中所需的多种配置选项(该编译哪些代码,不该编译哪些代码)。同时,顶层的CMakeLists.txt文件不仅指定了CMake的版本,还通过引用ESP-IDF路径下的project.cmake文件来指导整个项目标构建流程。这些文件共同协作,确保项目可以或许顺利构建和配置。最终,项目构建完成后会生成一个build文件夹,其中包罗了临时目标文件、库文件以及最终输出的二进制文件。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
用户云卷云舒
金牌会员
这个人很懒什么都没写!
楼主热帖
更新:)
更新:)
期末作业C#实现学生宿舍管理系统 ...
Nginx 配置和性能调优
揭秘爆款的小程序,为何一黑到底 ...
北京动点元宇宙外包团队:微软入局工业 ...
IOS开发
SmartIDE v0.1.16 已经发布 - 支持阿里 ...
《HarmonyOS开发 – OpenHarmony开发笔 ...
鸿蒙系统与安卓系统有什么区别 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表