news 2026/6/10 18:07:35

添加组件到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/6/10 12:33:02

二十年“架骨注魂”的旅程

摘要 数字化转型的成功,不取决于技术的先进与否,而取决于管理思想(血肉灵魂) 与数字系统(骨骼架构) 能否在互动中相互塑造,形成具有自适应能力的 “数字共生体” 。 本系列旨在为这场深刻变革提…

作者头像 李华
网站建设 2026/6/10 12:39:52

如何处理 React 中事件处理程序的绑定问题

如何处理 React 中事件处理程序的绑定问题 —— 从「this 丢失」到「性能飙红」的实战手册 一句话总结:用「箭头函数 useCallback 传参模板」三件套,让事件绑定既安全又高性能! 一、为什么要「处理」事件绑定? React 事件绑定…

作者头像 李华
网站建设 2026/6/10 14:10:50

论文降重 + 去 AIGC 双 buff!虎贲等考 AI 让学术合规率飙升 98%

“查重率 35% 改到崩溃,越改逻辑越乱”“AI 写的初稿被检测出 AIGC 痕迹,直接打回重写”“降重只换同义词,导师批‘学术性丧失’”—— 论文写作的最后一道坎,往往是 “降重” 与 “去 AIGC 痕迹”。很多人陷入 “降重 改字”“去…

作者头像 李华
网站建设 2026/6/10 14:14:15

HoloOcean水下机器人模拟器:从1.0到2.0的重大升级

随着水下机器人技术的快速发展,高保真仿真平台已成为算法开发、系统验证和任务预演的关键工具。HoloOcean 作为一款基于游戏引擎构建的开源水下机器人模拟器,自2022年发布以来,已成为学术界和工业界的重要工具。近日,其开发团队发…

作者头像 李华
网站建设 2026/6/10 16:05:07

Python计算机毕设之基于python养老社区的查询预约系统养老服务预约系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华