基于ESP-IDF的ESP32开发记录——自己新建组件以及添加依赖

目的

工作需要,今年开个新坑ESP32。纯小白,很多地方也是自己摸索的,可能有写地方会误人子弟,看客们见谅。

环境

ESP-IDF v5.2.1

使用ESP-IDF的sample_example模板新建工程。目录如下:

文档的结构树是:
 --项目目录:

  	--build

 	--components	(这个是esp-idf帮我创建项目的时候,把esp-idf根目录下的组件库复制到项目的文件夹内产生的)

 	--main 

 		--main.c 

 		--cmakelists.txt 

 	--User_components 

 		--system		(我自己创建的组件库 可以理解为 C51里面的外设头文件和外设.c)

 			--user_system.c 

 			--user_system.h 

 			--cmakelists.txt	(自己编写的 cmakelists 每一个组件都需要一个单独的cmakelist)

 	--CMakelists.txt		(项目文件夹下的cmakelists)

 	--sdkconfig 

大致说一下就是项目目录下有一个cmakelists,mian文件夹内也有一个cmakelists,项目目录的cmakelists是cmake这个工具帮我们构建项目的入口(?)大致是这个意思。

在项目目录下的cmakelists.txt中:

# For more information about build system see
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)

set(EXTRA_COMPONENT_DIRS "./User_components/system")

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(ts1)

比较重要的是这句:set(EXTRA_COMPONENT_DIRS "./User_components/system")

意思就是 设置外部组件的目录是 (相对项目目录cmakelists.txt位置) ./User_components/system,如果不加这一句,那么就无法找到自己编写的组件的头文件。

在main.c中写:

#include <stdio.h>
#include "user_system.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

const char *TAG = "example";

unsigned char s_led_state = 0;


void app_main(void)
{
    configure_led();
    while (1)
    {
        blink_led();
        s_led_state = !s_led_state;
        vTaskDelay(500 / portTICK_PERIOD_MS);
    }
}

这里是可以顺利找到user_system.h这个头文件的。

user_system.h内容:

#ifndef __USER_SYSTEM_H
#define __USER_SYSTEM_H

#define BLINK_GPIO CONFIG_BLINK_GPIO

extern const char *TAG;
extern unsigned char s_led_state;

void blink_led(void);
void configure_led(void);

#endif /*__USER_SYSTEM_H*/

user_system.c内容:

#include "user_system.h"
#include "driver/gpio.h"
#include "esp_log.h"

void blink_led(void)
{
    /* Set the GPIO level according to the state (LOW or HIGH)*/
    gpio_set_level(33, s_led_state);
}

void configure_led(void)
{
    ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
    gpio_reset_pin(33);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(33, GPIO_MODE_OUTPUT);
}

在没有编写User_components/system/CMakelists.txt文件前,编译时是会报错的,会提示找不到driver/gpio.h文件,查询了很多教程和博客之后,得知system组件的cmake需要这样写:

idf_component_register( SRCS "user_system.c"
                        INCLUDE_DIRS "."
                        REQUIRES driver)

其实跟main.c的cmake很相似,但是main.c目录下的cmake不需要第三句 REQUIRES drive,是因为espidf自动帮main这个组件包含了一些默认组件,但是我们自己创建的组件就没有包含,需要自己声明需要用到的组件的依赖。

在这里卡了很久,因为我一直想要按照之前的开发思路来开发ESP32,也就是每个外设单独弄一个头文件和c文件,这样方便以后读代码,也算是好习惯。但我自己创建的组件一直报错找不到 drive/gpio.h这个头文件的位置,找的也是晕头转向,也是由于ESP-IDF的教程太少了,也是怪自己粗心,我一直把driver敲错了,敲成了dirver,两个字母顺序的差别,卡了我很久,这里输对了之后user_system.c里面就可以正常的包含gpio.h的头文件了,可以调用API接口了。然后就是项目文件夹的那个cmakelists,我把我自己创建的User_components敲漏了一个s,所以在编译main.c的头文件一直报错找不到user_system.h,输对之后,main.c的报错也解决了。

所有问题基本已经解决,自己添加组件,组件添加依赖的问题基本解决。下一篇再试试,自己添加两个组件,测试一下这两个组件如果放的位置不同,项目目录下的cmakelists需要怎么改。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP32 IDF命令是指使用ESP-IDFESP32 IoT Development Framework)时所使用的命令。ESP-IDF是一个基于ESP32开发框架,用于构建ESP32程序。可以通过以下步骤来安装和使用ESP-IDF命令: 1. 首先,您需要进入ESP32教学导航,这是一个讲解如何使用ESP-IDF构建ESP32程序的原创专栏。可以通过在CSDN中的对话框中选择进入ESP32教学导航来进入专栏目录页。 2. 然后,您可以在目录页中找到ESP-IDF命令的详细说明和用法。这些命令包括编译、烧录、调试等等。您可以按照专栏中的指示逐步学习和使用这些命令来构建ESP32程序。 3. 如果您想在自己的项目中使用ESP-IDF,您可以克隆ESP-IDF存储库,并将其作为子模块添加到您的存储库中。可以使用以下命令将ESP-IDF存储库添加为子模块:git子模块添加组件/esp32-idf-sqlite3。然后,您可以下载包含子模块的示例文件,并解压缩。可以使用sudo安装。 总之,ESP32 IDF命令是使用ESP-IDF构建ESP32程序时所使用的一系列命令,您可以通过ESP32教学导航和相关资源来学习和使用这些命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ESP32ESP-IDF 教学(六)——硬件I2C总线外设(I²C)](https://blog.csdn.net/m0_50064262/article/details/118656785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [esp32-idf-sqlite3:用于esp-idfesp32)框架SQLite库](https://download.csdn.net/download/weixin_42124743/18466824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值