先让工程真的依赖一个外部组件
只有内置SDK的工程难以看清外部依赖。本篇用led_strip驱动指定v1.1板GPIO38的单颗板载RGB,每秒提交低亮红/绿;无外接灯条、不换另一块板的引脚。驱动返回成功仍不是颜色测量,本站没有实体运行结果。
默认来源是registry的espressif/led_strip精确3.0.2;另交付同一应用的固定Git来源。IDF5.5.5、组件管理器实际2.5.2与环境记录分别可查,不用“最新版”概括。下载包提供两套真实生成lock、失败输入和恢复用manifest。
- 做到这里,你应该看到
- 明确SDK、组件管理器、组件版本和板载GPIO是四个不同条件。
参考:[1] ESP-IDF5.5.5组件管理:解析、lock与下载目录[2] Component Manager2.5.2 manifest:registry/Git/path/version语义[4] 官方registry:espressif/led_strip3.0.2[5] led_strip固定Git源码:组件版本、依赖、API与许可[7] 指定DevKitC-1 v1.1连接器、USB与板载RGB资料
manifest写约束,lock记解,managed目录放产物
idf_component.yml是人维护的来源和约束;dependencies.lock由管理器生成,记录实际版本、来源、组件hash、manifest_hash与target,应随源代码保存。managed_components是下载结果,不手改、不当成本站原创,也不靠复制旧目录代替干净重建。
组件lock不锁住SDK安装器、Python、编译器、操作系统或所有构建元数据。换电脑还要按E01建立固定SDK环境;有lock也可能因网络或认证不可达而失败。这里在同一电脑的新目录验证,不声称已测另一电脑/OS,更不保证固件SHA跨环境必定相同。
| 材料 | 负责的事情 |
|---|---|
| manifest | 精确版本/范围、registry或Git来源 |
| dependencies.lock | 管理器求得的实际版本与内容hash |
| managed_components | 下载后的自动产物,不手改 |
| SDK tools/constraints与环境记录 | 工具与Python等另外的条件 |
| 源码/固件/日志SHA | 本次具体输入与结果的可追溯摘要 |
- 做到这里,你应该看到
- 能指出哪份可编辑、哪份应自动生成,以及什么条件没有被组件lock锁住。
参考:[1] ESP-IDF5.5.5组件管理:解析、lock与下载目录[2] Component Manager2.5.2 manifest:registry/Git/path/version语义[3] Component Manager2.5.2 Git来源解析为实际commit[8] ESP-IDF v5.5.5构建系统:组件注册、main特殊依赖、公开私有头、Kconfig与defaults
从registry取精确版本,保留生成锁再清洁重建
默认manifest精确约束==3.0.2和IDF==5.5.5。首次配置自动下载并生成lock;检查type=service、registry_url、component_hash、target和SDK版本,不只看编译最后一行。
之后在新解压目录保留相同manifest+lock,但不带build/sdkconfig/managed_components再build。本站实际完成这次干净构建并比较lock;需要联网取得依赖,不把下载缓存成功说成离线包可用。^、~、>=允许范围,有意update-dependencies可能重算,升级应单独审核。
dependencies:
idf: "==5.5.5"
espressif/led_strip:
version: "==3.0.2"
- 做到这里,你应该看到
- lock确实对应这份manifest和esp32s3,干净目录能取得同一审核解。
参考:[1] ESP-IDF5.5.5组件管理:解析、lock与下载目录[2] Component Manager2.5.2 manifest:registry/Git/path/version语义[4] 官方registry:espressif/led_strip3.0.2[6] Component Manager2.5.2版本范围与精确版本说明
Git方案固定仓库子目录与完整commit
第二份新目录切换到Git模板与对应Git lock。path=led_strip相对仓库根;version给完整40位commit,而不是省略后跟随默认分支。Git的version语义与registry的语义版本不同,branch/tag名称可能移动。
本次Git源码内manifest也标3.0.2,12个C/H与registry包实际逐字一致;但两个source和component_hash不同,不能据版本名认定整个源包相同。两套方案是替代关系,不同时激活,不手工把一个lock版本字段改成另一方案。
| 操作 | 在第二份新目录执行 |
|---|---|
| 选择Git来源 | cp manifests/idf_component.git.yml main/idf_component.yml |
| 使用对应锁 | cp locks/git.dependencies.lock dependencies.lock |
| 构建 | idf.py build |
| 检查 | source.type=git;version为完整commit;path为led_strip |
dependencies:
idf: "==5.5.5"
espressif/led_strip:
git: "https://github.com/espressif/idf-extra-components.git"
path: "led_strip"
version: "3a49da30e5218ffc55f9bfd2224f8f063a52e266"
- 做到这里,你应该看到
- 来源与真实lock一致,Git commit可追溯到实际仓库内容。
参考:[2] Component Manager2.5.2 manifest:registry/Git/path/version语义[3] Component Manager2.5.2 Git来源解析为实际commit[4] 官方registry:espressif/led_strip3.0.2[5] led_strip固定Git源码:组件版本、依赖、API与许可[6] Component Manager2.5.2版本范围与精确版本说明
故意请求不存在版本,确认先在求解阶段失败
第三份副本使用invalid模板,把版本设成99.99.99。本站实际reconfigure得到“no versions … match ==99.99.99”,Exit2;尚未编译,更没有接触串口。不要为了这个错误重刷板或随意升级全部依赖。
用registry模板和匹配锁恢复后,reconfigure实际成功。出现下载错误先保留URL、版本与错误,再查网络/代理/认证;私有Git使用本机凭据工具,不把token写入公开manifest。需要改第三方实现时保存修改为本地组件或固定fork,不手改自动目录的component_hash来消音。
cp manifests/idf_component.invalid.yml main/idf_component.yml
idf.py reconfigure
# 恢复已审核的registry方案
cp manifests/idf_component.registry.yml main/idf_component.yml
cp locks/registry.dependencies.lock dependencies.lock
idf.py reconfigure
idf.py build- 做到这里,你应该看到
- 失败输入、求解错误、对应恢复都明确;恢复版本后仍须重新构建。
参考:[1] ESP-IDF5.5.5组件管理:解析、lock与下载目录[2] Component Manager2.5.2 manifest:registry/Git/path/version语义[3] Component Manager2.5.2 Git来源解析为实际commit[4] 官方registry:espressif/led_strip3.0.2
两种来源共用同一份实际应用
下方main.c真正包含led_strip API,并通过CMake组件属性记录选定来源的版本标识。官方20220413版v1.1原理图p2的D6标注SK68XXMINI-HS,接3.3V;不要把库枚举LED_MODEL_WS2812当作实物料号。代码使用该枚举的名义0码0.3/0.9µs、1码0.9/0.3µs、reset280µs及GRB,与通用Rev04手册的编码表对照。该手册VDD为3.7…5.5V、部分电参测试4.5…5.5V,与板图3.3V条件不同,这只是名义编码参考,不证明整板电气兼容。指定板的兼容性与颜色仍待实测;不因此修改板供电。GPIO38、10MHz RMT与单像素也不能套给任意开发板。
构建使用组件公开API,外部源码由管理器按manifest取得。初始化失败明确记录并返回;每次set/refresh结果单独报告,低亮红/绿只是应观察的实体目标,不是本站已测颜色。升级3.x下一版仍要重新读API、依赖和板级效果。
// SPDX-License-Identifier: MIT
#include <inttypes.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_system.h"
#include "led_strip.h"
#ifndef DEMO_LED_STRIP_VERSION
#define DEMO_LED_STRIP_VERSION "unknown"
#endif
void app_main(void) {
const char *tag="E07";
ESP_LOGI(tag,"IDF=%s led_strip=%s target=DevKitC-1-v1.1 N8R8 GPIO38; source determined by manifest+lock",esp_get_idf_version(),DEMO_LED_STRIP_VERSION);
led_strip_handle_t strip=NULL;
led_strip_config_t config={.strip_gpio_num=38,.max_leds=1,.led_model=LED_MODEL_WS2812,.color_component_format=LED_STRIP_COLOR_COMPONENT_FMT_GRB};
led_strip_rmt_config_t rmt={.clk_src=RMT_CLK_SRC_DEFAULT,.resolution_hz=10000000,.flags.with_dma=false};
esp_err_t err=led_strip_new_rmt_device(&config,&rmt,&strip);
if(err!=ESP_OK){ESP_LOGE(tag,"init failed: %s; no successful LED action claimed",esp_err_to_name(err));return;}
ESP_ERROR_CHECK(led_strip_clear(strip));
for(uint32_t seq=0;;++seq){
if(seq%2==0)err=led_strip_set_pixel(strip,0,2,0,0);
else err=led_strip_set_pixel(strip,0,0,2,0);
if(err==ESP_OK)err=led_strip_refresh(strip);
ESP_LOGI(tag,"seq=%" PRIu32 " driver_result=%s expected_color=%s; physical color unverified",seq,esp_err_to_name(err),seq%2==0?"dim-red":"dim-green");
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
参考:[4] 官方registry:espressif/led_strip3.0.2[5] led_strip固定Git源码:组件版本、依赖、API与许可[7] 指定DevKitC-1 v1.1连接器、USB与板载RGB资料[8] ESP-IDF v5.5.5构建系统:组件注册、main特殊依赖、公开私有头、Kconfig与defaults[9] 官方v1.1原理图20220413 p2:D6=SK68XXMINI-HS及3.3V供电[10] SK68XX MINI-HS Rev04 p5/6/8:电压条件、名义时序与GRB(通用器件资料)
换电脑前,先把“可重建”做成一份记录
把源码、公开defaults、两类manifest、对应lock与环境版本记录一起保存;不要打包整个SDK和本地managed缓存。新电脑按E01安装固定5.5.5,再用当前审核方案构建,保存完整命令、求解解、日志与固件摘要。不同环境的构建元数据可能变化,先比较来源和配置,不能只靠文件名判断相同。
本站已完成registry默认、同lock干净registry、固定Git构建及失败/恢复配置;没有另一OS、烧录、真实RGB或串口记录。observations.csv为空;主机求解和源文件比较不构成器件仿真。对外发布前保留上游Apache许可与新应用MIT归属,后续有意升级需重新审查与构建。
- 做到这里,你应该看到
- 每个通过项能指向实际执行记录,未做的换机与实板步骤保持pending。
参考:[1] ESP-IDF5.5.5组件管理:解析、lock与下载目录[2] Component Manager2.5.2 manifest:registry/Git/path/version语义[3] Component Manager2.5.2 Git来源解析为实际commit[4] 官方registry:espressif/led_strip3.0.2[5] led_strip固定Git源码:组件版本、依赖、API与许可[6] Component Manager2.5.2版本范围与精确版本说明[7] 指定DevKitC-1 v1.1连接器、USB与板载RGB资料
资料来源与版本说明
按固定SDK、组件源码与指定板级核对;实际构建和主机输入检查另有证据,没有本站烧录、GPIO或串口运行结果。干净构建在同一电脑的新目录执行,不冒充换机或跨OS实测。资料核对日期:。资料核对、程序构建与实板测试分别记录,不互相替代。
- ESP-IDF5.5.5组件管理:解析、lock与下载目录
- Component Manager2.5.2 manifest:registry/Git/path/version语义
- Component Manager2.5.2 Git来源解析为实际commit
- 官方registry:espressif/led_strip3.0.2
- led_strip固定Git源码:组件版本、依赖、API与许可
- Component Manager2.5.2版本范围与精确版本说明
- 指定DevKitC-1 v1.1连接器、USB与板载RGB资料
- ESP-IDF v5.5.5构建系统:组件注册、main特殊依赖、公开私有头、Kconfig与defaults
- 官方v1.1原理图20220413 p2:D6=SK68XXMINI-HS及3.3V供电
- SK68XX MINI-HS Rev04 p5/6/8:电压条件、名义时序与GRB(通用器件资料)