ESP32开发2——新建项目

由于之前都是使用keil这种IDE进行开发,很多步骤如创建工程、编译都可以在IDE内完成。因此进行ESP32开发首先要了解它项目的文件结构与编译方式,能够创建一个项目,这样才能进入后续的开发学习。

ESP-IDF框架文件结构

未经编译的项目

在这以例程中的Sample project为例进行展开。

首先在官方例程中找到它 路径:__./esp-idf/examples/get-started/sample_project

可以看到它的文件结构

├──sample_project
		├── main
		│   ├── CMakeLists.txt
		│	├── component.mk
		│   └── main.c
		├── CMakeLists.txt
		├── Makefile
		└── README.md

上述的文件结构中 _CMakelists.txt,Makefile,component.mk_都是编译文件,由此我们也可以看出其实它支持两种编译方式 CMkake和GNU Make。我们通常使用CMake因此只需要关注_CMakelists.txt_文件即可。

它的文件结构还是较为简单的,顶层文件夹_sample_project_中包含一个mian文件夹(又称为组件)及顶层编译文件CMakelists.txt,而在_main_文件夹中为源代码main.c组件的编译文件CMakelists.txt

  • mian文件夹:这个文件夹下主要用于存放源文件,也可以将其成为main组件。main是默认名称,在CMake默认包含此组件。若修改文件名称需要同步更改相应CMake变量
  • 顶层CMakelists.txt:包含整个项目的构建设置,包括CMake版本、文件索引等信息
  • 源代码main.c:项目的源代码,名称可以任意但同样的若改变文件名需要在组件CMakelists.txt中同步更改
  • 组件CMakelists.txt:源文件与相应库链接
编译后项目

项目经过编译后会增加一些文件,文件结构也会有所不同

├──sample_project
		├── build
		│   ├── bootloader
		│	└── ...
		├── main
		│   ├── CMakeLists.txt
		│	├── component.mk
		│   └── main.c
		├── CMakeLists.txt
		├── Makefile
		├── README.md   
		└── sdkconfig

相较于未编译的文件,编译后多了build文件夹sdkconfig文件,这些都是自动创建的无需开发者操作。

  • build文件夹:为经过编译器编译后产生的编译文件包括临时目标文件、库文件以及最终输出的二进制文件
  • sdkconfig:此文件为项目配置文件,保存项目的配置信息,执行idf,py menuconfig可更新此文件

新建项目

新建项目可以直接使用idf.py creat_project name指令进行创建

不过为了方便我们直接使用现成的项目复制,再对其进行修改。这里以上述的sample_project项目为例。

文件结构如下

├──sample_project
		├── BSP
		│	├── inc
		│	└── src
		├── main
		│   ├── CMakeLists.txt
		│   └── main.c
		├── CMakeLists.txt
		└── README.md

文件结构如图

ESP32新增特征服务 esp32项目_ESP32新增特征服务

其中BSP文件夹下存放模块化的驱动文件

首先对顶层CMakelists.txt文件进行编辑

ESP32新增特征服务 esp32项目_源文件_02

# 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)

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

主要注意最下面的**project(sample_project)**这个用于指定项目名称,因此当文件夹名称改变时也要对此进行编辑

接着对mian文件夹下的CMakelists.txt文件进行编辑

ESP32新增特征服务 esp32项目_ESP32新增特征服务_03

set(my_inc  "main.c" 
            "../BSP/src/led.c" )#源文件索引
            
idf_component_register(SRCS "${my_inc}" #源文件列表
                    INCLUDE_DIRS "."    #头文件目录
                                 "../BSP/inc")

该文件用于设置需要编译的文件,所有引用的源文件都要包含进。由于驱动文件都放置于上级目录下的BSP文件下 因此需要开头加上“…/”表面上一级目录下。

这样一个基础的项目就创建完毕了,之后就可以直接复制该项目进行操作,只要根据实际情况更改两个CMlists.txt文件即可。