idf_component.yml文件

idf_component.yml属于哪个ESP-IDF组件,就放在那个组件的根目录下。

如:

project/
├── CMakeLists.txt
├── main/
│   ├── CMakeLists.txt
│   ├── idf_component.yml       # main组件的依赖
│   └── main.c
├── ports/
│   ├── CMakeLists.txt
│   ├── idf_component.yml       # ports组件的依赖
│   └── ...
└── managed_components/

如果ports/CMakeLists.txt中存在:

idf_component_register(
    SRCS ...
    INCLUDE_DIRS ...
)

ports就是一个ESP-IDF组件,它可以拥有自己的:

ports/idf_component.yml

ESP-IDF构建系统 + ESP-IDF Component Manager

idf.py reconfigure/build
        ↓
idf.py调用CMake
        ↓
ESP-IDF的project.cmake初始化项目
        ↓
扫描项目中的ESP-IDF组件
        ↓
Component Manager查找每个组件的idf_component.yml
        ↓
解析dependencies
        ↓
计算依赖关系和兼容版本
        ↓
读取/更新dependencies.lock
        ↓
下载缺少的组件到managed_components
        ↓
把下载的组件加入CMake构建

ports/idf_component.yml

dependencies:
  idf: ">=6.1"
  espressif/usb_host_uvc: "2.6.0"
  espressif/esp_h264: "1.4.1"
  espressif/esp_muxer: "1.2.3"
ESP-IDF Component Manager读取这个文件,下载:
  • usb_host_uvc
  • usb
  • H.264组件
  • MP4复用组件
  • 它们的传递依赖

下载结果放在:

managed_components/

也可以用命令添加依赖,例如:

idf.py add-dependency "espressif/usb_host_uvc^2.6.0"

项目配置

必须在sdkconfig配置
CONFIG_USB_HOST_HUBS_SUPPORTED=y

如果只有一级Hub,可以关闭多级Hub:

# CONFIG_USB_HOST_HUB_MULTI_LEVEL is not set