封装 ESP-IDF 组件并上传到 ESP 组件注册表

封装 ESP-IDF 组件并上传到 ESP 组件注册表

介绍

在 ESP-IDF 中,组件(Component)是用于组织代码的基本单元,类似于库。每个组件都是一个独立的模块,包含特定的功能,可以与其他组件一起构建项目。通过这种模块化设计,你的项目可以由多个组件组成,易于管理和复用。此外,ESP-IDF 提供了组件注册表,开发者可以在其中分享组件,也可以轻松使用其他人发布的组件。

创建组件

为了封装一个 ESP-IDF 组件,首先需要创建一个标准的目录结构。在你的项目根目录下,新建一个 components/ 文件夹,在里面创建你的组件文件夹。以 my_component为例,目录结构如下:

css 复制代码
project_directory/
    ├── components/
    │   └── my_component/
    │       ├── CMakeLists.txt
    │       ├── include/
    │       │   └── my_component.h
    │       ├── my_component.c
    ├── main/
    └── CMakeLists.txt

或者也可以通过终端运行以下命令来创建

bash 复制代码
idf.py create-component my_component

如果你是使用VScode进行编程还可以在上方搜索框调用命令

以上方法都可以获得一个基本的组件框架,但如果要将组件发布到 ESP 组件注册表,还需要一些额为的配置文件

上传组件到 ESP 组件注册表

初始化Git 仓库

ESP-IDF 组件通常通过 Git 仓库进行管理。我们需要将组件代码推送到一个 Git 仓库

编写 idf_component.yml 文件

为了能够发布组件,我们需要创建 idf_component.yml 文件,该文件定义了组件的元数据。这个文件需要放在组件的根目录下。

bash 复制代码
version: 1.0.0
license: "MIT"
description: my_component
url: https://github.com/my_Namespace/my_component
files:
  exclude:
  - .git
dependencies:
  idf:
    version: ">=5.3.1"

my_Namespace为你github的名称

license: "MIT" 组件的许可协议,不需要可以删除,如果使用许可协议,需要添加LICENSE文件

发布到组件注册表

接下来,我们将这个组件上传到 ESP 组件注册表,以便分享给其他开发者使用。要将组件发布到 ESP 组件注册表,您需要提供身份验证令牌。方法是通过环境变量进行设置。

获取 API 令牌

首先,您需要从 Espressif 获取 API 令牌。您可以通过以下步骤获取:

  1. 登录到 ESP 组件注册表。
  2. 导航到您的个人资料页面。
  3. 生成一个新的 API 令牌。
设置环境变量

将 API 令牌设置为环境变量 IDF_COMPONENT_API_TOKEN。

发布组件

使用 命令行工具将组件发布到 ESP-IDF 组件注册表。

bash 复制代码
compote component upload --namespace [YOUR_NAMESPACE] --name test_cmp

YOUR_NAMESPACE为你的github名称

添加组件注册表中的组件

上传后,组件就可以在注册表里找到了,想要在项目中添加这个组件也很很简单

搜索框选择ESP显示组件注册表 命令

搜索需要的组件,点击添加即可

当添加组件后,编译时会自动将组件下载到项目的 managed_components 目录中。需要注意的是,该目录中的内容是不可修改的。每个组件的目录下都会自动生成一个 .component_hash 文件,该文件记录了组件的哈希值。在项目构建时,系统会将此哈希值与项目根目录下的 dependencies.lock 文件中的哈希值进行比对。如果两者不一致,系统会自动重新下载该组件。

总结

参考资料
IDF组件管理

相关推荐
杯子不吃紫菜9 分钟前
LangGraph 体系实战(下):中断恢复、流式、子图与设计模式
单片机·嵌入式硬件·设计模式
qq_4480111639 分钟前
中断服务函数简介
嵌入式硬件
Risehuxyc1 小时前
STM32程序逻辑---入口函数逻辑和NVIC嵌套向量中断控制器初始化
stm32·单片机·嵌入式硬件
【 STM32开发 】1 小时前
CubeMX+STM32】SD卡U盘实现__USB+FATFS (F103 篇)
stm32·单片机·嵌入式硬件
jianqiang.xue1 小时前
3倍向量算力:Arm给最小MCU装上本地AI
arm开发·人工智能·单片机
无敌最俊朗-15 小时前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感
wuyk55520 小时前
嵌入式故障诊断-Bug002-局部大数组压栈高温必死机
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·嵌入式实时数据库
Zwawa1 天前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
Dev_XH1 天前
【成品设计】基于沁恒单片机的电动汽车充电站智慧调度系统
stm32·单片机·嵌入式硬件·物联网
shimly1234561 天前
(done) 嵌入式硬件电路图 (5) 重要的元器件特性之二极管三极管
嵌入式硬件