在VScode用ESP-IDF创建ESP32工程

1.创建简单工程

1.加载环境后

thonny 安装esptool esp-idf安装_thonny 安装esptool


注:加载环境后,可以用idf.py 查看相关命令

2.用idf.py create-project filename创建工程

thonny 安装esptool esp-idf安装_头文件_02

创建工程后,会出现如图所示的结构。

thonny 安装esptool esp-idf安装_txt文件_03

3.进入刚刚创建好的工程下,配置目标芯片,我以ESP32为例

idf.py set-target esp32

thonny 安装esptool esp-idf安装_头文件_04

设置目标芯片后,会出现如图结构。

thonny 安装esptool esp-idf安装_头文件_05

其中build是编译过程中会出现的文件,sdkconfig是运行用于保存menuconfig的文件。

4.然后使用idf.py menuconfig。

5.接着就可以写代码然后用idf.py build 编译啦。

2.创建带组件的工程

- myProject/
             - CMakeLists.txt
             - sdkconfig
             - components/ - component1/ - CMakeLists.txt
                                         - Kconfig
                                         - src1.c
                           - component2/ - CMakeLists.txt
                                         - Kconfig
                                         - src1.c
                                         - include/ - component2.h
             - main/       - CMakeLists.txt
                           - src1.c
                           - src2.c

             - build/

esp32标准树结构如图所示,只需按照类似结构创建我们的工程即可。
components” 目录中包含了项目的部分自定义组件,并不是每个项目都需要这种自定义组件,但它有助于构建可复用的代码或者导入第三方(不属于 ESP-IDF)的组件,或者也可以在顶层 CMakeLists.txt 中设置 EXTRA_COMPONENT_DIRS 变量以查找其他指定位置处的组件。
“main” 目录是一个特殊的组件,它包含项目本身的源代码。”main” 是默认名称,CMake 变量 COMPONENT_DIRS 默认包含此组件,但您可以修改此变量。

创建组件:

①idf.py create-compoent name:在当前目录下创建一个组件。

执行命令后出现如下结构,

thonny 安装esptool esp-idf安装_txt文件_06

②idf.py -C components create-component my_component:在组件下创建组件。

thonny 安装esptool esp-idf安装_thonny 安装esptool_07

具体参考ESP32官网,API指南,构建系统章节。

创建自己的组件

①在工程创建一个文件夹用于存放自己的组件

thonny 安装esptool esp-idf安装_txt文件_08


例如,我的存放组件的文件夹是my_com

②创建一个bsp的组件,在组件中,include用于存放.h头文件,src用于存放.c文件

③创建一个components.mk文件用于指明路径

thonny 安装esptool esp-idf安装_txt文件_09

④在CMakeLists.txt文件中注册头文件路径和.c文件

thonny 安装esptool esp-idf安装_thonny 安装esptool_10

模块化文件处理:
①在main目录下创建inc、src文件分别存放.h、.c文件
然后在main目录下的CMakeLists.txt文件夹中

idf_component_register(SRCS "./src/mygpio.c"
                            "./src/mytimer.c"
                    INCLUDE_DIRS "."
                                 "./inc")

在SRCS “加入自己的路径下的.c文件”

在INCLUDE_DIRS “加入.h文件”

注:…/标识上一级目录下,./表示本级目录。

②在main目录外创建一个目录专门存放inc、src目录,我以test目录为例子

thonny 安装esptool esp-idf安装_CMake_11


在test目录下创建一个CMakeLists.txt文件

idf_component_register(SRCS "./src/mygpio.c"
                            "./src/mytimer.c"
                    INCLUDE_DIRS "."
                                 "./inc")

注意改变自己的文件路径。
同时还需要更改在最外一层的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.5)
set(EXTRA_COMPONENT_DIRS ./test)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(digital_tub1)

set(EXTRA_COMPONENT_DIRS ./test):设置额外的组件导向,将CMake指向到test目录下寻找我们定义的.c、.h文件。(注意这个语句一定要加,不然CMake找不到路径)

创建一个文件夹引用另一个文件夹的头文件

thonny 安装esptool esp-idf安装_thonny 安装esptool_12


在app文件夹中引用bsp文件夹的头文件,在app文件夹下创建一个新的cmakelist文件夹,在cmakelist文件夹中加入头文件路径

idf_component_register(SRCS "./src/digital_display.c"
                    INCLUDE_DIRS "."
                                 "./inc"
                                 "/Bsp./inc")

/是根目录
./是当前目录
…/是父目录
/Bsp./inc:表示在Bsp根目录下的inc当前目录下找头文件
注:仍需set(EXTRA_COMPONENT_DIRS ./test):设置额外的组件导向,将CMake指向到test目录下寻找我们定义的.c、.h文件。

以上纯属个人见解,有误之处还请大家指正。