1.创建新的ESP-IDF组件
img1
如图所示,选择后会要求输入组件的名称,这里命名为 "blink" ,点击回车键即可创建。
img2
可以看到工程目录下新增了 "components" 目录,里面存放了刚刚创建的 "blink"。
components
└── blink
│
├── include
│ └── blink.h
├── blink.c
└── CMakeLists.txt
2.修改代码
main.c
#include <stdio.h> #include "blink.h" #define D4_PIN GPIO_NUM_12 void app_main(void) { blink_init(D4_PIN); while (1) { blink(D4_PIN); } }
blink.h
#ifndef BLINK_H #define BLINK_H #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" void blink_init(gpio_num_t gpio); void blink(gpio_num_t gpio); #endif
blink.c
#include <stdio.h> #include "blink.h" void blink_init(gpio_num_t gpio) { gpio_reset_pin(gpio); gpio_set_direction(gpio, GPIO_MODE_OUTPUT); } void blink(gpio_num_t gpio) { gpio_set_level(gpio, 1); vTaskDelay(pdMS_TO_TICKS(1000)); gpio_set_level(gpio, 0); vTaskDelay(pdMS_TO_TICKS(1000)); }
修改 完成后点击编译,然后会出现错误信息
然后打开 "components/blink/CMakeLists.txt"
CMakeLists.txt
idf_component_register(SRCS "blink.c" INCLUDE_DIRS "include" PRIV_REQUIRES "driver")
依赖
PRIV_REQUIRES:私有依赖
REQUIRES:公共依赖
blink中要用到gpio,而gpio是driver组件中的东西,所以这里要依赖于"driver"组件,又因为只想blink自己调用而不向上层暴露,所以使用PRIV_REQUIRES。
然后再编译便没有报错了 ,烧录后也可看到led闪烁。