认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

2023-10-26

ESP32-C3 学习测试到今天,一直在使用 ESP-IDF 的框架,
但是还从来没有注意过工程结构,遇到复杂一点的项目,工程结构就显得太乱了,
本文就来了解下 ESP-IDF 工程结构。

前言

除了蓝牙篇的测试,关于 ESP32-C3 的使用我们都已经做了一个小型的物联网应用了:

ESP32-C3入门教程 应用 篇(实例一、通过MQTT协议连接 ONENET 平台)

但是在实际操作时候,我们大多数情况下都是直接在 main.c 文件中添加应用代码,遇到复杂一点的项目多一点驱动文件,工程结构就显得很乱,不规范并且不方便移植。在上面 ESP32-C3 应用篇提到的工程中,我确实也遇到了文件添加的问题,所以为了避免这种基本问题的困扰,得好好的了解一下 ESP-IDF 工程结构。

本文的目的就在于通过 ESP-IDF 工程结构的认识,让我们可以自已可以规范的添加自己的工程代码。

本文是基于 VScode 插件的工程结构来说明(Ubuntu环境),环境搭建见下面博文:

ESP32-C3 VScode开发环境搭建(基于乐鑫官方ESP-IDF——Windows和Ubuntu双环境)

一、ESP-IDF工程基本框架

一个标准的工程框架如下图所示:
在这里插入图片描述
我们就用在应用篇中通过MQTT协议连接 ONENET 平台的工程来做示范说明,先来看看整体框架:
在这里插入图片描述

1.1 工程主目录下的文件

顶层 CMakeLists.txt

顶层项目 CMakeLists.txt 文件,这是 CMake 用于学习如何构建项目的主要文件,可以在这个文件中设置项目全局的 CMake 变量
在这里插入图片描述在这里插入图片描述
这个文件一般来说我们需要修改的是工程名字。

顶层 Makefile

看上去内容和 CMakeLists.txt 中的差不多,实际上这个文件通过CMake构建时文件都可以不需要,我测试了一下把这个文件删除,也能正常编译,所以这个应该是老的构建方式 GUN Make 需要用到的。
在这里插入图片描述
现在版本的IDF(4.3+)不需要这个文件,可以删除,不用修改。

sdkconfig

项目配置文件,执行 idf.py menuconfig 时会创建或更新此文件,文件中保存了项目中所有组件(包括 ESP-IDF 本身)的配置信息。 sdkconfig 文件可能会也可能不会被添加到项目的源码管理系统中。

我们需要的设置会在 menuconfig 中配置,此文件在执行完 menuconfig 后自动更新,不用修改。

1.2 main目录下的文件

main中的 CMakeLists.txt

给CMake指路的文件,,告诉它.c.h文件的位置,在目录下面有几个.c文件,就得添加几个。
在这里插入图片描述
在这里插入图片描述

这个文件我们需要修改,工程中在 main 文件夹下面,我多放了几个.c文件,就需要都添加进去。如果我们把头文件放在同一个文件夹里,也需要修改,比如:
在这里插入图片描述

component.mk

GUN Make中使用的文件,通过CMake构建时文件都可以不需要,和上面的 顶层Makefile 一样。
在这里插入图片描述
现在版本的IDF(4.3+)不需要这个文件,可以删除,不用修改。

Kconfig.projbuild

这不是一个必须的文件,它的作用就是可以配合 menuconfig 进行配置,可以方便移植。

如果新手不太熟悉 Kconfig 的书写,这里暂时可以不关注,在示例工程中,一些用到的变量就自己写死,而不用宏定义。
在这里插入图片描述 有了要学会看懂,会使用 menuconfig 配置。熟悉了以后,可以尝试书写,方便项目移植。

app_main.c

这就是这个项目工程的main文件,代码放里面就行了。

需要说明的是,在上面示例中有自己的驱动代码:
在这里插入图片描述
我们规范的做法是放在 components 目录下面,作为组件形式存在,所以下面会把我们会把这几个文件移动到 components 目录下面。

入口函数文件,就是自己写应用的main函数文件。

1.3 components目录下的文件

我们以前说过,components 包含了项目的部分自定义组件,但它有助于构建可复用的代码或者导入第三方(不属于 ESP-IDF)的组件。

再看看 components 文件夹下面的整体框架,在示例项目中,只有一个 button 子文件夹(就连led_strip的驱动文件我都直接放置button文件夹下面,因为当时放在另外一个文件夹编译出错= =!):
在这里插入图片描述

component.mk

和上面的 component.mk 文件一样GUN Make中使用的文件,通过CMake构建时文件都可以不需要,所以这里不管。

component.mk 不需要。

Kconfig

和上面的 Kconfig.projbuild 一样。
在这里插入图片描述
学会看懂,尝试书写,方便项目移植。

组件中的 CMakeLists.txt

是 CMake 构建项目的主要文件,规则和 main 中 CMakeLists.txt 一样,这个文件是重点。
在这里插入图片描述
重点!!学会修改。理解下面说的组件依赖!

组件依赖

组件中的 CMakeLists.txt 的核心,我们必须要学会如何修改,才能完善自己的工程,所以对于组件依赖我们需要但是介绍,这里官方的讲解比较详细,借用官网介绍截图说明:
在这里插入图片描述
组件依赖示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

VScode下添加组件

在我们使用 VScode 插件中,可以通过指令快速添加组件,方法如下:
在这里插入图片描述
可以看到添加的标准组件架构。

在以后自己的工程中,尽量安装这个标准组件架构设计。

二、工程调整示例

通过上面的详细介绍,即便不知道构建原理,我们也对 ESP-IDF工程结构有了一定的认识,学以致用,我们通过上面的认识,来对上面示例工程进行一定的修改。

2.1 删除不需要的文件

第一步,把上面说的component.mk 和 顶层Makefile删除, readme也删除了,至少整体看上去,没有开始那么乱,然后编译正常:
在这里插入图片描述

2.2 组件调整

LED驱动新建组件

LED驱动其实在前面 RMT应用 教学博文中使用过,不过当时是使用的官方例程为模板生成的组件,所以并没有关心结构,但是在我写应用篇的时候,把组件拷贝到本项目下面直接编译确实有错误,所以当时才会直接放置 button 文件夹下面 = =!

现在我们要把他移出来,单独作为一个组件led_strip,其实还是复制过来,如下图:
在这里插入图片描述
完成以后编译正常!

按键驱动放至对应组件

把主函数下面的按键驱动my_button.cmy_button.h文件放置 button 组件文件夹下面,去他该去的地方:
在这里插入图片描述
完成以后编译正常!

温湿度驱动新建组件

按照标准的组件模板,把温湿度的驱动程序放在新建的 sht21 组件文件夹中:
在这里插入图片描述
完成以后编译正常!

2.3 调整完成

完成上面步骤,对于示例的调整就算完成了,看看最后的工程结构(和以前比起来感觉漂亮多了,我都不忍心写任何注释上去~):
在这里插入图片描述

结语

乐鑫官方为了减少样板文件,其实也封装了 CMake 的许多功能,目的在于给与用户方便。

本文的目的在于让我们能够基于 ESP-IDF 框架,完善自己的工程结构,并没有对 Cmake 的构建原理做说明。如果有不妥当,不到位的地方,还请指出!

在本博文之后,ESP32-C3 的教学实例,都会按照这个标准框架进行。

谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例) 的相关文章

  • [人工智能-深度学习-78]:开发环境 - pip install cv2下载失败的解决办法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122320433 目录 1 出错现象
  • ESP32 ADC –使用Arduino IDE读取模拟值

    本文介绍了如何使用Arduino IDE通过ESP32读取模拟输入 模拟读取对于从电位计或模拟传感器等可变电阻读取值非常有用 模拟输入 ADC ADC是非线性的 analogRead 函数 其他有用的功能 使用ESP32从电位计读取模拟值
  • ESP32 SIM800L:发送带有传感器读数的文本消息(SMS警报)

    在这个项目中 我们将使用T Call ESP32 SIM800L模块创建一个SMS通知系统 当传感器读数高于或低于特定阈值时 该模块会发送SMS 在此示例中 我们将使用DS18B20温度传感器 并在温度高于28 C时发送短信 一旦温度降低到
  • VScode 中文显示出现黄色方框的解决方法

    VScode 中文显示出现黄色方框的解决方法 使用 VScode 打开源码时 发现注释中的汉字都被一个黄色的方框圈住了 这是因为使能了批注中字符的突出显示的功能 不喜欢这个黄色方框的小伙伴 可以参照下列步骤 禁用批注中字符的突出显示 将鼠标
  • 【Java开发环境配置】1-JDK安装教程&环境变量配置(21)

    一 JDK概念 JDK 是Java开发工具包 Java Development Kit 的缩写 它是一种用于构建在 Java 平台上发布的应用程序 applet 和组件的开发环境 其中包括了Java编译器 JVM 大量的Java工具以及Ja
  • Linux Eclipse配置C++多线程开发环境

    Linux系统下的多线程遵循POSIX线程接口 称为pthread 编写Linux下的多线程程序 需要使用头文件pthread h 连接时需要使用库libpthread a 头文件直接 include
  • 记录:查看ubuntu版本信息。

    cat proc version uname a lsb release a WSL Ubuntu 20 04运行结果 lsb release a 查看Release和Codename uname a 内核版本和操作系统32 64位 cat
  • ESP32基础应用之LVGL基础

    文章目录 1 实验目的 1 1 参考文章 2 实验工具 3 准备工作 3 1 搭建ESP32开发环境 3 2 克隆lv port esp32工程 4 配置lv port esp32工程 5 实验验证 6 使用过程遇到的问题 6 1 触摸功能
  • 启明云端分享

    提示 启明云端从2013年起就作为Espressif 乐鑫科技 大中华区合作伙伴 我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程 同时也用心推出了基于乐鑫的相关应用方案 希望你能第一时间了解并快速用上好的方案和产品
  • STM32CubeMX 生成工程步骤图文说明

    本文也适合STM32CubeMX 支持的所有芯片的设置 调整文章结构 添加图文说明 2022 2 增加其他应用章节 增加 ADC 设置说明 2023 3 考虑到增加的内容越来越多 修改文章标题 增加PWM设置说明 2023 4 增加 DAC
  • ESP32-C3 应用程序的启动流程

    网上说明一大堆 基本是官网文档复制没有额外解释 对于ESP32 C3的 risc v 内核 是我选择他的原因之一 了解芯片上电后的启动流程 有利于我们更加深入理解芯片 目录 前言 一 应用程序启动阶段 1 1 app main c 1 2
  • 【ESP-IDF】2.ESP32C3移植u8g2显示库驱动OLED

    前言 这个系列的文章属于是为了一碟醋包了一顿饺子系列 起因是看到tb上某家店的ESP32C3开发板才9 9包邮 想着研究一下 把手头有个用Arduino UNO实现的项目升级一下 于是就有了这个系列 ESP32C3的简介 2020 年末 乐
  • wifi类物联产品配网前言

    文章目录 1 SmartConfig配网 仅支持2 4G 2 web方式配网 3 一键配网 BLE 传统蓝牙和wifi 3 1 BLE方式 3 2 传统蓝牙方式 3 3 wifi方式 3 4 4G 网口或其他直连设备 3 5 其他配网方式
  • SimpleFOC无刷电机平衡小车

    前言 本科毕业于自动化 期间学习了各种电机运动控制原理 自动控制原理 但是只会考试而未究其理 最近接触到simplefoc这个基于arduino的开源无刷电机驱动库 想正好借此机会将本科学到的内容用于实际 于是就有了这个小项目 基于无刷电机
  • ESP32学习笔记05-串口事件方式读取数据

    串口中断方式处理数据 事件机构体 typedef struct uart event type t type lt UART event type size t size lt UART data size for UART DATA ev
  • 小白也能快速学会的Micropython编译指南

    小白也能快速学会的Micropython编译指南 大家好 我是CSDN上的 上坂龍二 哦 今天给大家带来的是 如何快速一次成功地将Micropython和自己喜欢的模块编译进自己的Esp32固件中哦 事前准备 Python python的环
  • 【ESP32接入国产大模型之文心一言】

    1 怎样接入文心一言 随着人工智能技术的不断发展 自然语言处理领域也得到了广泛的关注和应用 在这个领域中 文心一言作为一款强大的自然语言处理工具 具有许多重要的应用价值 本文将重点介绍如何通过ESP32接入国产大模型之文心一言api 以及其
  • 有没有办法在 python/opencv 中从单摄像头视频生成实时深度图?

    我试图将单个图像转换为其深度图 但我找不到任何有用的教程或文档 我想使用 opencv 但是如果您知道使用张量流等获取深度图的方法 我很高兴听到它 有很多关于立体视觉的教程 但我想让它更便宜 因为它是一个帮助盲人的项目 我目前正在使用 es
  • 使用什么 ffmpeg 命令将无符号整数列表转换为音频文件?

    我有一个文件 其中包含大约四万个整数的列表 这些整数以空格分隔 每个整数的值都在 0 到 255 之间 这里是这个文件 https github com johnlai2004 sound project blob master integ
  • ESP32 Arduino-ide如何获取唯一id

    我试图自动为每个 esp32 设置一个唯一的 id 在我使用提供该方法的 ESP IDF 框架对设备进行编程之前esp efuse mac get default 这将返回一个 8 字节值 该值在我手上的所有设备上都是唯一的 在arduin

随机推荐

  • 深度学习的基本概念总结

    1 基本概念 1 1 为什么要使用深层网络 深度神经网络的学习是特征递进的 浅层的神经元只能学习一些低层次的简单特征 如边缘 纹理 而深层神经网络可以学到更高级特征 深层网络的隐藏单元数目较少 隐藏层数目较多 若浅层网络想达到同样的计算结果
  • Spring使用三级缓存解决循环依赖

    前言 Spring 中使用了三级缓存的设计 来解决单例模式下的属性循环依赖问题 这句话有两点需要注意 解决问题的方法是 三级缓存的设计 解决的只是单例模式下的 Bean 属性循环依赖问题 对于多例 Bean 和 Prototype 作用域的
  • 查看264NAL信息工具

    用easyice只可以查看TS包的帧类型 google了一下 发现了这个工具HEVCBSAnalyzer https github com latelee HEVCBSAnalyzer 从git上下载下来 直接使用release文件夹下的工
  • java 代码扫描_静态代码扫描 (四)——Java 资源关闭研究

    这是静态代码扫描系列文章的第四篇 前三篇文章介绍了如何使用 PMD 和 Findbugs 自定义规则 我们火线团队最近一直在研究 java 资源关闭的检查规则 发现市面上开源的工具针对资源关闭的检测都存在一定不足 同时也无法满足我们业务的需
  • matlab矩阵操作

    矩阵及其操作 前言 一 矩阵的建立 二 向量的产生 冒号表达式 结构矩阵和单元矩阵 结构矩阵 单元矩阵 三 矩阵的操作 矩阵元素的引用 利用冒号表达式获得一部分子矩阵 删除矩阵 改变矩阵的形状 总结 前言 矩阵是matlab中最基本的数据对
  • SpringBoot如何配置数据库

    0 写在前面 项目启动需要一个链接数据库 所以在此记录一下 根据配置文件的后缀书写格式略有不同 此处以MySQL为例 使用Maven为例 1 引入依赖
  • Java——GUI——输入框事件监听

    代码演示 package Gui import java awt import java awt event ActionEvent import java awt event ActionListener public class Tes
  • 信息学奥赛一本通(2029:【例4.15】水仙花数)

    2029 例4 15 水仙花数 时间限制 1000 ms 内存限制 65536 KB 提交数 1242 通过数 718 题目描述 求100 999100 999中的水仙花数 若三位数ABCABC ABC A3 B3 C3ABC A3 B3
  • ASP.NET IIS 注册工具 (Aspnet_regiis.exe)

    当在一台计算机上安装了多个 ASP NET 版本时 就说 ASP NET 是并行运行的 在此安装中 Internet 信息服务 IIS 需要知道哪个 ASP NET ISAPI aspnet isapi dll 版本应该处理 ASP NET
  • k8s集群中部署服务之Dockerfile文件准备

    微服务项目各微服务Dockerfile文件准备 一 获取jar的方法 二 各微服务Dockerfile文件准备 2 1 mall auth FROM openjdk 8 ENV TZ Asia Shanghai EXPOSE 30000 V
  • 计算机专业论文选题网站方面,5大网站汇总,搞定新颖的计算机专业毕业设计网站汇总...

    原标题 5大网站汇总 搞定新颖的计算机专业毕业设计网站汇总 2021年了 很多计算机专业的同学都会问 我不想再做XX管理系统 XX选课系统了 哪里有一些新颖的毕业设计题目可以参考 或者做新颖的毕业设计应该浏览哪些网站 笔者根据自己的经验 给
  • 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q 如何将数据集划分为测试数据集和训练数据集 A three ways 1 像sklearn一样 提供一个将数据集切分成训练集和测试集的函数 默认是把数据集的75 作为训练集 把数据集
  • 书写我的人生回忆录-这应该是给父母最好的礼物

    作为一个业余的软件开发爱好者 我又捣鼓了一个有意思的小东西 使用完全免费哈 书写我的人生回忆录 是一款软件 其中包含70个问题 涵盖了父母的个人喜好 家庭 工作 人生经历和态度等方面 通过回答这些问题 您的父母将有机会反思他们的人生 并与您
  • Faster Rcnn 代码解读之 config.py

    from future import absolute import from future import division from future import print function import os import os pat
  • unordered_map详解

    p include stdafx h include p
  • spark基本知识点之内存管理

    原地址 点击打开链接 Spark Memory Management 25 Replies Starting Apache Spark version 1 6 0 memory management model has changed Th
  • GIS项目启动时手动添加依赖

    gis项目在idea下启动前需要手动安装的包 mvn install install file DgroupId org geotools jdbc DartifactId gt jdbc oracle Dversion 18 2 Dpac
  • centOs 6.5 ssh配置无密码登入

    1 安装ssh 若没安装的话 sudo apt get install ssh 2 配置为可以免密码登陆本机 2 1查看在master用户下是否存在 ssh文件夹 ssh前面有 的是隐藏文件夹 输入命令ls a home master 我的
  • omnifocus3透视 任务分类实例详解

    目录 1任务分类 2标签 任务细化的一种属性 3任务分类实例详解 4透视 上大学之前 好巧 今天9号 高考结束 我们每周的任务数量很明确 本学期几本书的学习 复习 但是步入社会之后 参与项目数量逐渐增加 需要沟通的人也越来越复杂 每日任务不
  • 认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

    ESP32 C3 学习测试到今天 一直在使用 ESP IDF 的框架 但是还从来没有注意过工程结构 遇到复杂一点的项目 工程结构就显得太乱了 本文就来了解下 ESP IDF 工程结构 目录 前言 一 ESP IDF工程基本框架 1 1 工程