news 2026/5/1 8:14:11

添加组件到idf项目中

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
添加组件到idf项目中

在 ESP-IDF 工程里,把“旧驱动”从工程里剔除、再把“新驱动”放进components/作为组件,核心就是两件事:组件目录结构 + CMake 注册/依赖关系。你给的这个工程本身就是标准 ESP-IDF 工程结构(根目录有components/main/、顶层CMakeLists.txt)。

下面按“最常见、最稳”的做法给你一套直接可落地的步骤。


1) 把新驱动做成一个组件(放到 components 里)

在工程根目录新建:

components/new_driver/

CMakeLists.txt

include/

new_driver.h

src/

new_driver.c (或 .cpp)

components/new_driver/CMakeLists.txt示例(最常用写法):

idf_component_register(

SRCS

"src/new_driver.c"

INCLUDE_DIRS

"include"

REQUIRES

driver

)

ESP-IDF 的 build-system 会自动扫描PROJECT_DIR/components下的组件并参与构建;顶层CMakeLists.txt默认甚至可以非常“极简”。


2) 让 main(或其它模块)改用新驱动

情况 A:旧驱动本来就是一个组件

比如旧驱动在components/old_driver/

  • 代码里把#include "old_driver.h"改成#include "new_driver.h"

  • main/CMakeLists.txt里显式声明了依赖(有些项目会写),把REQUIRES old_driver改为REQUIRES new_driver

main/CMakeLists.txt常见形态举例:

idf_component_register(SRCS "main.c"

INCLUDE_DIRS "."

REQUIRES new_driver)

提醒:REQUIRES/PRIV_REQUIRES不要依赖CONFIG_xxx做条件判断(ESP-IDF 依赖展开阶段更早),否则很容易“配置生效但依赖没带上”。

情况 B:旧驱动代码散落在 main/ 里(不是组件)

那就把旧驱动源文件从main/CMakeLists.txtSRCS列表里移除,把这些源文件移到components/new_driver/src/,头文件移到components/new_driver/include/,再按上面注册即可。


3) “取消原有驱动”的三种方式(选一种)

✅ 最推荐:直接删掉或改名旧组件目录

如果旧驱动是components/old_driver/

  • 直接删除该目录,或改名(避免同名组件被扫描到)

这是最干净的“取消”。

✅ 可控做法:顶层 CMakeLists 用 EXCLUDE_COMPONENTS 排除

如果你暂时不想删目录(比如留着对比),可以在顶层CMakeLists.txt里,在include(project.cmake)之前加:

set(EXCLUDE_COMPONENTS old_driver)

cmake_minimum_required(VERSION 3.16)

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

project(RoPet_ESPS3_AI_EYE)

EXCLUDE_COMPONENTS在 ESP-IDF CMake build 体系里就是用来把组件从构建列表里排除的(社区/官方 issue 里也常用这个方式)。

注:它主要减少“参与构建/编译”的组件,是否减少最终 bin 大小取决于链接裁剪与实际引用关系。

✅ 如果旧驱动来自 managed_components(组件管理器下载的)

不要改managed_components/(官方建议避免手改),做法是:

  1. 把它复制到components/下改成你的版本(同名可覆盖优先级)

  2. idf_component.yml(如果项目用了)里移除该依赖

  3. idf.py reconfigure或删build/重配

ESP-IDF 文档明确提到:需要改 managed 组件时应复制到components,并且“同名组件按优先级覆盖”;覆盖后要reconfigure


4) 顶层 CMakeLists.txt 需要怎么改?

大多数情况下不需要改。
因为components/本来就是默认扫描目录,顶层 CMakeLists 最小只要三行也能工作。

你只有在下面两种情况才需要动顶层 CMakeLists:

  • 新驱动不放在components/,而放在别的目录:用EXTRA_COMPONENT_DIRS加路径(文档里有说明)。

  • 你想“保留旧驱动目录但不编译”:用上面的EXCLUDE_COMPONENTS


5) 最后别忘了:清理 + 重配一次

组件增删/覆盖后,按文档建议做一次:

idf.py fullclean

idf.py reconfigure

idf.py build

(或直接删除build/目录再idf.py build


如果你把“旧驱动”的名字(组件目录名或源文件路径)贴出来,比如它在components/xxx还是main/xxx,我可以按你这个工程的实际结构,把要改的文件清单 + 每个 CMakeLists 具体改哪几行直接给你对照版。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 15:12:26

双向守护 物业健康一体机守护业主与员工安心

物业服务行业涵盖安保、保洁、工程维修、客服等多个岗位,一线员工直接对接业主日常起居,其身体健康状况不仅关系到自身履职安全,更关联着园区公共安全与业主生活体验。健康检测作为物业用工管理与园区服务的关键环节,传统人工登记…

作者头像 李华
网站建设 2026/4/18 10:16:17

汽车脏污检测与识别 - YOLO11-C3k2-PSFSConv优化模型详解

CarCleanliness数据集是一个专注于汽车脏污检测与识别的数据集,采用YOLOv8格式标注,共包含670张图像。该数据集由qunshankj平台提供,遵循CC BY 4.0许可协议,于2025年6月30日创建。数据集涵盖了汽车多个区域的脏污情况,…

作者头像 李华
网站建设 2026/5/1 5:51:22

短效代理IP有哪些使用场景?

短效代理IP作为企业级网络服务中的一种灵活工具,正逐渐在多个高频应用场景中展现出独特价值。那么短效代理IP适合用在哪些业务中?是否比长期IP更具优势?本文将围绕这些问题,深入解析短效代理IP的定义、典型应用场景以及选择建议&a…

作者头像 李华
网站建设 2026/5/1 6:22:52

收藏!AI入行避坑指南:招聘乱象背后,小白/程序员如何少走弯路

当下,AI领域的热度居高不下,无论是在职程序员想转岗深耕,还是零基础小白想跨界入行,都把AI当成了“新风口”。但很多人一头扎进去才发现,这条路远比想象中坎坷,甚至越努力越迷茫。 其实,AI入行…

作者头像 李华
网站建设 2026/5/1 5:51:12

写论文软件哪个好?虎贲等考 AI 凭全流程赋能,碾压传统工具

临近毕业季,“写论文软件哪个好” 成了无数学子的高频疑问。有人死守 Word 手动排版,改格式改到凌晨;有人用通用 AI 生成内容,却因文献虚构、查重率超标被导师驳回;有人东拼西凑多款工具,文献管理用 Zotero…

作者头像 李华